Java程序辅导

C C++ Java Python Processing编程在线培训 程序编写 软件开发 视频讲解

客服在线QQ:2653320439 微信:ittutor Email:itutor@qq.com
wx: cjtutor
QQ: 2653320439
1Freshers Week Java Course
Part 2  
An Introduction to 
Objects and Classes in Java 
Dr.-Ing. Norbert Völker
Lab Assistant: Roxanna Turner
Objects and Classes: Foundations
Procedural Programming
 Procedural programming 
 procedures that implement tasks  
 sequence: read input, perform computations, change 
state, return output 
 Development
 breakdown into smaller and smaller tasks 
 refinement
 control structures: sequencing, if-then-else, …
 Example
 Rectangle area calculation
Rectangle Area – Procedural Style 
public class RectangleArea {
public static void main(String [] args) {
double x1 = 1.0, y1 = 3.0, x2 = 3.0, y2 = 6.0;
showRectangleArea(x1, y1, x2, y2);
}
public static void showRectangleArea(double x1, double y1, 
double x2, double y2) {
double area = Math.abs((x2 - x1) * (y2 - y1));
System.out.println("Rectangle [(" + x1 + "," + y1 + "),(" + x2 + "," 
+ y2 + ")] has area " + area);
}
}
The Idea behind the OO Approach
 Define objects and classes in programming by abstracting 
from real-world entities  
 a “class” is a category of objects
 rectangles, cars, students, …, buffers, actions, …
 an object is an element of a class  
 this rectangle, John’s car, a particular student, ...
 models one particular entity 
 In Java, each object is an instance of exactly one class
Class Diagram Rectangle
Rectangle
x1
y1
x2
y2
area()
toString()
attributes 
(“data”, “state”)
methods 
class name
2Two Objects
r1 : Rectangle
x1=  1.0;
y1 = 3.0
x2 = 3.0
y2 = 6.0 
r2 : Rectangle
x1 = -1.0
y1 =  2.0
x2 = -4.0
y2 =  1.0 
Object Identity and State
 Every object has an identity
 Corresponds to reality. 
 My car” is different from “your car” even if it has the 
same attributes (registration number, make, year, etc) 
 Objects have a state
 Given by the current value of the attributes
 Typically some attributes vary while others stay fixed
 Class Rectangle might be used in a drawing program 
 coordinates can change as the rectangle is moved 
around, stretched or shrunk
Methods
 Methods allow
 creation of objects, changing object state, finding out 
information about objects  
 methods can call other methods! 
 Class Rectangle currently only defines introspection 
methods
 no methods for changing state as yet
 add a method for moving rectangle horizontally 
public void moveX (double x) { …}
OO Approach Remarks
 Break system down into objects/classes
 Your classes should model relevant aspects of reality 
 a “student” object in a Java program only reflects 
certain aspects of real students
 you need to decide what aspects are needed in your 
program
 Class definitions should aim for reusability
 class Rectangle can be used in many different 
situations  
 include those methods which are expected by other 
developers who will be using your class
The Beginnings of Programming 
with Objects and Classes in Java
Using Objects in Java
class Geometry { 
public static void main(String[] args) { 
Rectangle r1; // declaration of variable  
r1 = new Rectangle (1.0, 3.0, 3.0, 6.0);
r1.moveX(-1.0); 
System.out.println(r1 + " has area " + r1.area());
}
}
Exercise: draw a class diagram for class Geometry. 
3Assigning a New Object
r1 =  new Rectangle (1.0, 3.0, 3.0, 6.0);
 creates a new Rectangle object by calling a “constructor” 
and assigns it to variable r1
 You can join a variable declaration with an assignment into 
a single “initialization” statement: 
Rectangle r1 =  new Rectangle (1.0, 3.0, 3.0, 6.0);
x1=1.0
y1=3.0
x2=3.0
y2=6.0
r1
Aliasing 
 Describe the effect of method call
r1.moveX(-1.0); 
 Suppose we add the code below at the end of method 
Geometry.main() ? What would be output? 
Rectangle r2 = r1;
System.out.println(r2);
r1.moveX(1.0);
System.out.println(r2);
r1 = new Rectangle (0,0,0,0);
System.out.println(r2); 
Encapsulation
 We have used Rectangle objects without knowing about 
the implementation of the class.    
 This is an example of encapsulation 
 Information about how an object solves tasks is 
hidden inside the object.
 Similar to “procedural abstraction” – you only need to 
know a procedure signature to call it, not how it is 
implemented.
Implementation: Rectangle.java
public class Rectangle {
double x1, x2, y1, y2;
Rectangle (double x1, double y1, double x2, double y2) { …}
double area() { …  }
public String toString() {…  }
public void moveX (double x) { …}
}
Attributes are also known as
“instance variables” in Java
Attributes
 Attributes are realized in Java as instance variables. 
 Also called the “fields” of the class. 
 The type of an instance variable can either be 
 one of the eight primitive types in Java (byte, short, int, 
long, float, double, char, boolean) or
 a reference type 
 this is used to refer to objects
Method Implementation
double area() { return (Math.abs((x2 - x1) * (y2 - y1)));  }
public String toString() {
return "Rectangle [(" + x1 + "," + y1 + "),(" + x2 + "," + y2 + 
")]";  }
public void moveX (double x) {
x1 += x;
x2 += x; }
 Note the difference between parameters and attributes 
in method moveX(). 
 Do you know the meaning of “void” ?
4Constructors
 For the code above to work, the Java class Rectangle
must have a constructor method
Rectangle (double x1, double y1, double x2, double y2)  
 The name of the constructor method is the same as the 
name of the class.
 Same as the result type of the constructor.
 In UML class diagrams, constructor methods are often 
not shown. 
Constructor Implementation
Rectangle (double x1, double y1, double x2, double y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
 The use of “this” in order avoids a name clash between 
attributes and parameters.  
 Could also use parameter names that differ from 
attribute names. 
Static Attributes and Methods
 Static attributes belong to the class, not particular objects
 have the same value for each object of the class 
 For class Rectangle, we could add a static field count that 
is intialized with 0 and is incremented by 1 whenever a 
new rectangle is created. 
 Static methods (also called “class” methods) do not refer 
to a particular object. 
public static double sqrt(double number)   
double sqrtTwo = Math.sqrt(2);      //usage
 Question: normal “instance method” call or static call? 
System.out.println("Now Sort Array"); 
Arrays.sort(ray); 
Constants 
 It is bad programming style to use hard coded numbers 
in your code.
if (numberOfStudents > 100) { ….}; 
 It is better to use variables, for example:
double maxCourseSize = 100; 
if (numberOfStudents > maxCourseSize) { …} 
 Constants can be declared as static final fields in a class. 
This protects against unwanted changes. 
public static final maxCourseSize = 100; 
 From outside the class, access needs a prefix:
double circumference = Math.PI * 2 * radius;
Null
 A variable of a reference type may be set to null. 
This means that it does not refer to any object. 
if (errorInInput) Student nextStudent = null;
 You can check if the current value of a variable is null.
 This is useful as some methods return null if they are 
not able to return a valid object. 
For example, showInputDialog returns null if the user 
hits the “Cancel” button. 
String input = JOptionPane.showInputDialog(
“Please enter account number”); 
if (input == null) … 
Packages 
Libraries and code organisation. 
5Java Library Packages
 Java library classes are organised in packages.  
http://java.sun.com/javase/6/docs/api/
 Examples: 
java.lang, java.util, java.net,  java.util.regex
javax.swing
…
 java.lang entities are automatically known to the compiler. 
 The full name of class String is java.lang.String
 The large number of libraries in J2SE is one of the main 
reasons behind the popularity of Java. 
 Exercises will make use of classes in java.util : 
 Random
 and possibly ArrayList and TreeSet
Import Statements
 The import statement makes classes accessible without 
having to use the full long name, for example: 
import java.util.Random
class TestRandom { 
public static void main (String[]args) {
Random rGen = new Random(seed); …} }
 Import statements must be placed before any class 
declarations in the .java file,. 
 A file can have several import statements.
 You can also import all classes from a package in one go: 
import java.util.*
More on Import
 Care has to be taken that this does not lead to a collision: 
different packages might contain classes with the same 
name. 
 Example [Eckel]: 
import com.bruceeckel.simple.*;
import java.util.*;
The compiler will complain in this case if you try to  
create a new object of class Vector as it does not know 
which Vector class is meant.  
 Without the import, there is no clash: 
java.util.Vector x = new java.util.Vector(); 
Packages and Directory Structure
 All the .class files belonging to one package need to be in 
the same directory. 
 The directory structure needs to correspond to the 
package structure
 For a package called “freshersWeek”, the files should 
be in directory “freshersWeek”  
 For a package “ce832.exercises”, there should be a 
directory “ce832” with a subdirectory “exercises”. 
 etc. 
Packages: Compiling and Running
 In order to compile from the command prompt, change 
to the root directory of the package.
cd /ufs/csstaffc/users/norbert/src/
javac ce832/utilities/*.java
 Running method ce832.utilities.MyRandom.main():  
java ce832.utilities.MyRandom 
 For usage of the CLASSPATH environment variable, see 
the online Java tutorial, section packages.
 Check out Java IDEs (NetBeans, Eclipse, IntelliJ,  …) 
 many advantages 
 do not move source files on the disk while the IDE is 
running (use IDE refactor/renaming instead) 
Organising your Own Classes
 It is easiest to put all your java source files into one 
directory and compile them with: javac *.java
 BUT: putting all files into one directory is bad practice 
for larger projects.  
 Use packages in order to group classes together.
package ce832.utilities; 
public class MyRandom {
// … 
 The package declaration needs to be right at the start of 
the .java file. 
6Java Collections are Generic
 Java API Documentation
 Class ArrayList
 Class TreeSet
 These are generic classes
 Type variable E stands for the collection elements 
 Can be substituted with other types in applications
 For example, you could have 
 ArrayList
 ArrayList>
 TreeSet>>
 ...
Literature
 Online Java Tutorial http://java.sun.com/docs/books/tutorial/
 Cay Horstmann, Big Java, Wiley. 
 H.M. Deitel and P.J. Deitel: Java – How to program,
 Bruce Eckel: Thinking in Java (Online available)
 And many others! 
 Java 5 saw significant changes to the language, in 
particular the introduction of generics. 
 Differences between Java 6 and Java 5 are mainly on 
the level of libraries and implementation improvements.
 The Java API documentation is your friend
http://java.sun.com/javase/6/docs/api/