Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
CS257 Computer Science II Kevin Sahr, PhD Lecture 3: Kinds of Data 1 Kinds of Data ✴ In Java there are two distinct kinds of data: 1. primitive data: any data value or variable that has as its data type one of the predefined keyword Java data types 2. objects: data values or variables that are derived from an object class 1- 2 1- 3 1- 4 Primitive Data ✴ There are eight primitive data types in Java ✴ Four of them represent integers: • byte, short, int, long ✴ Two of them represent floating point numbers: • float, double ✴ One of them represents characters: • char ✴ And one of them represents boolean values: • boolean Numeric Primitive Data ✴ The difference between the various numeric primitive types is their size, which determines the range of values they can represent: Type Storage Min Value Max Value byte short int long 8 bits 16 bits 32 bits 64 bits -128 -32,768 -2,147,483,648 < -9 x 1018 127 32,767 2,147,483,647 > 9 x 1018 float double 32 bits 64 bits +/- 3.4 x 1038 with 7 significant digits +/- 1.7 x 10308 with 15 significant digits Objects ✴ objects consist of behavior and attributes ✴ each object is an instance of a particular class • the class is a template or blueprint for creating objects • the class defines the behavior and attributes of instances of that class ✦ attributes are defined by instance variables ✦ behavior is defined by instance methods ✴ primitive data variables are created by declaring them, but objects require a two-step creation process: • declaration of the object variable • instantiation of the object using the new operator 1- 5 1- 6 1- 7 1- 8 Application Programming Interface ✴ the capabilities that a class provides are documented in the class Application Programming Interface (API) ✴ the API is external documentation for human use ✴ the API includes publicly visible: • • • • class/static variables (usually constants only) class/static methods constructors instance methods ✴ for each service method (method with public visibility) in the class the API contains all the information you need to invoke that method: • the method header • a brief description of what the method does Special Classes ✴ Java provides some classes with special abilities that are not available to the classes you create ✴ EX: Java provides the String class with these abilities: • abbreviated instantiation syntax (no new operator required) • concatenation using the + operator Wrapper Classes • Primitive data variables have limited functionality compared to objects § in some OOP languages all variables are objects • It would be useful if they had more object-like functionality • To solve this problem, Java provides wrapper classes that allow primitive data values to be represented as objects with additional functionality Wrapper Classes ✴ The java.lang package contains wrapper classes that correspond to each primitive type: Primitive Type byte Wrapper Class Byte short Short int Integer long Long float Float double Double char Character boolean Boolean void Void 1- 9 Wrapper Classes ✴ The API for each wrapper class lists the services that that class provides ✴see the link to the Java Standard Class Library class API’s on the website ✴ A wrapper class object can always be created from a corresponding primitive data value (and vice versa) ✴ EX: The following statement creates an Integer object that represents the integer 40 as an object Integer age = new Integer(40); 1- 10 Wrapper Classes • An object of a wrapper class can be used in any situation where a primitive value will not suffice • For example, many Java data structures (EX: ArrayList) can only store objects § Primitive data values can not be stored in such data structures, but wrapper objects can be 1- 11 1- 12 Wrapper Classes ✴ Wrapper classes contain static methods that help manage the associated type • EX: the Integer class contains a method to convert an integer stored in a String to an int value: int num = Integer.parseInt(str); ✴ Wrapper classes often contain useful constants as well • EX: the Integer class contains Integer.MIN_VALUE and Integer.MAX_VALUE which hold the smallest and largest int values respectively Autoboxing ✴ To make using wrapper classes more convenient, Java provides special instantiation syntax for wrapper objects • like the String class, no new operator is required ✴ Autoboxing is the automatic conversion of a primitive value to a corresponding wrapper object, EX: Integer age = 40; • The assignment creates the appropriate Integer object ✴ The reverse conversion (called unboxing) also occurs automatically as needed, EX: int older = age + 5; • age is converted to an int before the addition is performed 1- 13 Command Line Programs • Our first few programs in this class will be command line programs § command line programs are those that use only text input from the keyboard and produce only text output • Later we will write programs that use a Graphical User Interface (GUI) 1- 14 1- 15 1- 16 System I/O Objects ✴ The System class contains two public class/static objects that can be used for command line I/O: • The System.out object is of class PrintStream and represents a command line destination to which we can send output (the Monitor) • The System.in object is of class InputStream and represents a command line source we can use for text input (the Keyboard) ✴ The System, PrintStream, and InputStream classes are all in the java.lang package ✴ available to your programs without an import statement Command Line Output ✴ The PrintStream instance method println can be used to send text output to an output destination ✴ the println method automatically appends a new line character (‘\n’) to the output System.out.println ("Whatever you are, be a good one."); PrintStream method object name single String argument The print Method ✴ The PrintStream instance method print can also be used to send text output to an output destination ✴ The print method is similar to the println method, except that it does not append a newline character to the output • does not advance to the next line • anything printed after a print statement will appear on the same line 1- 17 1- 18 1- 19 The Scanner Class • The Scanner class provides convenient methods for reading input values of various types from an InputStream object • The Scanner class is part of the java.util package, and therefore must be imported • The following line creates a Scanner object that reads from the keyboard: § Scanner scan = new Scanner (System.in); • Once created, the Scanner object can be used to invoke various input methods, such as: § String answer = scan.nextLine(); Input Tokens ✴ Unless specified otherwise, white space is used to separate the elements (called tokens) of the input ✴ White space includes space characters, tabs, new line characters ✴ The next method of the Scanner class reads the next input token and returns it as a String ✴ Methods such as nextInt and nextDouble read the next token and convert it to a particular type • if token is the entire line, the ‘\n’ character remains (see ScanProblem.java and ScanProblem2.java) • Invalid input will throw an exception References ✴ Note that a primitive variable contains the value itself, but an object variable contains the address of the object ✴ An object reference can be thought of as a pointer to the location of the object ✴ Rather than dealing with arbitrary addresses, we often depict a reference graphically num1 name1 38 "Steve Jobs" 1- 20 Assignment Revisited ✴ The act of assignment takes a copy of a value and stores it in a variable ✴ For primitive types: Before: num1 38 num2 96 num2 = num1; After: num1 38 num2 38 1- 21 Reference Assignment ✴ For object references, assignment copies the address: Before: name1 "Steve Jobs" name2 "Steve Wozniak" name2 = name1; After: name1 "Steve Jobs" name2 1- 22 1- 23 1- 24 Aliases ✴ Two or more references that refer to the same object are called aliases of each other ✴ That creates an interesting situation: one object can be accessed using multiple reference variables ✴ Aliases can be useful, but should be managed carefully ✴ Changing an object through one reference changes it for all of its aliases, because there is really only one object Garbage Collection ✴ When an object no longer has any valid references to it, it can no longer be accessed by the program ✴ The object is useless, and therefore is called garbage ✴ Java performs automatic garbage collection periodically, returning an object's memory to the system for future use ✴ In some other languages, the programmer is responsible for performing garbage collection Lecture 3 Vocabulary primitive data Application Programming Interface (API) service method wrapper classes autoboxing unboxing command line programs references aliases garbage collection 1- 25