




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第4 4章章 类与对象类与对象 本章导读 1 1、面向对象编程面向对象编程 2 2、类声明和类体类声明和类体 3 3、类体的构成类体的构成 4 4、构造方法与对象的创建构造方法与对象的创建 5 5、对象的引用与实体对象的引用与实体 6 6、成员变量成员变量 7 7、方法方法 8 8、方法重载方法重载 本章导读 9 9、thisthis关键字关键字 1010、包包 1111、import import 语句语句 1212、访问权限访问权限 1313、对象的组合对象的组合 1414、基本类型数据的类包装基本类型数据的类包装 1515、反编译和文档生成器反编译和文档生成器 1616、JARJAR文件文件 4.1 4.1 面向对象编程面向对象编程 n n 封装封装 qq将数据以及对数据的操作封装在类中。将数据以及对数据的操作封装在类中。 n n 继承继承 qq子类可以继承父类的属性子类可以继承父类的属性( (数据数据) )和功能和功能( (操作操作) ) n n 多态多态 qq操作名称的多态操作名称的多态 /变量定义部分 float weight,height; /变量定义部分 void changSpeed(int newSpeed) /方法定义 speed=newSpeed; float getWeight() /方法定义 return weight; float getHeight() /方法定义 return height; n n 例:例:机动车类机动车类 n n 例:例:机动车类机动车类 qq成员变量有成员变量有2 2个个floatfloat类型的变量:类型的变量:“ “weight”weight”、“ “height”height”和一个和一个intint 型变量型变量“ “speed”speed”。 qq成员方法有成员方法有3 3个:个:“ “changSpeed”changSpeed”、“ “getWeight”getWeight”和和“ “getHeight”getHeight”。 对成员变量的说明:对成员变量的说明: n n (1 1)成员变量的类型)成员变量的类型可以是可以是JavaJava中的任何一种数据类型,包括前中的任何一种数据类型,包括前 面学习过的基本类型:整型、浮点型、字符型、数组以及后面要学习面学习过的基本类型:整型、浮点型、字符型、数组以及后面要学习 的对象及接口。的对象及接口。 n n (2 2)成员变量在整个类内都有效,与它在类体中书写的先后位置成员变量在整个类内都有效,与它在类体中书写的先后位置 无关。无关。 qq例如:例如:机动车类机动车类也可以写成也可以写成机动车机动车2 2 class 机动车2 void changSpeed(int newSpeed) /方法定义 speed=newSpeed; int speed; /变量定义部分 float getWeight() /方法定义 return weight; float weight; /变量定义部分 float getHeight() /方法定义 return height; float height; /变量定义部分 机动车机动车2 2 n n 对成员变量的说明:对成员变量的说明: (3 3)在定义类的成员变量时可以同时赋予初值,表明类在定义类的成员变量时可以同时赋予初值,表明类 所创建的对象的初始状态。所创建的对象的初始状态。 (4 4)对成员变量的操作只能放在方法中,方法可以对成对成员变量的操作只能放在方法中,方法可以对成 员变量进行操作形成算法员变量进行操作形成算法( (合法合法、非法非法) ) 类的成员类型中可以有数据和方法类的成员类型中可以有数据和方法( (即数据的定义和即数据的定义和 方法的定义方法的定义) )但不能有语句,语句必须放在方法中。但不能有语句,语句必须放在方法中。 返回返回 class A int a=9; float b=12 .6f; void f() a=12; b=12.56f; 合法合法 class A int a; float b; a=12; /非法,a=12是赋值语句,不是数据 的声明 b=12.56f; /非法 void f() 非法非法 4.4 4.4 构造方法与对象的创建构造方法与对象的创建 1 1、构造方法、构造方法 2 2、对象的创建、对象的创建 1) 1) 对象的声明对象的声明 2) 2) 为声明的对象分配成员变量为声明的对象分配成员变量 3) 3) 创建多个不同的对象创建多个不同的对象 3 3、 使用对象使用对象 4.4.1 4.4.1 构造方法构造方法 n n 在类创建对象时使用构造方法,以便给类所创建的对在类创建对象时使用构造方法,以便给类所创建的对 象一个合理的初始状态。象一个合理的初始状态。 n n 构造方法的名字必须与它所在的类的名字完全相同,构造方法的名字必须与它所在的类的名字完全相同, 并且不返回任何数据类型,即它是并且不返回任何数据类型,即它是voidvoid型,但型,但voidvoid必须省必须省 略不写。略不写。 n n Java Java允许一个类中有若干个构造方法,但这些允许一个类中有若干个构造方法,但这些构造方构造方 法的参数必须不同法的参数必须不同,即或者是参数的个数不同,或者是参,即或者是参数的个数不同,或者是参 数的类型不同数的类型不同( (构造函数重载构造函数重载) )。 qq例:例:RectRect类类 class Rect double sideA,sideB; Rect() /无参数构造方法。 Rect(double a,double b) /有参数构造方法。 sideA=a; sideB=b; RectRect类类 double computerArea() return sideA*sideB; double computerGirth() return (sizeA+sideB)*2; 4.4.2 4.4.2 对象的创建对象的创建 n n 当使用一个类创建了一个对象时,我们也说给出了这个类当使用一个类创建了一个对象时,我们也说给出了这个类 的一个实例。的一个实例。 n n 创建对象的步骤创建对象的步骤(2(2步步) ): 1 1、声明对象、声明对象 2 2、为对象分配成员变量、为对象分配成员变量 声明对象声明对象 n n 格式:类名格式:类名 对象名对象名; ; qqRect Rect rectangleOnerectangleOne; qq用类声明的数据称为类类型变量,即对象。用类声明的数据称为类类型变量,即对象。 n n 刚刚声明的对象其内存中没有存放任何数据,它没有刚刚声明的对象其内存中没有存放任何数据,它没有“ “ 引用引用” ”任何实体,是一个空对象。任何实体,是一个空对象。 n n 空对象是不能使用的。空对象是不能使用的。 rectangleOnerectangleOne nullnull 为对象分配成员变量为对象分配成员变量 n n 格式:格式: 对象名对象名=new =new 类的构造方法;类的构造方法; n n 上述的上述的RectRect类提供了类提供了2 2个构造方法,下面都是合法的创建个构造方法,下面都是合法的创建 对象的语句。对象的语句。 qqrectangleOne =new Rect();rectangleOne =new Rect(); qqrectangleOne =new Rect(10,20);rectangleOne =new Rect(10,20); n n 如果类中没有构造方法,系统会调用默认的构造方法如果类中没有构造方法,系统会调用默认的构造方法( (默默 认的构造方法是无参数的认的构造方法是无参数的) )。 n n 如果类里定义了一个或多个构造方法,那么如果类里定义了一个或多个构造方法,那么JavaJava不提供默不提供默 认的构造方法。认的构造方法。 n n 如果上述如果上述RectRect只提供一个带参数的构造方法,代码只提供一个带参数的构造方法,代码 “rectangleOne =new Rect();”“rectangleOne =new Rect();”是非法的。是非法的。 n n 创建对象的代码创建对象的代码“ “rectangleOne =new rectangleOne =new RectRect(10,20);(10,20);” ”会实会实 现下述两件事现下述两件事: 1 1、为成员变量分配内存空间,然后执行构造方法中的语为成员变量分配内存空间,然后执行构造方法中的语 句句 。 2 2、给出一个信息,已确保这些成员变量是属于对象给出一个信息,已确保这些成员变量是属于对象 rectangleOnerectangleOne的的 ( (返回一个返回一个引用引用,由引用来,由引用来“ “操作管理操作管理” ” 这些成员变量这些成员变量) )。 rectangleOnerectangleOne 1010 2020 side Aside A side Bside B 0xFFFFF0xFFFFF 称sideA、sideB的内存单元是属于对象 rectangleOne的实体或属于rectangleOne的成员变量, 即这些变量由对象rectangleOne操作管理。 说明: 创建对象就是指为它分配成员变量,并获得一个引用, 以确保这些成员变量由它操作管理。 对象是一种类类型变量,属于引用型变量,即对象变量 中存放着引用。所谓引用型变量,就是用来存放成为“引 用”的地址号,而且引用型变量可以操作它所引用的变量 。 Java中引用与C+中指针的比较: 相同点:引用型变量和指针变量都用来存放一个地址号。 不同点:引用型变量不能像指针变量那样任意地分配内存地 址,或像整数一样来操作它。 创建多个不同的对象创建多个不同的对象 n n 一个类通过使用一个类通过使用newnew运算符可以创建多个不同的对象,这运算符可以创建多个不同的对象,这 些对象将被分配不同的内存空间。些对象将被分配不同的内存空间。 n n 改变其中一个对象的状态不会影响其它对象的状态。改变其中一个对象的状态不会影响其它对象的状态。 n n 例如,使用前面的例如,使用前面的RectRect类创建两个对象:类创建两个对象: qqrectOne =new Rect(10,20);rectOne =new Rect(10,20); qqrectTwo =new Rect(33,66);rectTwo =new Rect(33,66); qq这两个对象所占据的内存空间是互不相同的位置,具有这两个对象所占据的内存空间是互不相同的位置,具有 不同的实体。不同的实体。 rectOnerectOne 1010 2020 side Aside A side Bside B 0xFFE0xFFE3333 6666 side Aside A side Bside B rectTworectTwo 0xFFF0xFFF 4.4.3 4.4.3 使用对象使用对象 n n 对象不仅可以操作自己的变量改变状态,而且还可以调对象不仅可以操作自己的变量改变状态,而且还可以调 用创建它的那个类中的方法,对象通过使用这些方法可以用创建它的那个类中的方法,对象通过使用这些方法可以 产生一定的行为。产生一定的行为。 n n 通过使用通过使用运算符运算符“ “.”.”,对象可以实现对自己的变量访问,对象可以实现对自己的变量访问 和方法的调用。和方法的调用。 qq对象操作自己的变量对象操作自己的变量( (对象的属性对象的属性) )。 qq对象调用类中的方法对象调用类中的方法( (对象的功能对象的功能) ) 。 注:当对象调用方法时,方法中的局部变量被分配内存空注:当对象调用方法时,方法中的局部变量被分配内存空 间。方法执行完毕,局部变量即刻释放内存。如果局部间。方法执行完毕,局部变量即刻释放内存。如果局部 变量声明时如果没有初始化,就没有默认值,所以在使变量声明时如果没有初始化,就没有默认值,所以在使 用局部变量之前,要事先为其赋值。用局部变量之前,要事先为其赋值。 n n 例例4-14-1,使用,使用“Lader”“Lader”类的构造方法创建了两个对象类的构造方法创建了两个对象 laderOneladerOne, laderTwo laderTwo. . 返回返回 class Lader double above,bottom,height; Lader() Lader(double a,double b,double h) above=a; bottom=b; height=h; public void setAbove(double a) above=a; public void setBottom(double b) bottom=b; public void setHeight(double h) height=h; 例例4-14-1 double computeArea() return (above+bottom)*height/2.0; public class Example4_1 public static void main(String args) double area1=0,area2=0; Lader laderOne,laderTwo; laderOne=new Lader(); laderTwo=new Lader(10,88,20); laderOne.setAbove(16); laderOne.setBottom(26); laderOne.setHeight(100); laderTwo.setAbove(300); laderTwo.setBottom(500); area1=laderOputeArea(); area2=laderTputeArea(); System.out.println(“laderOne的above,bottom 和height:“+ laderOne.above+“,“+laderOne.bottom+“,“+lad erOne.height); System.out.println(“laderOne的面积: “+area1); System.out.println(“laderTwo的 above,bottom和height:“+ laderTwo.above+“,“+laderTwo.b ottom+“,“+laderTwo.height); System.out.println(“laderTwo的面积: “+area2); laderOne的above,bottom和height:16.0,26.0,100.0 laderOne的面积:2100.0 laderTwo的above,bottom和height:300.0,500.0,20.0 laderTwo的面积:8000.0 运行结果: 4.5 4.5 对象的引用与实体对象的引用与实体 n n 当用类创建一个对象时,成员变量被分配内存空间,这些当用类创建一个对象时,成员变量被分配内存空间,这些 内存空间称做该对象的内存空间称做该对象的实体或变量实体或变量,而对象中存放着引用,而对象中存放着引用 ,以确保这些变量由该对象操作使用。,以确保这些变量由该对象操作使用。 n n 如果两个对象有相同的引用,那么就具有同样的实体如果两个对象有相同的引用,那么就具有同样的实体 t1=new Lader(11,22,33);t1=new Lader(11,22,33); 1111 2222 aboveabove bottombottom t1t1 0xEEE0xEEE 3333heightheight 6 6 1212 aboveabove bottombottom t2t2 0xFFF0xFFF 1818heightheight t2=new Lader(6,12,18);t2=new Lader(6,12,18); t2=t1;t2=t1; 0xEEE0xEEE t2=null;t2=null; nullnull n n JavaJava具有具有“ “垃圾收集垃圾收集” ”机制机制 qqJavaJava的运行环境周期地检测某个实体是否已不再被任的运行环境周期地检测某个实体是否已不再被任 何对象所引用,如果发现这样的实体,就释放实体占有何对象所引用,如果发现这样的实体,就释放实体占有 的内存。的内存。 qqJavaJava编程人员不必象编程人员不必象C+C+程序员那样,要时刻自己检查程序员那样,要时刻自己检查 哪些对象应该释放内存。哪些对象应该释放内存。 n n 没有实体的对象称作没有实体的对象称作空对象空对象。 qq空对象不能使用,即不能让一个空对象去调用方法产生空对象不能使用,即不能让一个空对象去调用方法产生 行为。行为。 qq假如程序中使用了空对象,程序在运行时会出现异常:假如程序中使用了空对象,程序在运行时会出现异常: NullPointerExceptionNullPointerException。 qq由于对象是动态地分配实体,所以由于对象是动态地分配实体,所以JavaJava的编译器对空的编译器对空 对象不做检查对象不做检查; ;因此,在编写程序时要避免使用空对象因此,在编写程序时要避免使用空对象 。 返回返回 4.6 4.6 成员变量成员变量 n n 1 1、成员变量、成员变量 n n 成员变量用来刻画类创建对象的属性,分为成员变量用来刻画类创建对象的属性,分为实例变量实例变量和和类类 变量。变量。 qq没有使用没有使用staticstatic修饰的成员变量称作修饰的成员变量称作实例变量实例变量。 qq用关键字用关键字staticstatic修饰的成员变量称作修饰的成员变量称作类变量类变量或或静态变量静态变量 。 class A class A float x; float x; static int y; static int y; n n 实例变量实例变量 qq不同对象的实例变量互不相同,即分配不同的内存空间不同对象的实例变量互不相同,即分配不同的内存空间 ,改变其中一个实例变量不会影响其它对象的相应实例,改变其中一个实例变量不会影响其它对象的相应实例 变量。变量。 qq实例变量仅仅是与相应的对象关联的变量。实例变量仅仅是与相应的对象关联的变量。 qq实例变量必须通过对象访问。实例变量必须通过对象访问。 A a1=new A();A a1=new A(); 0 0 x x 0xff0xff a1a1 0 0 y y 0 0 x x 0xdd0xdd a2a2 3 3 A a2=new A();A a2=new A(); a1.x=3;a1.x=3; 下面程序接上一页程序 n n 类变量类变量 qq对于类变量而言,所有对象的这个类变量都分配给相同对于类变量而言,所有对象的这个类变量都分配给相同 的一处内存,改变其中一个对象的这个类变量就同时改的一处内存,改变其中一个对象的这个类变量就同时改 变了其它对象的这个类变量。变了其它对象的这个类变量。 qq类变量是和该类所创建的所有对象相关联的变量。类变量是和该类所创建的所有对象相关联的变量。 qq类变量不仅可以通过某个对象访问,也可以直接通过类类变量不仅可以通过某个对象访问,也可以直接通过类 名访问。名访问。 A a1=new A();A a1=new A(); 0 0 x x 0xff0xff a1a1 0 0 y y 0 0 x x 0xdd0xdd a2a2 3 3 A a2=new A();A a2=new A(); a1.x=3;a1.x=3; a2.y=4;a2.y=4; A.y=5;A.y=5; 5 5 4 4 例例4-24-2: :两个两个“ “ Lader”Lader”对象共享对象共享bottombottom class Lader double above,height; /实例变量 static double bottom; /类变量 void setAbove(double a) above=a; void setBottom(double b) bottom=b; double getAbove() return above; double getBottom() return bottom; 例例4-24-2 class Example4_2 public static void main(String args) Lader.bottom=60; /Lader的字节码被加载到内存, /通过类名操作类变量 Lader laderOne,laderTwo; System.out.println(“现在所有Lader对象的bottom都是 “+Lader.bottom); laderOne=new Lader(); laderTwo=new Lader(); System.out.println(“laderOne的 bottom:“+laderOne.getBottom(); System.out.println(“laderTwo的 bottom:“+laderTwo.getBottom(); laderOne.setAbove(11); laderTwo.setAbove(22); laderTwo.setBottom(100); System.out.println(“现在所有Lader对象的bottom都是 “+Lader.bottom); System.out.println(“laderOne的 above:“+laderOne.getAbove(); System.out.println(“laderTwo的 above:“+laderTwo.getAbove(); n n 2 2、常量、常量 qq如果一个成员变量修饰为如果一个成员变量修饰为finalfinal,就是常量,常量的名字,就是常量,常量的名字 习惯用大写字母。习惯用大写字母。 n n final int MAX;final int MAX; qqfinalfinal修饰的成员变量不占用内存,这意味着在声明修饰的成员变量不占用内存,这意味着在声明final final 成员变量时,必须要初始化。成员变量时,必须要初始化。 qq对于对于final final 修饰的成员变量,对象可以操作使用,但不修饰的成员变量,对象可以操作使用,但不 能做更改操作能做更改操作( (例例4-34-3) )。 返回返回 class Tom final int MAX=100; static final int MIN=20; public class Example4_3 public static void main(String args ) System.out.println(Tom.MIN); Tom cat=new Tom(); int x=0; x=Tom.MIN+cat.MAX; System.out.println(x); 例例4-34-3 4.7 4.7 方法方法 n n 一部分方法称作一部分方法称作构造方法构造方法,供类创建对象时使用,用来给,供类创建对象时使用,用来给 出类所创建的对象的初始状态。出类所创建的对象的初始状态。 n n 对象不可以调用构造方法,构造方法是专门用来创建对象对象不可以调用构造方法,构造方法是专门用来创建对象 的。的。 n n 另一部分方法可分为另一部分方法可分为实例方法实例方法和和类方法类方法,类所创建的对象,类所创建的对象 可以调用这些方法形成一定的算法,体现对象具有某种功可以调用这些方法形成一定的算法,体现对象具有某种功 能。能。 1 1、方法的定义方法的定义 2 2、方法体的构成方法体的构成 3 3、实例方法与类方法实例方法与类方法 4 4、参数传值参数传值 4.7.1 4.7.1 方法的定义方法的定义 n n 包括两部分:方法声明和方法体包括两部分:方法声明和方法体 n n 最基本的方法声明包括最基本的方法声明包括方法名方法名和方法的返回类型,返回类和方法的返回类型,返回类 型也简称作型也简称作方法的类型。方法的类型。 方法的声明方法的声明 方法体的内容方法体的内容 float area()float area() n n 在给方法起名字时应遵守以下习惯:在给方法起名字时应遵守以下习惯: qq名字如果使用拉丁字母,首写字母使用小写。名字如果使用拉丁字母,首写字母使用小写。 qq如果由多个单词组成,从第如果由多个单词组成,从第2 2个单词开始的其它单词的个单词开始的其它单词的 首写字母使用大写。首写字母使用大写。 qqfloat float getTrangleAreagetTrangleArea() () qqvoid void setCircleRadius(doublesetCircleRadius(double radius) radius) n n 方法声明之后的一对大括号方法声明之后的一对大括号“ “”、“ “”以及之间的内容称作以及之间的内容称作 方法的方法的方法体方法体; ;类中的方法必须要有方法体类中的方法必须要有方法体 n n 如果方法的类型是如果方法的类型是voidvoid类型,方法体中也可以类型,方法体中也可以不书写任何不书写任何 语句语句 4.7.2 4.7.2 方法体的构成方法体的构成 n n 方法体的内容包括变量的定义和合法的方法体的内容包括变量的定义和合法的JavaJava语句。语句。 n n 在方法体中声明的变量以及方法的参数称作在方法体中声明的变量以及方法的参数称作局部变量局部变量,局,局 部变量仅仅在该方法内有效。部变量仅仅在该方法内有效。 n n 方法的参数在整个方法内有效,方法内定义的局部变量从方法的参数在整个方法内有效,方法内定义的局部变量从 它定义的位置之后开始有效。它定义的位置之后开始有效。 n n 局部变量的名字必须符合标识符规定,遵守习惯:名字如局部变量的名字必须符合标识符规定,遵守习惯:名字如 果使用拉丁字母,首写字母使用小写果使用拉丁字母,首写字母使用小写; ;如果由多个单词组如果由多个单词组 成,从第成,从第2 2个单词开始的其它单词的首写字母使用大写。个单词开始的其它单词的首写字母使用大写。 float area(float height, float width)float area(float height, float width) float c; c=height*width; return c;float c; c=height*width; return c; 4.7.3 4.7.3 实例方法与类方法实例方法与类方法 n n 除构造方法外,其他的方法可分为除构造方法外,其他的方法可分为实例方法实例方法或或类方法类方法。 n n 方法声明中用关键字方法声明中用关键字staticstatic修饰的称作修饰的称作类方法类方法或或静态方法静态方法 ,不用,不用staticstatic修饰的称作修饰的称作实例方法实例方法 n n 一个类中的方法可以互相调用一个类中的方法可以互相调用 qq实例方法可以调用该类中实例方法或类方法。实例方法可以调用该类中实例方法或类方法。 qq类方法只能调用该类的类方法,不能调用实例方法。类方法只能调用该类的类方法,不能调用实例方法。 qq例如例如:A A类的类的maxmax方法和方法和getMaxSqrtgetMaxSqrt方法是类方法;方法是类方法; sumsum和和minmin方法是实例方法方法是实例方法 class A float a,b; void sum(float x,float y) a=max(x,y); b=min(x,y); static float getMaxSqrt(float x,float y) float c; c=max(x,y)*max(x,y); return c; static float max(float x,float y) return xy?x:y; float min(float x,float y) return xy?x:y; n n 方法对成员变量的操作方法对成员变量的操作 qq实例方法实例方法可以操作成员变量,无论是实例变量或类变量可以操作成员变量,无论是实例变量或类变量 。 qq类方法类方法只能操作类变量不能操作实例变量,也就是说类只能操作类变量不能操作实例变量,也就是说类 方法中不能有操作实例变量的语句方法中不能有操作实例变量的语句 qq二者为何有着这样的区别呢二者为何有着这样的区别呢: n n 实例方法必须通过对象来调用实例方法必须通过对象来调用 n n 类方法可以通过类名调用类方法可以通过类名调用 n n 无论类方法或实例方法,当被调用执行时,方法中的局部无论类方法或实例方法,当被调用执行时,方法中的局部 变量才被分配内存空间变量才被分配内存空间;方法调用完毕,局部变量即刻释方法调用完毕,局部变量即刻释 放所占的内存。放所占的内存。 n n 例例4-4-4 4,通过类名调用类方法,通过类名调用类方法 4.7.4 4.7.4 参数传值参数传值 n n 当方法被调用时,如果方法有参数,参数必须要实例化,当方法被调用时,如果方法有参数,参数必须要实例化, 即参数变量必须有具体的值即参数变量必须有具体的值 n n 在在JavaJava中,方法的所有参数都是中,方法的所有参数都是“ “传值传值” ”的,也就是说,方的,也就是说,方 法中参数变量的值是调用者指定值的拷贝法中参数变量的值是调用者指定值的拷贝 n n 基本数据类型参数的传值基本数据类型参数的传值 qq比如:向方法的比如:向方法的intint型参数型参数x x传递一个传递一个intint值,那么参数值,那么参数x x 得到的值是传递值的拷贝得到的值是传递值的拷贝 qq方法如果改变参数的值,不会影响向参数方法如果改变参数的值,不会影响向参数“ “传值传值” ”的变量的变量 的值的值 qq例例4-54-5,向一个方法的基本型参数传值,向一个方法的基本型参数传值 n n 引用类型参数的传值引用类型参数的传值 qqJavaJava的引用型数据包括我们以前学习过的对象、数组的引用型数据包括我们以前学习过的对象、数组 以及后面将要学习的接口以及后面将要学习的接口 qq当参数是引用类型时,当参数是引用类型时,“ “传值传值” ”传递的是变量的引用而不传递的是变量的引用而不 是变量所引用的实体是变量所引用的实体 qq如果改变参数变量所引用的实体,就会导致原变量的实如果改变参数变量所引用的实体,就会导致原变量的实 体发生同样的变化体发生同样的变化 qq改变参数的引用不会影响向其传值的变量的引用改变参数的引用不会影响向其传值的变量的引用 0xdddd0xdddd 引用型实参引用型实参 nullnull 引用型行参引用型行参 实实 体体 0xdddd0xdddd qq例例4-64-6,向一个方法的引用型参数传值,向一个方法的引用型参数传值 n n tomtom调用方法调用方法f f把对象把对象jerryjerry的引用的引用“ “传值传值” ”给参数给参数a a后,后, 对象对象jerryjerry和对象和对象a a就具有同样的成员变量,即同样实就具有同样的成员变量,即同样实 体;因此,体;因此,jerryjerry和和a a就具有同样的功能,也就是说就具有同样的功能,也就是说a a 调用方法产生的行为和调用方法产生的行为和jerryjerry调用同一方法产生的行调用同一方法产生的行 为完全相同为完全相同 n n 当对象当对象a a执行执行 a=null;a=null; 后,后,a a就不再有任何实体,变成就不再有任何实体,变成 一个空对象,如果再执行:一个空对象,如果再执行:a.setLeg(100);a.setLeg(100);就会引起就会引起 NullPointerExcetionNullPointerExcetion异常;但是,异常;但是,jerryjerry的引用没有的引用没有 发生任何变化,它依然引用着原来的实体,仍然可以发生任何变化,它依然引用着原来的实体,仍然可以 调用方法产生行为调用方法产生行为 qq例例4-4-7 7中,中,“ “ConeCone” ”类在创建对象时,将一个类在创建对象时,将一个“ “CircleCircle” ”对对 象的引用象的引用“ “传值传值” ”给给“ “ConeCone” ”对象的对象的“ “bottombottom” 返回返回 4.8 4.8 方法重载方法重载( (函数重载函数重载) ) n n 指一个类中可以有多个方法具有相同的名字指一个类中可以有多个方法具有相同的名字 n n 但这些方法的参数必须不同,即或者是参数的个数不同,但这些方法的参数必须不同,即或者是参数的个数不同, 或者是参数的类型不同或者是参数的类型不同 n n 方法的返回类型和参数的名字不参与比较方法的返回类型和参数的名字不参与比较; ;也就是说,如也就是说,如 果两个方法的名字相同,即使类型不同,也必须保证参数果两个方法的名字相同,即使类型不同,也必须保证参数 不同不同 n n 方法重载是功能的多态性方法重载是功能的多态性 n n 例例4-8 4-8 AreaArea类中类中getAreagetArea方法是一个重载方法方法是一个重载方法 返回返回 4.9 this4.9 this关键字关键字 n n thisthis关键字可以出现在类的构造方法中,代表使用该构造关键字可以出现在类的构造方法中,代表使用该构造 方法所创建的对象方法所创建的对象( (例例4-94-9) ) n n thisthis关键字可以出现在类的实例方法中,代表使用该方法关键字可以出现在类的实例方法中,代表使用该方法 的当前对象的当前对象 ( (例如例如) ) qq实例方法可以操作成员变量,实际上,当成员变量在实实例方法可以操作成员变量,实际上,当成员变量在实 例方法中出现时,默认的格式是:例方法中出现时,默认的格式是:“ “this.this.成员变量成员变量” ” qq实例方法可以调用类的其它方法,调用的默认格式是:实例方法可以调用类的其它方法,调用的默认格式是: “ “this.this.方法方法” ” qq通常情况下,可以省略成员变量和成员方法前面的通常情况下,可以省略成员变量和成员方法前面的 “ “this.”this.” n n 类方法中不可以使用类方法中不可以使用thisthis qq类方法可以通过类名直接调用,这时可能还没有任何对类方法可以通过类名直接调用,这时可能还没有任何对 象诞生象诞生 n n 使用使用thisthis区分成员变量和局部变量区分成员变量和局部变量 qq成员变量在整个类内有效,局部变量仅在方法内有效成员变量在整个类内有效,局部变量仅在方法内有效 qq在方法体中声明的变量以及方法的参数称作局部变量;在方法体中声明的变量以及方法的参数称作局部变量; 方法的参数在整个方法内有效、方法内定义的局部变量方法的参数在整个方法内有效、方法内定义的局部变量 从它定义的位置之后开始有效从它定义的位置之后开始有效 qq如果局部变量的名字与成员变量的名字相同,则成员变如果局部变量的名字与成员变量的名字相同,则成员变 量被隐藏,即这个成员变量在这个方法内暂时失效量被隐藏,即这个成员变量在这个方法内暂时失效( (例例 如如4-8-14-8-1) ) qq这时如果想在该方法内使用成员变量,成员变量前面的这时如果想在该方法内使用成员变量,成员变量前面的 “ “this.”this.”就不可以省略就不可以省略( (例如例如4-8-24-8-2) ) 返回返回 4.10 4.10 包包 n n 包是包是JavaJava中有效管理类的一种机制,一般是将功能相关或中有效管理类的一种机制,一般是将功能相关或 相近的类放在同一个包中相近的类放在同一个包中 n n 通过关键字通过关键字packagepackage声明包语句声明包语句,其,其一般格式为一般格式为: qqpackage package 包名包名; ; n n package package 语句作为语句作为JavaJava源文件的第一条语句,指明该源源文件的第一条语句,指明该源 文件定义的类所在的包文件定义的类所在的包 n n 如果源程序中省略了如果源程序中省略了packagepackage语句,源文件中所定义命名语句,源文件中所定义命名 的类被隐含地认为是无名包的一部分,即源文件中定义命的类被隐含地认为是无名包的一部分,即源文件中定义命 名的类在同一个包中,但该包没有名字名的类在同一个包中,但该包没有名字 n n 包名可以是一个合法的标识符,也可以是若干个标识符加包名可以是一个合法的标识符,也可以是若干个标识符加 “.”“.”分割而成,如:分割而成,如: qqpackage sunrise;package sunrise; qqpackage ;package ; n n 程序使用了包语句程序使用了包语句后的编译和执行后的编译和执行 qq例如例如 package tom.jiafei;package tom.jiafei; qq则你的系统则你的系统必须包含有必须包含有这样这样的结构的结构“ “tomjiafeitomjiafei” ”( (比如比如 c:1000c:1000tomjiafeitomjiafei) ),并且要并且要确保确保源文件编译后得到的源文件编译后得到的 全部字节码文件拷贝到目录全部字节码文件拷贝到目录c:1000tomjiafeic:1000tomjiafei中中 qq运行程序时必须到运行程序时必须到tomjiafeitomjiafei的上一层目录的上一层目录10001000中来运中来运 行行 qq例例4-104-10 n n 包名包名和类名合在一起成为和类名合在一起成为类的全名类的全名( (tom.jiafei.Exampletom.jiafei.Example), ), 就好比大连的全名是:就好比大连的全名是:“ “中国中国. .辽宁辽宁. .大连大连” ” n n 包名应该避免与其他包名冲突包名应该避免与其他包名冲突 qqSunSun公司建议大家使用自己所在公司的公司建议大家使用自己所在公司的InternetInternet域名倒域名倒 置后做包名置后做包名 qq例如,将域名例如,将域名“”“”的倒置的倒置“.sina”“.sina”做做 包名包名 n n 使用参数使用参数“d”“d”编译源文件编译源文件 qq如果源文件没有包名,使用参数如果源文件没有包名,使用参数-d-d可以将字节码文件存可以将字节码文件存 放到你指定的有效目录中放到你指定的有效目录中 qqjavacjavac d F:tsinghua1000 d F:tsinghua1000 MyFile.javaMyFile.java 返回返回 4.11 import4.11 import语句语句 n n 在编程时,如果要使用在编程时,如果要使用JavaJava或别人提供的类,那么就要在或别人提供的类,那么就要在 使用该类之前用使用该类之前用import import 语句将其引入到我们的文件中语句将其引入到我们的文件中 n n 一个一个JavaJava源程序可以有多个源程序可以有多个importimport语句,但必须写在语句,但必须写在 packagepackage语句之后、源文件中类的定义之前语句之后、源文件中类的定义之前 n n 格式:格式: qqimport java.io.*; import java.io.*; 引入包中所有的类引入包中所有的类 qqimport java.util.Date; import java.util.Date; 只引入包中的只引入包中的DateDate类类 1 1、使用类库中的类使用类库中的类 2 2、使用自定义包中的类使用自定义包中的类 3 3、使用无名包中的类使用无名包中的类 4 4、避免类名混淆避免类名混淆 4.11.1 4.11.1 使用类库中的类使用类库中的类 n n JavaJava为我们提供了大约为我们提供了大约130130包,如:包,如: qqjava.applet java.applet 包含所有的实现包含所有的实现Java appletJava applet的类的类 qqjava.awt java.awt 包含抽象窗口工具集中的图形、文本包含抽象窗口工具集中的图形、文本 、 窗口窗口GUIGUI类类 qqjava.awt.image java.awt.image 包含抽象窗口工具集中的图像处理类包含抽象窗口工具集中的图像处理类 qqjava.lang java.lang 包含所有的基本语言类包含所有的基本语言类 qqjava.io java.io 包含所有的输入输出类包含所有的输入输出类 包含所有实现网络功能的类包含所有实现网络功能的类 qqjava.until java.until 包含有用的数据类型类包含有用的数据类型类 n n java.langjava.lang包是包是JavaJava语言的核心类库,包含了运行语言的核心类库,包含了运行JavaJava程程 序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年航空氢能产业政策环境与产业布局研究报告
- 2025年电子竞技俱乐部赛事运营与品牌战略规划报告
- 2025年智慧交通系统交通流量预测技术在我国乡村交通中的应用报告
- 2025年学前教育信息化:现状调研与应用前景展望报告
- 2025年工业互联网平台微服务架构性能测试:物流大数据分析报告
- 篮球场合作建设合同6篇
- 2025年4月四川内江市第六人民医院招聘见习人员3人模拟试卷及答案详解(夺冠系列)
- 2025恒邦财产保险股份有限公司营业部招聘1人模拟试卷及参考答案详解
- 2025年上海交通大学医学院工作人员公开招聘(二)考前自测高频考点模拟试题及答案详解(新)
- 2025广州医科大学校本部招聘工作人员9人(第二次)考前自测高频考点模拟试题有答案详解
- 《茉莉花》音乐课件
- 2025年云南省职教高考电工技术类《电工基础理论知识》考试复习题库(含答案)
- 工厂交叉作业安全管理协议书(2篇)
- 外墙真石漆工程安全文明施工保证措施及环境保护体系和保证措施
- 品管圈PDCA改善案例-产科联合多部门降低阴道分娩产后出血发生率
- 矿井火灾防治理论与技术课件
- 【MOOC】生命的教育-浙江大学 中国大学慕课MOOC答案
- 中国非遗文化鱼灯介绍介绍2
- NB/T 11127-2023在用钢丝绳芯输送带报废检测技术规范
- 食品检测实验室操作规程
- 急性ST段抬高心肌梗死临床路径表单
评论
0/150
提交评论