资源描述
1 对象和类 (续 ) 对象的创建 对象的使用 对象的释放 对象的访问 2 对象的创建 对象成员 (变量和方法 ) 静态 (static)成员 : 属于类 实例成员 : 属于对象 创建对象 /实例化对象 new 例 1: Apple a = new Apple(); (创建对象 ) 例 2: Apple a; (对象的说明 ) a = new Apple(); (实例化对象 ) 1. 对象的实例化通过 构造方法 (constructor)来实现 2. 构造方法的 名字与类名相同 3. 构造方法 没有返回值 4. 构造方法可以有多个,构成方法的 重载 (overload) 3 例 : 对象的实例化和初始化 public static void main(String args) Square s1 = new Square(); Square s2 = new Square(20, 50); Square s3 = new Square(s1); System.out.println(s1.width() +“ ” +s1.height(); System.out.println(s2.width() +“ ” +s2.height(); System.out.println(s3.width() +“ ” +s3.height(); class Square int a, h; Square() a = 10; h = 20; Square(int x, int y) a = x; h = y; Square(Square s) a = s.width(); h = s.height(); int width() return a; int height() return h; 计算结果 : 10 20 20 50 10 20 对象的创建 4 默认构造方法 例 class Apple int color; Apple a = new Apple(); 对象实例的判断 : null 例 Apple a; if (a = null) System.out.println(“Day dream”); 对象的创建 运行时系统自动赋予 一个空构造函数 如 public Apple() ; 5 再谈构造方法 对象的创建 class MyTest MyTest (boolean b) public static void main (String args) /MyTest m1 = new MyTest(); MyTest m2 = new MyTest(false); class MyTest MyTest (boolean b) MyTest () public static void main (String args) MyTest m1 = new MyTest(); MyTest m2 = new MyTest(false); 运行时系统自动赋予一个空构造方法, 仅仅当该类没定义构造方法的情况下 6 对象和类 (续 ) 对象的创建 对象的使用 对象的释放 对象的访问 7 对象的使用 通过对象引用对象的成员变量和成员方法 class Square int a, h; Square () a = 10; h = 20; Square(int x, int y) a = x; h = y; Square(Square r) a = r.width(); h = r.height(); int width() return a; int height() return h; void set(int x, int y) a=x; h =y; q1.set(30, 40); q1.a = 30; q1.h = 40; 目的相同 第一方式更安全、 更面向对象 (数据封装 ) 避免直接操纵变量 8 对象的使用 引用对象的变量 格式 : 对象名 .变量名 引用对象的方法 格式 : 对象名 .方法名 例 1 Vector v = new Vector(); v.addElement(“s1”); 例 2 int a= 1, 2, 3, 4, 5; int size = a.length; 例 3 System.out.println(); 9 对象和类 (续 ) 对象的创建 对象的使用 对象的释放 对象的访问 10 对象的释放 将对象从内存中清除 内存的管理 (枯燥、容易出错 ) 垃圾回收 (Garbage Collection) The Java platform allows you to create as many objects as you want (limited, of course, by what your system can handle), and you dont have to worry about destroying them. The Java runtime environment deletes objects when it determines that they are no longer being used. This process is called garbage collection. 11 对象的释放 垃圾搜集器 (Garbage Collector) 周期性地释放不再被引用的对象,自动完成 手动完成, System.gc(); (java.lang.System中 ) public static void gc() - Runs the garbage collector. 12 对象和类 (续 ) 对象的创建 对象的使用 对象的释放 对象的访问 13 对象的访问 访问对象的私有 (private)成员 通过定义一个公共方法来实现 class Student private String name; private String id; Student(String s1, String s2) name = s1; id = s2; String getName() return name; void setName(String s) name = s; Student st = new Student(“李忠” , “001”); String s = st.getName(); st.setName(“李晓” ); s = st.getName(); 14 对象的访问 对象作为方法的参数 访问权限修饰符 方法返回类型 方法名 (参数 ) throws 异常名 方法体 ; 参数 : 类型 变量名 , 类型 : 基本数据类型 /复合类型 (对象 ) 参数的传递 Pass by value 15 例 对象用作方法的参数 对象的访问 class Test public static void main(String args) Spot s = new Spot(2, 3); System.out.println(“s点的坐标 :” + s.getX()+“,”+s.getY(); Trans ts = new Trans(); ts.move(s, 4, 5); System.out.println(“s点的坐标 :” +s.getX()+“,”+s.getY(); class Spot private int x, y; Spot (int u, int v) setX(u); setY(v); void setX(int x1) x=x1; void setY(int y1) y=y1; int getX() return x; int getY() return y; class Trans void move(Spot p, int h, int k) p.setX(p.getX() + h); p.setY(p.getY() + k); D:java Test s点的坐标 :2,3 s点的坐标 :6,8 16 例 对象用作方法的参数 对象的访问 class Test public static void main(String args) Spot s = new Spot(2, 3); System.out.println(“s点的坐标 :” + s.getX()+“,”+s.getY(); Spot.move(s, 4, 5); System.out.println(“s点的坐标 :” + s.getX()+“,”+s.getY(); class Spot private int x, y; Spot (int u, int v) setX(u); setY(v); void setX(int x1) x=x1; void setY(int y1) y=y1; int getX() return x; int getY() return y; static void move(Spot p, int h, int k) p.setX(p.getX() + h); p.setY(p.getY() + k); D:java Test s点的坐标 :2,3 s点的坐标 :6,8 17 例 对象用作方法的参数 对象的访问 class Test public static void main(String args) Spot s = new Spot(2, 3); System.out.println(“s点的坐标 :” + s.getX()+“,”+s.getY(); s.move(4, 5); System.out.println(“s点的坐标 :” + s.getX()+“,”+s.getY(); class Spot private int x, y; Spot (int u, int v) setX(u); setY(v); void setX(int x1) x=x1; void setY(int y1) y=y1; int getX() return x; int getY() return y; void move(int h, int k) x = x + h; y = y + k; D:java Test s点的坐标 :2,3 s点的坐标 :6,8 18 对象的访问 对象的访问 对象作为方法的返回值 访问权限修饰符 方法返回类型 方法名 (参数 ) throws 异常名 方法体 ; 返回类型 有返回值 : 基本数据类型 /复合类型 (对象 ) 无返回值 : void 19 对象的访问 对象作为方法的返回值 例 : 求两点坐标之间的中点坐标 思路 : (x1, y1) 和 (x2, y2)(x, y) x=(x1+x2)/2, y=(y1+y2)/2 Spot s1 = new Spot(2, 3); Spot s2 = new Spot(4, 5); Spot s = s1.midSpot(s2); 20 例 对象用作方法的返回值 对象的访问 class Test public static void main(String args) Spot s1 = new Spot(3.0, 5.0); Spot s2 = new Spot(6.0, 8.0); System.out.println(“s1点的坐标 :” + s1.getX()+“,”+s1.getY(); System.out.println(“s2点的坐标 :” + s2.getX()+“,”+s2.getY(); Spot s = s1.midSpot(s2); System.out.println(“中点的坐标 :” + s.getX()+“,”+s.getY(); class Spot private double x, y; Spot (double u, double v) setX(u); setY(v); void setX(double x1) x=x1; void setY(double y1) y=y1; double getX() return x; double getY() return y; Spot midSpot(Spot s) double midX=(x+s.getX()/2; double midY=(y+s.getY()/2; return new Spot(midX, midY); D:java Test s1点的坐标 : 3.0,5.0 s2点的坐标 : 6.0,8.0 中点的坐标 : 4.5,6.5 21 对象的访问 数组 : 类型相同的一列元素 作为一个对象看待 public class ArrayDemo public static void main(String args) int anArray = new int10; for (int i = 0; i anArray.length; i+) anArrayi = i; System.out.print(anArrayi + ); System.out.println(); 22 对象的访问 对象数组 class Student private String name; private String id; Student (String s1, String s2) name = s1; id = s2; String getName() return name; void setName (String s) name = s; void display () System.out.println(name + “ ”+id); Student st = new Student10; for (int i = 0; i st.length; i+) sti = new Student(); for (int i = 0; i st.length; i+) sti.display(); 23 对象的访问 对象作为另一个对象的成员变量 一个对象中包含另一个对象,组合关系 class MobilePhone private String type; private Watch w; MobilePhone (String s) type = s; void setWatch(Watch a) w = a; long getTime () return w.getTime(); class Watch long getTime() return System.currentTimeMillis(); MobilePhone mp = new MobilePhone(“nokia”); Watch w = new Watch(); mp.setWatch(w); long l = mp.getTime(); public static long currentTimeMillis() the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC 24 对象的访问 关键词 this this指当前对象 应用 1: 加强程序可读性 (this可有可无 ) class Demo1 double x, y; Demo1(double i, double j) this.x=i; this.y=j; double ave() return (x+y)/2; public static void main(String args) Demo1 d = new Demo1(3, 4); System.out.println(d.ave(); class Demo2 int x, y, z; Demo2(int a, int b) x =a; y=b; this.swap(a, b); void swap(int a, int b) int t; if (x y) t=x; x=y; y=t; 25 对象的访问 关键词 this this指当前对象 应用 2: 对 同一个对象 执行多次方法调用 class Leaf int i = 0; Leaf increment() i+; return this; void print() System.out.println(“i=” + i); public static void main(String args) Leaf x = new Leaf(); x.increment().increment().increment().print(); D:java Leaf i=3 26 对象的访问 关键词 this this指当前对象 应用 3: 在一个构造函数中调用另一个构造函数 class Flower String name; int price; Flower () this(tulip, 10); Flower (String s, int i) name = s; price = i; void print () System.out.println(name + + price); public static void main(String args) Flower f = new Flower(); f.print(); D:java Flower tulip 10
展开阅读全文