《Java语言程序设计:第三章 对象和类》由会员分享,可在线阅读,更多相关《Java语言程序设计:第三章 对象和类(85页珍藏版)》请在金锄头文库上搜索。
1、第三章第三章 对象和类对象和类Whats Class,and whats Object?Whats Class,and whats Object?天津职业技术师范大学天津职业技术师范大学Whats Class,and whats Object?Whats Class,and whats Object?天津职业技术师范大学天津职业技术师范大学Whats Class,and whats Object?Whats Class,and whats Object?天津职业技术师范大学天津职业技术师范大学天津职业技术师范大学天津职业技术师范大学3.2 3.2 定义类定义类v面向对象设计的思想面向对象设计的
2、思想什么是对象什么是对象一切都是对象一切都是对象什么是类什么是类对象具有的共同特征是类对象具有的共同特征是类v对象与类的关系对象与类的关系类是对象的模版,对象是类的实例类是对象的模版,对象是类的实例类是抽象的,对象是具体的类是抽象的,对象是具体的图纸图纸大楼,饼干模具大楼,饼干模具饼干饼干天津职业技术师范大学天津职业技术师范大学3.2 3.2 封装封装类类v封装封装类就是定就是定义要使用的要使用的对象的象的类型。型。定定义类的的语法法: 访问控制控制符决定符决定这个个类在多大范在多大范围可以被其他可以被其他类访问,可以使用,可以使用public或或default(缺省缺省)。类的命名要符合的命
3、名要符合标识符符规则。 访问控制符访问控制符 class 属性属性 方法方法 关键字关键字天津职业技术师范大学天津职业技术师范大学3.2 3.2 封装封装类类public class People public String name; protected int age; public void work() public void sleep() 定义定义方法方法(method)定义定义属性(属性(field)天津职业技术师范大学天津职业技术师范大学3.23.2.1.1 定义属性定义属性定定义属性属性的的语法法: 访问控制控制符决定符决定这个个属性被属性被访问的范的范围,可以使用,可以使用
4、public、private、protected、default(缺省)(缺省)。数据数据类型可以是基本型可以是基本类型,也可以是型,也可以是类类型。型。属性名属性名必必须是一个是一个标识符符。定定义属性的同属性的同时可以可以显示地示地为其其赋值。(初始化)。(初始化)访问控制符访问控制符 数据类型数据类型 属性名属性名 =值值 天津职业技术师范大学天津职业技术师范大学方法的定义方法的定义方法的名称参数列表方法的主体方法返回的类型3.23.2.2.2 定义方法定义方法天津职业技术师范大学天津职业技术师范大学v语法语法 访问控制符访问控制符 (参数列表参数列表) ) 是方法返回值的数据类型是方法
5、返回值的数据类型。 是用户自定义的是用户自定义的标识符。标识符。参数列表参数列表是一组变量声明是一组变量声明, , ,。3.23.2.2.2 定义方法定义方法天津职业技术师范大学天津职业技术师范大学class Test public method1() System.out.println(m1);public double method2(double x) System.out.println(x);public double method3(int i, j) return i*1.0;3.23.2.2.2 定义方法定义方法Test类中定义的方法有无错误?类中定义的方法有无错误?天津职业
6、技术师范大学天津职业技术师范大学以下类有几个以下类有几个成员成员?class Test private int i, j;public void method1() System.out.println(m1);public void method2(int i) System.out.println(m2+i);3.23.2.2.2 定义方法定义方法天津职业技术师范大学天津职业技术师范大学v一个一个Rectangle类3.2 3.2 定义类定义类class Rectangle public int x;public int y; public int getArea() return x*y
7、; 天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用v根据根据类来来创建建对象象类名名 对象象名名 =new 类名名(参数列表参数列表);Rectangle r1=new Rectangle();v要要通通过公共公共(public)成成员来操作来操作对象或取得象或取得对象信象信息,可以在息,可以在对象象名名后加上后加上“ . ”运算符来运算符来进行行. r1.x=2;r1.y=3;int area=r1.getArea();天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用vJava虚虚拟机将机将 局部局部变量量存存
8、储在在 栈栈 存存储区区public static void main(String a)int x=10;boolean y=true;天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用vmain中声明中声明2个矩形个矩形类对象名称象名称r1、r2Rectangle r1, r2 ; r1、r2还没有指向任何没有指向任何对象象实例,例,使用前必使用前必须初始化。初始化。未初始化未初始化未初始化未初始化对象名称,对象名称,也称为也称为引用引用,存,存储储对象实例对象实例的的地址地址天津职业技术师范大学天津职业技术师范大学未初始化未初始化3.3 3.3 对象
9、对象的创建与使用的创建与使用v创建一个建一个对象象实例并例并赋值给r1:r1=new 用来创建用来创建对象实例对象实例, 对象实例对象实例存储在存储在 堆堆 存储区。存储区。00r1.xr1.y未初始化未初始化new Rectangle();天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用v创建一个建一个对象象实例并例并赋值给r1:r1= new Rectangle();r1.x=3; r1.y=4;00r1.xr1.yr234天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用v创建一个建一个对象象实例并例并赋值给r
10、1:r2= new Rectangle();34r1.xr1.yr2天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用v创建一个建一个对象象实例并例并赋值给r1:r2= new Rectangle();34r1.xr1.yr200r2.xr2.yox234e1c5f天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用v创建一个建一个对象象实例并例并赋值给r1:r2=r1; 34r1.xr1.yr200ox234e1c5f天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用v创建一个建一
11、个对象象实例并例并赋值给r1:r2=r1; 34r1.xr1.y天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用class Rectangle public int x,y;public int getArea()return x*y;public static void main(String args) x=2;y=3;int area=getArea();System.out.println(Area of r1 is:+area);属性和方法属于具体属性和方法属于具体对象对象,要通过,要通过对象对象访访问!问!天津职业技术师范大学天津职业技术师范
12、大学3.3 3.3 对象对象的创建与使用的创建与使用class Rectangle public int x,y;public int getArea()return x*y;public static void main(String args) Rectangle r1;r1.x=2;r1.y=3; int area=r1.getArea(); System.out.println(Area of r1 is:+ area);没有实例化没有实例化的对象的对象不能使用!不能使用!天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用class Rectang
13、le public int x,y;public int getArea()return x*y;public static void main(String args) Rectangle r1=new Rectangle();r1.x=2;r1.y=3; int area=r1.getArea(); System.out.println(Area of r1 is:+ area);1.每个类都可以有每个类都可以有main方法方法2.main方法是程序的入口方法是程序的入口3.public修饰的类是修饰的类是Java应用程序的主类应用程序的主类4.一个一个Java源文件可以包含多个类,但源文
14、件可以包含多个类,但只有一个主类只有一个主类5.Java源文件的命名必须与主类同名源文件的命名必须与主类同名天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用class Rectangle public int x,y;public int getArea()return x*y;public class TestClasspublic static void main(String args) Rectangle r1=new Rectangle();r1.x=2; r1.y=3;int area=r1.getArea();System.out.prin
15、tln(Area of r1 is:+area);可以在同一个文件中,将测可以在同一个文件中,将测试代码单独编为一个类。试代码单独编为一个类。注意文件名应为主类名。注意文件名应为主类名。天津职业技术师范大学天津职业技术师范大学3.3 3.3 对象对象的创建与使用的创建与使用public class Rectangle public int x,y;public int getArea()return x*y;public class TestClasspublic static void main(String args) Rectangle r1=new Rectangle();r1.x=2
16、;r1.y=3;int area=r1.getArea();System.out.println(Area of r1 is:+area);也可以分两个文件分别编写。也可以分两个文件分别编写。天津职业技术师范大学天津职业技术师范大学3.43.4.1 .1 参数传递参数传递public class PassValueTest private int inner=100;public void test1(int b) b*=2;public void test2(PassValueTest b) b.inner*=2;public void test3(PassValueTest b) b=nu
17、ll;public static void main(String args) PassValueTest obj = new PassValueTest (); int local=100; obj.test1(local);System.out.println(local); obj.test2(obj);System.out.println(obj.inner); obj.test3(obj);System.out.println(obj);100200PassValueTest 4f1d0d天津职业技术师范大学天津职业技术师范大学3.43.4.2 .2 方法重载方法重载public c
18、lass Elementary2 public static void main(String args) String s=;char c=65;int i=1;System.out.println(c);System.out.println(i);System.out.println(c+i);System.out.println(c+);System.out.println(s+c+i);System.out.println(i+c+s);A166AB167为什么一个为什么一个println函数可函数可以接收多种类型参数?以接收多种类型参数?因为实际上有多个名为因为实际上有多个名为pri
19、ntln的函数。的函数。天津职业技术师范大学天津职业技术师范大学3.43.4.2 .2 方法重载方法重载public void println(boolean x)public void println(char x)public void println(int x)public void println(long x)public void println(float x)public void println(double x)public void println(char x)public void println(String x)public void println(Objec
20、t x)没有重载会怎么样?没有重载会怎么样?天津职业技术师范大学天津职业技术师范大学3.43.4.2 .2 方法重载方法重载v方法重方法重载(Overload)是指一个)是指一个类中可以定中可以定义多多个相同名字的方法。个相同名字的方法。重重载的方法名字必的方法名字必须相同。相同。重重载的方法参数必的方法参数必须不同不同(个数、(个数、顺序)序) 。当一个重当一个重载方法被方法被调用用时,Java会根据不同的会根据不同的参数列表来参数列表来选择对应的方法。的方法。天津职业技术师范大学天津职业技术师范大学3.43.4.2 .2 方法重载方法重载public class TestOverload
21、void f() System.out.println(no paramenters);void f(char c)System.out.println(char);void f(int i)System.out.println(int);void f(double d)System.out.println(double);天津职业技术师范大学天津职业技术师范大学3.4 方法重载void f(int a,float b) System.out.println(int , float);void f(float b, int a) System.out.println(float , int);
22、public static void main(String args) TestOverload obj = new TestOverload();obj.f();obj.f(A);obj.f(100);obj.f(1.5f);obj.f(1 , 1.5f);obj.f(1.5f , 1);no paramenterscharintdoubleint , floatfloat , int注意由低到高的自动转型。注意由低到高的自动转型。天津职业技术师范大学天津职业技术师范大学3.43.4.2 .2 方法重载方法重载double f(int a,float b) / Duplicate meth
23、od return 1.5;boolean f(int a,float b)/ Duplicate method return true;void f(float f) /Unresolved compilation problemSystem.out.println(float);public static void main(String args) TestOverload obj = new TestOverload ();obj.f(1 , 1.5f); obj.f(1.5);返回类型不能作为重载函返回类型不能作为重载函数的依据!数的依据!重载不支持由高到低的自动重载不支持由高到低的
24、自动转型!转型!天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化指定初始化指定初始化public class TestInit boolean b=true;char c= A;int i=100;float f=.8f;double d=100;String s=hello;public static void main(String args) TestInit ts=new TestInit ();System.out.println(b=+ts.b+nc=+ts.c);System.out.println(i=+ts.i +nf=+ts.f);System.
25、out.println(d=+ts.d+ns=+ts.s);对象初始化是指初始化对象对象初始化是指初始化对象的属性。的属性。左侧为显式初始化,即为属左侧为显式初始化,即为属性性指定指定具体的值。具体的值。天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化自动初始化自动初始化public class TestInit boolean b;char c;int i;float f;double d;String s;public static void main(String args) TestInit ts=new TestInit ();System.out.pri
26、ntln(b=+ts.b+nc=+ts.c);System.out.println(i=+ts.i +nf=+ts.f);System.out.println(d=+ts.d+ns=+ts.s);b=falsec=i=0f=0.0d=0.0s=null没有指定具体值的没有指定具体值的基本类基本类型型的属性会被的属性会被自动自动初始化初始化为为默认值默认值。没有指定具体值的没有指定具体值的对象类对象类型型属性会被初始化为属性会被初始化为null。天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化构造方法初始化构造方法初始化v用一个用一个创建建对象象时自动调用的方法自动调
27、用的方法初始化属性初始化属性方法名必方法名必须与类名相同与类名相同没有返回类型没有返回类型(不是(不是void类型)型)只能被虚只能被虚拟机机自动调用自动调用如果没有定如果没有定义构造方法,构造方法,编译器会器会自动添加自动添加一一个无参的构造方法个无参的构造方法 构造方法构造方法可以重载可以重载。天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化构造方法初始化构造方法初始化class Rectangle int x, y; int getArea() return x*y; Rectangle()x=1; y=1; public static void main(S
28、tring args) Rectangle r1=new Rectangle();System.out.println(Area of r1 is:+ r1.getArea();分析程序运行结果分析程序运行结果Area of r1 is:1没有参数的构造函数没有参数的构造函数称为称为默默认构造函数认构造函数,一般用来为属,一般用来为属性初始化默认值性初始化默认值天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化构造方法初始化构造方法初始化class Rectangle int x, y; int getArea() return x*y; Rectangle()pub
29、lic static void main(String args) Rectangle r1=new Rectangle();System.out.println(Area of r1 is:+ r1.getArea();Area of r1 is:0如果类没有定义构造函数,如果类没有定义构造函数,编译器会提供空的默认构造编译器会提供空的默认构造函数。函数。天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化构造方法初始化构造方法初始化class Rectangle int x, y; int getArea() return x*y; Rectangle(int a,
30、 int b)x=a; y=b;public static void main(String args) Rectangle r1=new Rectangle(12,10);System.out.println(Area of r1 is:+ r1.getArea();Area of r1 is:120有参数的构造函数一般用来有参数的构造函数一般用来为属性初始化为属性初始化来自外部的值来自外部的值天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化构造方法初始化构造方法初始化class Rectangle int x, y; int getArea() return x
31、*y; Rectangle(int a, int b)x=a; y=b;public static void main(String args) Rectangle r1=new Rectangle();System.out.println(Area of r1 is:+ r1.getArea();找不到符号找不到符号符号:符号: 构造函数构造函数 Rectangle ()只有在类没有定义构造函数只有在类没有定义构造函数的情况下,编译器才会为类的情况下,编译器才会为类提供提供默认构造函数默认构造函数。天津职业技术师范大学天津职业技术师范大学3.3.5 5 属性初始化属性初始化构造方法初始化构造
32、方法初始化分析分析结果果class Rectangle int x, y; int getArea()Rectangle()x=1; y=1;Rectangle(int a, int b)x=a; y=b;public static void main(String args) Rectangle r1=new Rectangle();System.out.println(Area of r1 is:+ r1.getArea();r1=new Rectangle(2, 3);System.out.println(Area of r1 is:+ r1.getArea();通常提供多个构造函数,方
33、通常提供多个构造函数,方便用户使用。便用户使用。天津职业技术师范大学天津职业技术师范大学3.3.6 6 属性、参数和局部变量的关系属性、参数和局部变量的关系public class TestScoping int x=1;int y=2;int z=3;void getxyz(int z)int x=3;System.out.println(x=+x+ y=+y);System.out.println(z=+z);public static void main(String args) TestScoping ts=new TestScoping();ts.getxyz(100);x=3 y=
34、2z=100局部变量优先属性。局部变量优先属性。形参,形参, 局部变量局部变量局部变量局部变量属性属性天津职业技术师范大学天津职业技术师范大学3.3.6 6 属性、参数和局部变量的关系属性、参数和局部变量的关系public class TestScoping int x;int y;int z;void getxyz(int z)int x=3;System.out.println(x=+x+ y=+y);System.out.println(z=+z);public static void main(String args) TestScoping ts=new TestScoping();
35、ts.getxyz(100);x=3 y=0z=100属性未显示的初始化为默认值属性未显示的初始化为默认值天津职业技术师范大学天津职业技术师范大学3.3.6 6 属性、参数和局部变量的关系属性、参数和局部变量的关系public class TestScoping int x=1;int y=2;int z=3;void getxyz(int z)int x;System.out.println(x=+x+ y=+y);System.out.println(z=+z);public static void main(String args) TestScoping ts=new TestScop
36、ing();ts.getxyz(100);TestScoping.java:7: 可能尚未初始化变量 x局部变量未初始化不能使用局部变量未初始化不能使用天津职业技术师范大学天津职业技术师范大学3.7 this3.7 this关键字关键字class Rectangle int x, y; int getArea(Rectangle this) return this.x*this.y; Rectangle(int a,int b) x=a;y=b;public static void main(String args) Rectangle r1=new Rectangle(1, 1);r1.ge
37、tArea();Rectangle r2=new Rectangle(2, 2);r2.getArea();Rectangle.getArea(r1);Rectangle.getArea(r2);对象在调用方法时,会隐式地对象在调用方法时,会隐式地将自将自己作为一个参数传递给方法己作为一个参数传递给方法,方法,方法以此为依据区分不同对象。以此为依据区分不同对象。形参的名称是形参的名称是thisthis类型是类型是当前类当前类值是调用方法的值是调用方法的对象对象天津职业技术师范大学天津职业技术师范大学3.7 this3.7 this关键字关键字class Rectangle int x, y;
38、int getArea() return x*y; Rectangle(int a,int b) x=a;y=b; public static void main(String args) Rectangle r1=new Rectangle(1, 1);r1.getArea();Rectangle r2=new Rectangle(2, 2);r2.getArea();每个非静态方法都隐含一个每个非静态方法都隐含一个thisthis参数,它的值就是当前参数,它的值就是当前调用方法的调用方法的对象对象。天津职业技术师范大学天津职业技术师范大学3.7 this3.7 this关键字关键字clas
39、s Rectangle int x, y; int getArea(Rectangle this) return this.x*this.y; Rectangle(int a,int b,Rectangle this) this.x = x; this.y = y;public static void main(String args) Rectangle r1=new Rectangle(1, 1);r1.getArea();Rectangle r2=new Rectangle(2, 2);r2.getArea();每个非静态方法都隐含一个每个非静态方法都隐含一个thisthis参数,它的值
40、就是当前参数,它的值就是当前调用方法的调用方法的对象对象。天津职业技术师范大学天津职业技术师范大学3.7 this3.7 this关键字关键字vthis在构造函数中的用法在构造函数中的用法在一个构造方法中在一个构造方法中调用另一个构造方法用另一个构造方法必必须出出现在第一句在第一句Rectangle()this(0,0);Rectangle(int x,int y)this.x = x;this.y = y;天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符vstatic修修饰的的成员成员是静是静态成成员。静静态成成员属于属于这个个类的所有的所有对象。
41、象。静静态成成员不需要不需要创建建对象就能通象就能通过类名名调用。用。注意注意: 静态静态不能修饰局部变量不能修饰局部变量!天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符public class Testint u; static int v;public static void main(String args)Test t1=new Test();Test t2=new Test();t1.v = 10; t1.u = 10;System.out.println(t1.v+,+t2.v+,+t1.u+,+t2.u);t2.v = -1; t2.
42、u = -1;System.out.println(t1.v+,+t2.v+,+t1.u+,+t2.u);Test.v=20;System.out.println(t1.v+,+t2.v+,+t1.u+,+t2.u);10,10,10,010,10,10,0-1,-1,10,-1-1,-1,10,-12 20,0,2 20,10,-10,10,-1一个类为它的所有对象只存储一份属性值,即一个类为它的所有对象只存储一份属性值,即这个类的所有对象共享一个属性。这个类的所有对象共享一个属性。天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符v静静态方法方法属
43、于属于这个个类所有所有对象,没有象,没有this参数参数class Rectangle int x, y;static void print() System.out.println(this is a Rectangle);public class Test() public void callAStaticMethod() Rectangle.print();不需要创建对象,通过不需要创建对象,通过类名类名调用调用天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符class Rectangle int x, y; int getArea()retu
44、rn x*y; void test()System.out.println(getArea(); static void test2() System.out.println(getArea();静态方法中不能访问非静态成员。静态方法中不能访问非静态成员。为什么?为什么?反之可以反之可以天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符class Singleton private static Singleton sin;private Singleton()public static Singleton getInstance()if(sin=nu
45、ll)sin=new Singleton();return sin;public class Test public static void main(String args) Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); System.out.println(s1=s2); 静态方法的一个应用静态方法的一个应用单态单态天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符v静静态初始化初始化块只在只在类加加载时初始化一次初始化一次static int
46、 i;static String s;statici = 100;s = ;天津职业技术师范大学天津职业技术师范大学class Asstatic void f()System.out.println(f);staticSystem.out.println(static block);public As()System.out.println(As);public class Test public static void main(String args) As.f();3.8 static3.8 static修饰符修饰符static blockf访问静态成员不需要实访问静态成员不需要实例化对
47、象。例化对象。通过类名访问静态成员通过类名访问静态成员会会自动自动加载类。加载类。天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符class Asstatic void f()System.out.println(f);staticSystem.out.println(static block);public As()System.out.println(As);public class Testpublic static void main(String args) As.f();As.f();As.f();static blockfff静态初始化
48、块只在类静态初始化块只在类加载时初始化加载时初始化一次一次天津职业技术师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符class Asstatic void f()System.out.println(f);staticSystem.out.println(static block);public As()System.out.println(As);public class Testpublic static void main(String args) new As();static blockAS实例化实例化对象会对象会自动自动加加载类。载类。天津职业技术
49、师范大学天津职业技术师范大学3.8 static3.8 static修饰符修饰符class Asstatic void f()System.out.println(f);staticSystem.out.println(static block);public As()System.out.println(As);public class Testpublic static void main(String args) new As();new As();new As();static blockAsAsAs静态初始化块只在类静态初始化块只在类加载时初始化一次加载时初始化一次天津职业技术师范大
50、学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanv本本质是一个是一个Java类v封装了属性和方法封装了属性和方法v作作为一个可重用一个可重用软件件组件(独立性)件(独立性)天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanvJavaBean的的规则提供一个公有的默提供一个公有的默认(无参)构造方法。(无参)构造方法。把所有属性定把所有属性定义成私有的。成私有的。为每个属性提供每个属性提供public的的getter和和setter方法。方法。天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanpub
51、lic class JavaBeanTest private String name;private int age; public JavaBeanTest() public String getName() return name;public void setName(String name) this.name = name;public int getAge() return age;public void setAge(int age) this.age = age;天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanvgetter和和sette
52、r方法方法getter和和setter方法的作用是什么,参数和返回方法的作用是什么,参数和返回值类型?型?getter和和setter应该是是public,还是是private?既然既然还是可以通是可以通过getter和和setter访问设置置属性属性,为何不直接把何不直接把属性属性设为public,二者有何区,二者有何区别?public变量需不需要量需不需要getter和和setter方法?方法?天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanpublic class Circleprivate double radius;public void se
53、tRadius(double r)radius=r;-public class Testpublic static void main(String args)Circle c=new Circle();c.setRadius(10);System.out.println(c.getArea();天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanpublic class Circlepublic double radius;-public class Testpublic static void main(String args)Circle c=new
54、Circle();c. radius =10;System.out.println(c.getArea();注意:用户已经编写的程序还是厘米。注意:用户已经编写的程序还是厘米。不能因为你的更改让用户重写程序!不能因为你的更改让用户重写程序!由于一些原因,由于一些原因, Circle类的类的radius需要由厘米需要由厘米改为米。改为米。天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanpublic class Circlepublic double radius;public void setRadius(double r)radius=r;-public
55、 class Testpublic static void main(String args)Circle c=new Circle();c.setRadius(10);System.out.println(c.getArea();用户已经编写的程序还用户已经编写的程序还是厘米,不能更改!是厘米,不能更改!由于一些原因现在的由于一些原因现在的radius需要由厘米现在改为米。需要由厘米现在改为米。radius=r/100;getter和和setter增加了灵活性,增加了灵活性,可以改变内部而不影响外部。可以改变内部而不影响外部。天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3
56、.9 JavaBeanpublic class Circlepublic double radius;-public class Testpublic static void main(String args)Circle c=new Circle();c. radius =- -1;System.out.println(c.getArea();直接对属性赋值不进行检查。直接对属性赋值不进行检查。天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanpublic class Circlepublic double radius;public void setR
57、adius(double r)if(radius=0)radius=r;-public class Testpublic static void main(String args)Circle c=new Circle();c.setRadius(- -1);System.out.println(c.getArea();Setter可以执行错误检查。可以执行错误检查。天津职业技术师范大学天津职业技术师范大学3.9 JavaBean3.9 JavaBeanpublic class Circleprivate double radius;public double getRadius()retur
58、n radius;public class Circleprivate double radius;public void setRadius(double r)radius=r;getter和和setter将属性的赋值将属性的赋值与访问分离;只有与访问分离;只有getter的的属性是只读属性。属性是只读属性。天津职业技术师范大学天津职业技术师范大学3.10 3.10 包包vpackagev为什么需要包?什么需要包?1.包是包是类的的组织形式,当形式,当类越来越多越来越多时,为了便了便于使用,将它于使用,将它们按照功能按照功能类别放在不同的包中。放在不同的包中。2.避免避免类的重名的重名3.参
59、与了参与了Java的的访问控制机制。包中定控制机制。包中定义的的类,包外的代包外的代码无法无法访问。v常常见的包:的包:java.util、java.lang天津职业技术师范大学天津职业技术师范大学3.10.1 3.10.1 包的导入包的导入v没有没有导入包之前,必入包之前,必须使用完整使用完整类名。名。java.util.Scanner sc=new java.util.Scanner(System.in);java.util.Date today=new java.util.Date();v导入包中的具体入包中的具体类:import 包名包名. .类名;名;import java.util
60、.Scanner;import java.util.Date;v导入后入后Scanner sc=new Scanner(System.in);Date today=new Date();天津职业技术师范大学天津职业技术师范大学3.10.1 3.10.1 包的导入包的导入v导入包中的所有入包中的所有类:import 包名包名.*;import java.util.*;注意,不能注意,不能import java.*v导入后入后Scanner sc=new Scanner(System.in);Date today=new Date();v如果如果类中同中同时使用两个包中的同名使用两个包中的同名类,
61、如,如java.util.Date、java.sql.Date,则导入无法区分,只入无法区分,只能凭全称区分;能凭全称区分;java.util.Date d1=new java.util.Date();java.sql.Date d2=new java.sql.Date();天津职业技术师范大学天津职业技术师范大学3.10.23.10.2 创建并命名自己的包创建并命名自己的包v建立一个包,把你的建立一个包,把你的类和接口放到里面。和接口放到里面。这需要需要把把 package 语句放到源文件的句放到源文件的第一句第一句。 package com.myPackage; class Test pu
62、blic void print() System.out.println(test of using package!); public class TestPackage public static void main(String rgs) new Test().print(); 天津职业技术师范大学天津职业技术师范大学3.10.23.10.2 创建并命名自己的包创建并命名自己的包v包的命名包的命名规则建建议:Internet域名的反序(唯一性、小写)域名的反序(唯一性、小写)com.baidu.util.v与包与包对应的文件的文件结构构一旦类属于某个自定义包,其名称一旦类属于某个自定义包
63、,其名称就变为就变为包名包名. .类名类名。运行时要注意。运行时要注意用全名、包在当前目录下。用全名、包在当前目录下。以后实验均使用以后实验均使用com.yourname.chN为包名为包名。其中其中yourname为姓名,为姓名,N为实验序号。为实验序号。天津职业技术师范大学天津职业技术师范大学3.10.3 3.10.3 包的访问控制包的访问控制存取修饰存取修饰同一类同一类同一包同一包子类子类外部外部privateOK(default)OKOKprotectedOKOKOKpublicOKOKOKOK如果一个类、方法、变量没有任何访问修饰符,它只如果一个类、方法、变量没有任何访问修饰符,它只
64、能被同一个包中的方法访问。能被同一个包中的方法访问。天津职业技术师范大学天津职业技术师范大学3.11 3.11 对象数组对象数组 v如何定如何定义一个包含三个一个包含三个Circle元素的数元素的数组?Circle cs;System.out.println(cs); /?天津职业技术师范大学天津职业技术师范大学3.11 3.11 对象数组对象数组public class Circleprivate double radius=0;public void Circle()public void Circle(double r)radius=r;Circle array=new Circle3;
65、for(Circle c:array)System.out.println(c);nullnullnull创建数组对象创建数组对象创建数组元素对象创建数组元素对象天津职业技术师范大学天津职业技术师范大学3.11 3.11 对象数组对象数组 Circle array=new Circle new Circle(),new Circle(),new Circle()for(Circle value:array)System.out.println(value);Circle63b2e6Circle1762fc7Circle3aef16初始化对象数组初始化对象数组天津职业技术师范大学天津职业技术师范
66、大学3.11 3.11 对象数组对象数组 Circle array=new Circle3;for(int i=0;iarray.length;i+)arrayi=new Circle();for(Circle value:array)System.out.println(value);Circle63b2e6Circle1762fc7Circle3aef16实例化对象数组实例化对象数组天津职业技术师范大学天津职业技术师范大学总结总结v会定会定义类v会定会定义类的基本数据的基本数据类型成型成员v会定会定义类的的对象成象成员v理解理解public、private、default的的访问权限限v会
67、使用会使用set、get方法方法v会定会定义构造函数构造函数v会重会重载构造函数构造函数v会定会定义类的静的静态成成员天津职业技术师范大学天津职业技术师范大学练习练习v定定义一个一个Mouse类,包含,包含name、isAlive属性,属性,isAlive默默认为truev定定义一个一个Cat类,包含,包含name、record(记录捕捉捕捉Mouse数量的数量的记录),),拥有有catchMouse方法,此方法,此方法接受一个方法接受一个Mouse对象,表示捕捉到一个象,表示捕捉到一个Mouse,将此,将此mouse的的isAlive属性属性设为false,同,同时record加加1。天津职
68、业技术师范大学天津职业技术师范大学练习练习v编写写调用主用主类Test,在其在其main方法中新建方法中新建3个个Mouse对象,象,1个个Cat对象。先打印象。先打印3个个Mouse对象和象和cat对象的基本信息,使象的基本信息,使cat对象扑捉其中象扑捉其中1个个Mouse对象。象。再打印一遍再打印一遍3个个Mouse对象和象和cat对象的基本信息。象的基本信息。天津职业技术师范大学天津职业技术师范大学练习练习v用程序描述用程序描述“三只小猪盖房子三只小猪盖房子”的故的故事事v主角主角三只小猪三只小猪猪老大、猪老二、猪老三猪老大、猪老二、猪老三老狼老狼v故事故事老三盖草房子,老二盖木房子,老老三盖草房子,老二盖木房子,老大盖大盖砖房子房子狼吹倒草房子,吃猪老三狼吹倒草房子,吃猪老三 ;狼吹倒;狼吹倒木房子,吃猪老二木房子,吃猪老二狼吹不倒狼吹不倒砖房子房子天津职业技术师范大学天津职业技术师范大学程序员之路程序员之路2013.4