1 / 33

Object-Oriented Programming (Java)

Object-Oriented Programming (Java). Topics Covered Today. Unit 1.1 Java Applications 1.1.3 Beginning with the Java API 1.1.4 Console I/O. Java API. API stands for Application Programming Interface( 应用程序接口 ) . Java API 是 Java 提供给应用程序的类库,这些库经过仔细的编写,严格地与广泛地测试。

Télécharger la présentation

Object-Oriented Programming (Java)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Object-Oriented Programming (Java)

  2. Topics Covered Today • Unit 1.1 Java Applications • 1.1.3 Beginning with the Java API • 1.1.4 Console I/O

  3. Java API • API stands for Application Programming Interface(应用程序接口). • Java API 是Java提供给应用程序的类库,这些库经过仔细的编写,严格地与广泛地测试。 • Most programs use both features from the Java API and essential language features. • http://java.sun.com/j2se/1.5.0/docs/api/

  4. Package • The classes in the Java API are grouped into packages. • Java用包来管理类名空间,为了解决同名的类有可能发生冲突的问题,包实际提供了一种命名机制和可见性限制机制. • A package is simply a collection of related classes • 所有的图形界面的类都放在java.awt这个包中, • 与网络功能有关的类都放到java.net这个包中。 • The fully qualified name of a class that is part of a package is the package name and the class name separated by a dot. • java.awt.Color

  5. import Statement • 如果在源程序中用到了除java.lang这个包以外的类,无论是系统的类还是自己定义的包中的类,都必须用import语句标识,以通知编译器在编译时找到相应的类文件。 • 如果要从一个包中引入多个类则在包名后加上“.*”表示, 如 • import java.awt.Color; • import java.awt.*; • Classes java.lang.* are automatically imported

  6. Qualified names Simple name Example import java.lang.String; import java.io.FileWriter; import java.io.IOException; public class test { public static void main(String[] args) { try { FileWriter fw = new FileWriter("hello.txt"); String h = "Hello"; String w = "World"; fw.write(h+ " " + w); fw.close (); } catch (IOException e) { System.out.println("Error writing to file:" + e); } } }

  7. The java.lang.String Class (1) • Java中没有处理字符串的基本类型,但是有一个String类可以用来存储和处理字符串。 • String类的成员函数: • String(). Constructs a new String object that represents an empty character sequence. • String(char[] value). Constructs a new String object that represents the sequence of characters contained in the character array. • String(String original). Constructs a new String object that represents the same sequence of characters as the argument. • int size(). Obtains the number of characters in the String. • char charAt(int index). Returns the character at the specified index.

  8. The java.lang.String Class (2) • boolean equals(Object anObject). Returns true if the specified Object represents a String with the same sequence of characters. • int indexOf(int ch). Returns the index of the first occurrence of the character. • int indexOf(String str). Returns the index of the first occurrence of the String. • boolean startsWith(String prefix). Checks if the String has the specified prefix. • String substring(int beginIndex, int endIndex). Returns a substring.

  9. The java.lang.String Class (3) • String类的操作: • String中提供字符串的比较的方法:equals( )和equalsIgnoreCase( ) • 它们与运算符‘= =’实现的比较是不同的。 • 运算符‘= =’比较两个对象是否引用同一个实例, • 而equals( )和equalsIgnoreCase( )则比较两个字符串中对应的每个字符值是否相同。 • 字符串的转化 • java.lang.Object中提供了方法toString( )把对象转化为字符串。 • 字符串"+"操作 • 运算符‘+’可用来实现字符串的连接:String s = “He is ”+age+“ years old.”; • 注意:除了对运算符"+"进行了重载外,java不支持其它运算符的重载。

  10. The java.util.StringTokenizer Class (1) • Tokenizing is the process of breaking a string into smaller pieces called tokens. • 例:下面字符串用空格化分,可分为几个字符串? "This string has five tokens" • Popular delimiters(分割符) include the white space, underscore ( _ ) and the comma ( , ).

  11. The java.util.StringTokenizer Class (2) • StringTokenizer类在java.util 包中,常用的方法有: • StringTokenizer(String str). Constructs a string tokenizer. The tokenizer uses the default delimiter set, white space. • StringTokenizer(String str, String delim). Constructs a string tokenizer. The argument delim contains the character delimiters for separating tokens. • boolean hasMoreTokens(). Tests if there are more tokens to extract. • String nextToken(String delim). Returns the next token in the string. • int countTokens(). Obtains the number of tokens left to be extracted, not the number of tokens in the string.

  12. The java.util.StringTokenizer Class (3) import java.util.*; public class ProductInfo { public static void main(String[] args) { String data = "Mini Discs 74 Minute (10-Pack)_5_9.00"; StringTokenizer tknzr = new StringTokenizer(data, "_"); String name = tknzr.nextToken(); String quantity = tknzr.nextToken(); String price = tknzr.nextToken(); System.out.println("Name: " + name); System.out.println("Quantity: " + quantity); System.out.println("Price: " + price); } }

  13. Java’s Primitive Types • 整型: • byte:8-bit • short:16-bit • int:32-bit • long:64-bit • 浮点型: • float:32-bit • double:64-bit • 字符型:char 16-bit • 布尔型:boolean

  14. The Wrapper Classes (1) • 为了保证处理数据的一致性,Java将基本数据类型也封装成了类,这些类统称为wrapped classes。 • java.lang.Byte • java.lang.Short • java.lang.Integer • java.lang.Long • java.lang.Character • java.lang.Float • java.lang.Double • java.lang.Boolean

  15. The Wrapper Classes (2) public class WrapperConversion { public static void main(String[] args) { Integer objectValue = new Integer(100); int intValue = objectValue.intValue(); long longValue = objectValue.longValue(); double doubleValue = objectValue.doubleValue(); String stringValue = objectValue.toString(); System.out.println("objectValue: " + objectValue); System.out.println("intValue: " + intValue); System.out.println("longValue: " + longValue); System.out.println("doubleValue: " + doubleValue); System.out.println("stringValue: " + stringValue); } }

  16. The Wrapper Classes (3) import java.util.*; public class ProductInfo { public static void main(String[] args) { String data = "Mini Discs 74 Minute (10-Pack)_5_9.00"; StringTokenizer tknzr = new StringTokenizer(data, "_"); String name = tknzr.nextToken(); int quantity = Integer.parseInt(tknzr.nextToken()); double price = Double.parseDouble(tknzr.nextToken()); System.out.println("Name: " + name); System.out.println("Quantity: " + quantity); System.out.println("Price: " + price); } }

  17. Primitives and Wrappers • Primitives in Java aren't objects at all. • Wrapper classesare object versions of the primitive types. • Things get annoying when you have to go back and forth between the two - converting a primitive to its wrapper, using it, then converting the object's value back to a primitive. • Happily, Tiger finally takes care of this issue.

  18. New Java Language Feature • Java 5.0 introduced new language features • http://java.sun.com/j2se/1.5.0/docs/guide/language/ • Autoboxing(自动装箱) /unboxing(自动拆箱) • Automatically converts primitives (such as int) to wrapper classes (such as Integer) • Data value  Object (of matching class)

  19. Autoboxing/Unboxing Example(Classical Approach) • Traditional “boxing” example: List ssnList = new ArrayList(); . . . int ssn = getSocSecNum(); . . . Integer ssnInteger = new Integer(ssn); ssnList.add(ssnInteger); • Why do I have to convert from int to Integer?

  20. Autoboxing/Unboxing Example(New Approach) • “Autoboxing” example: List ssnList = new ArrayList(); . . . int ssn = getSocSecNum(); . . . ssnList.add(ssn); • No need for an explicit conversion to Integer.

  21. Unboxing(Converting Wrapper Types to Primitives) • “Autoboxing/unboxing” example: // Boxing int foo = 0; Integer integer = foo; // Simple Unboxing int bar = integer;

  22. Autoboxing / Unboxing • The need to explicitly convert between primitive types and wrapper objects. • Such as primitive type int, and wrapper object Integer. • Can’t put primitives into Collections. • Autoboxing and Unboxing • Automatic conversion by the compiler • Eliminates casts • Compiler performs these conversions for us.

  23. Unboxing(Converting Wrapper Types to Primitives) • Null value assignment: Integer i = null; int j = i; • i is assigned null (which is legal), and then i is unboxed into j. However, null isn't a legal value for a primitive, so this code throws a NullPointerException.

  24. Incrementing and Decrementing Wrapper Types • Every operation available to a primitive should be available to its wrapper-type counterpart, and vice versa: Integer counter = 1; while (true) { System.out.printf("Iteration %d%n", counter++); if (counter > 1000) break; } • Remember that counter is an Integer. So the value in counter was first auto-unboxed into an int, as that's the type required for the ++ operator. Once the value is unboxed, it is incremented. Then, the new value has to be stored back in counter, which requires a boxing operation.

  25. Levels of Java API • Each JDK defines a standard set of API classes and methods • Sun provides standard extensions to the standard API • Others can and do provide Java APIs

  26. Console I/O

  27. d w o l o r l l e h read( ) Filter InputStream InputStream e.g. from disk file Stream • 在程序中提供一种将数据源连接到应用程序的方法,这样的方式叫做流(stream)。流是数据的真正流动.

  28. Stream Input/Output • Stream • A connection carrying a sequence of data • Bytes  InputStream, OutputStream • Byte streams are used for data-based I/O, called input streams and output streams • Characters  FileReader, PrintWriter • Character streams are used for text-based I/O, called readers and writers • From a source to a destination • Keyboard • File • Network • Memory

  29. Standard Input/Output • Standard I/O • Provided in System class in java.lang • System.in • An instance of InputStream • To input bytes from keyboard • System.out • An instance of PrintStream • To allow output to the screen • System.err • An instance of PrintStream • To allow error messages to be sent to screen

  30. java.io package • Class java.io.BufferedReader • public BufferedReader(Reader in) • Create a buffering character-input stream that uses a default-sized input buffer. • readline(): Read a line of text. • read(): Read a single character. • Class java.io.PrintWriter • public PrintWriter(OutputStream out, boolean autoFlush) • Create a new PrintWriter from an existing OutputStream. • Print formatted representations of objects to a text-output stream. • print(String s): Print a string • println(String s):Print a string and then terminate the line

  31. Template of a class using Console I/O import java.io.*; public class AnyClassUsingIO { private static BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); private static PrintWriter stdOut = new PrintWriter(System.out, true); private static PrintWriter stdErr = new PrintWriter(System.err, true); /* other variables */ /* methods */ }

  32. 4 examples in unit 1.1.4 • PrintlnDemo.java • PrintDemo.java • Hello.java • ReadThreeIntegers.java

  33. Using the printf( ) Convenience Method • Tiger gives us the ability to type printf( ). • import java.io.*; • public class PrintTester { • public static void main(String[] args) { • String filename = args[0]; • try { • File file = new File(filename); • FileReader fileReader = new FileReader(file); • BufferedReader reader = new BufferedReader(fileReader); • String line; • int i = 1; • while ((line = reader.readLine( )) != null) { • System.out.printf("Line %d: %s%n", i++, line); • } • } catch (Exception e) { • System.err.printf("Unable to open file named '%s': %s", • filename, e.getMessage( )); • } } }

More Related