版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章类和对象第7章类和对象1第7章类和对象7.1面向对象编程基本概念7.2类和对象7.3注解主要内容第7章类和对象7.1面向对象编程基本概念主要内容2古代诗词知识竞赛3古代诗词知识竞赛47.1面向对象编程基本概念7.1面向对象编程基本概念5面向对象思想是人类最自然的一种思考方式它将所有预处理的问题抽象为对象,同时了解这些对象具有相应的属性以及展示这些对象的行为,以解决这些对象面临的一些实际问题,这样就在程序开发中引入了面向对象设计的概念。7.1面向对象编程基本概念面向对象思想是人类最自然的一种思考方式7.1面向对象编程基67.1.1什么是对象现实世界中,随处可见的一种事物就是对象对象就是客观世界中存在的人、事和物体等实体。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。7.1.1什么是对象现实世界中,随处可见的一种事物就是对7对象(object),对象是自然物体(如汽车、房屋、狗),也可以是社会生活中一种逻辑结构(如班级、部门、组织),甚至一篇文章、一个图形、一项计划等都可以视作对象。对象是构成系统的基本单位,在实际社会生活中,人们都是在不同的对象中活动的。7.1.1什么是对象对象(object),对象是自然物体(如汽车、房屋、狗),也87.1.1什么是对象通常将对象划分为两个部分,即动态部分与静态部分。静态部分,顾名思义,就是不能动的部分,这个部分被称为“属性”。任何对象都会具备其自身属性,例如一个人,它包括高矮、胖瘦、性别、年龄等。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分)人类通过探讨对象的属性和观察对象的行为了解对象。7.1.1什么是对象通常将对象划分为两个部分,即动态部分9任何一个对象都应当具有这两个要素,属性(attribute)和行为(behavior),一个对象往往由一组属性和一组行为构成,凡是具备属性和行为这两个要素的,都可以作为对象.7.1.1什么是对象任何一个对象都应当具有这两个要素,7.1.1什么是对象107.1.1什么是对象在计算机的世界中,面向对象程序设计的思想要以对象来思考问题,首先要将现实世界的实体抽象为对象,然后考虑这个对象具备的属性和行为。7.1.1什么是对象在计算机的世界中,面向对象程序设计的117.1.1什么是对象例如,现在面临一只大雁要从北方飞往南方这样一个实际问题,试着以面向对象的思想来解决这一实际问题。步骤如下:1)首先可以从这一问题中抽象出对象,这里抽象出的对象为大雁。2)然后识别这个对象的属性。对象具备的属性都是静态属性,例如大雁有一对翅膀、黑色的羽毛等。这些属性如图所示。7.1.1什么是对象例如,现在面临一只大雁要从北方飞往南127.1.1什么是对象3)接着是识别这个对象的动态行为,即这只大雁可以进行的动作,例如飞行、觅食等,这些行为都是因为这个对象基于其属性而具有的动作。4)识别出这些对象的属性和行为后,这个对象就被定义完成。7.1.1什么是对象3)接着是识别这个对象的动态行为,即137.1.1什么是对象实质上究其本质,所有的大雁都具有以上的属性和行为,可以将这些属性和行为封装起来以描述大雁这类动物。由此可见,类实质上就是封装对象属性和行为的载体,而对象则是类抽象出来的一个实例,二者之间的关系如图7-3所示。7.1.1什么是对象实质上究其本质,所有的大雁都具有以上147.1.1什么是对象7.1.1什么是对象157.1.1什么是对象人数据(属性)Stringname;intage;intid;方法(行为)生物行为eat(),sleep(),…社会行为work(),study(),…7.1.1什么是对象人167.1.2什么是类类就是同一类事物的统称。如果将现实世界中的一个事物抽象成对象,类就是这类对象的统称,比如鸟类、家禽类、人类等。类是构造对象时所依赖的规范。比如,一只鸟具有一对翅膀,而它可以通过这对翅膀飞行,而基本上所有的鸟都具有翅膀这个特性和飞行的技能,这样的具有相同特性和行为的一类事物就称为类。7.1.2什么是类类就是同一类事物的统称。177.1.2什么是类对象就是符合某个类定义所产生出来的实例。更为恰当的描述是:类是世间事物的抽象称呼,而对象则是这个事物相对应的实体。如果面临实际问题,通常需要实例化类对象来解决。比如解决大雁南飞的问题,这里只能拿这只大雁来处理这个问题,不能拿大雁类或是鸟类来解决。7.1.2什么是类对象就是符合某个类定义所产生出来的实例187.1.2什么是类类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。例如一个鸟类,鸟类封装了所有鸟的共同属性和应具有的行为,其结构如图7-4所示。7.1.2什么是类类是封装对象的属性和行为的载体,反过来197.1.2什么是类说明:在Java语言中,类中对象的行为是由方法的形式定义的,对象的属性是由成员变量的形式定义的,一个类包括对象的属性和方法。7.1.2什么是类说明:在Java语言中,类中对象的行为207.1.3什么是封装面向对象程序设计具有以下特点:封装性继承性多态性封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。7.1.3什么是封装面向对象程序设计具有以下特点:217.1.3什么是封装采用封装的思想保证了类内部数据结构的完整性,用户不能轻易直接操纵此数据结构,而只能执行类允许公开的数据。这样避免了外部对内部数据的影响,提高程序的可维护性。7.1.3什么是封装采用封装的思想保证了类内部数据结构的227.1.4什么是继承类与类之间同样具有关系,类之间这种关系被称为关联。关联是描述两个类之间的一般二元关系。两个类之间的关系有很多种,继承是关联中的一种。当处理一个问题时,可以将一些有用的类保留下来,当遇到同样问题时拿来复用。7.1.4什么是继承类与类之间同样具有关系,类之间这种关23如果在软件开发中已建立了一个名为A的类,又想建立一个名为B的类,而后者与前者内容基本相同,只是在前者基础上增加一些新的属性和行为,显然不必再从头设计一个新类,只需在A类的基础上增加一些新的内容即可,而B类的对象拥有A类的全部属性与方法,称作B类对A类的继承,在B类中不必重新定义已在A类中定义过的属性和方法,这种特性在面向对象中称作对象的继承。7.1.4什么是继承如果在软件开发中已建立了一个名为A的类,又想建立一个名为B的247.1.4什么是继承由于鸽子属于鸟类,鸽子具有鸟类相同的属性和行为。便可以在创建信鸽类时将鸟类拿来复用,并且保留鸟类具有的属性和行为。不过,并不是所有的鸟都有送信的习惯,因此还需要再添加一些信鸽具有的独特属性以及行为。鸽子类保留了鸟类的属性和行为,这样就节省了定义鸟和鸽子共同具有的属性和行为的时间,这就是继承的基本思想。7.1.4什么是继承由于鸽子属于鸟类,鸽子具有鸟类相同的257.1.4什么是继承继承性主要利用特定对象之间的共有属性。例如,平行四边形是四边形,可以将平行四边形类看作四边形的延伸,平行四边形复用了四边形的属性和行为,同时添加了平行四边形独有的属性和行为,如平行四边形的对边平行且相等。这里可以将平行四边形类看作是从四边形类中继承的。7.1.4什么是继承继承性主要利用特定对象之间的共有属性267.1.4什么是继承在Java语言中将类似于平行四边形的类称为子类,将类似于四边形的类称为父类或超类。值得注意的是,可以说平行四边形是特殊的四边形,但不能说四边形是平行四边形,也就是说子类的实例都是父类的实例,但不能说父类的实例是子类的实例。7.1.4什么是继承在Java语言中将类似于平行四边形的277.1.4什么是继承7.1.4什么是继承28多态性是指在基类中定义的属性或方法被派生类继承后,可以具有不同的数据类型或表现出不同的行为。为了实现多态性,需要在派生类中更改从基类中自动继承来的数据类型或方法。这种为了替换基类的部分内容而在派生类中重新进行定义的操作,在面向对象的概念中称为覆盖。7.1.5什么是多态多态性是指在基类中定义的属性或方法被派生类继承后,可以具有不297.2类和对象7.2.1访问权限修饰符7.2.2类的定义7.2.3成员变量的定义7.2.4普通方法的定义7.2.5局部变量的定义7.2.6构造方法的定义7.2.7方法参数的传递7.2类和对象7.2.1访问权限修饰符307.2类和对象7.2.8对象创建和使用7.2.9this关键字的用途7.2.10static关键字的用途7.2.11final关键字的用途7.2.12包的定义与使用7.2类和对象7.2.8对象创建和使用317.2.1访问权限修饰符主要包括private、public和protected,用来决定类中成员变量和方法能否被其它类访问。类的访问权限:public:可以供所有的类访问。
默认(包访问权限):
即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到。protected和private只能应用内部类,不能应用于顶层类。7.2.1访问权限修饰符主要包括private、publ327.2.1访问权限修饰符类访问权限说明:每个编译单元(类文件)都仅能有一个publicclass
。publicclass的名称(包含大小写)必须和其类文件同名。一个类文件(*.java)中可以不存在publicclassclass不可以是private和protected。(除了内部类之外)
。7.2.1访问权限修饰符类访问权限说明:337.2.1访问权限修饰符公共类的成员变量和成员方法的访问权限:public成员,除了可以在本类使用这些数据之外,还可以在子类和其他包中的类中使用private成员只能在本类中被使用,在子类中是不可见的,并且对其他包的类也是不可见的。protected成员可以由子类访问,如果既不是同包,也不是子类,则不可见。7.2.1访问权限修饰符公共类的成员变量和成员方法的访问34访问权限修饰符同一个类同一个包子类(异包)非同包public可见可见可见可见protected可见可见可见不可见无修饰符可见可见不可见不可见private可见不可见不可见不可见表7-1访问权限修饰符在不同位置的访问范围7.2.1访问权限修饰符访问权限修饰符同一个类同一个包子类非同包public可见可见357.2.1访问权限修饰符对于一个类内部定义的成员,无论使用何种修饰符都是可以被这个类访问的。在同一个包中,不管类是否存在继承关系,仅有private修饰的成员不能够被其他类使用。在不同的包中,如果两个类存在继承关系,则使用protected修饰的成员可见。在全局范围,仅有public修饰的成员可见。7.2.1访问权限修饰符对于一个类内部定义的成员,无论使367.2.2类的定义类是用来定义一组对象共具的状态和行为的模板。而对象是现实世界中个体或事物的抽象表示,并封装了它们的属性和行为。类声明了这些共同的特性,对象在使用之前,必须定义该对象的类,知道了对象的类型,才能够访问它的属性和行为。在Java语言中,对象的行为被定义成类的方法,对象的属性定义为类成员变量。所以一个类包括对象的属性和行为。7.2.2类的定义类是用来定义一组对象共具的状态和行为的377.2.2类的定义表示类的属性表示类的行为classclassName{
成员变量
……
成员方法
……}7.2.2类的定义表示类的属性表示类的行为classc387.2.2类的定义通常情况下类的定义可以依次包括如下内容:访问权限修饰符,例如public、private等。类名,通常是首字母大写的英语名词。类的父类,需要使用extends关键字。一个类仅能有一个父类。类实现的接口,需要使用implements关键字。一个类可以实现多个接口,接口名之间使用逗号分隔。类体,使用大括号包围。publicclass
className
extendsMyClass
implementsMyInterface{}7.2.2类的定义通常情况下类的定义可以依次包括如下内容397.2.2类的定义【例】定义一个水果类Fruit,在该类中定义了一个表示颜色的属性color、一个表示种植的方法plant()、一个表示生长的方法grow()和一个表示收获的方法harvest()。7.2.2类的定义【例】定义一个水果类Fruit,在该类407.2.2类的定义publicclassFruit{
publicStringcolor="";//定义颜色成员变量publicvoidplant(){
//定义种植成员方法
System.out.println("果树正在种植……"); } publicvoidgrow(){//定义生长的成员方法 System.out.println("果树正在生长……"); } publicvoidharvest(){//定义收获的成员方法 System.out.println("水果已经收获……"); }}类名的首字母通常为大写
Java允许每个文件包含一个或多个类定义,但其中最多只能有一个类被声明为public。7.2.2类的定义publicclassFruit417.2.3成员变量的定义根据变量在类中声明的位置不同,可以分为:声明在类中的变量叫做成员变量。声明在块和方法中的变量叫做局部变量。声明在方法声明中的变量叫做参数。在声明成员变量时,不必为其初始化,在声明局部变量时,必须为其初始化。如果未对成员变量进行初始化,其默认初始化值如图。7.2.3成员变量的定义根据变量在类中声明的位置不同,可427.2.3成员变量的定义成员变量是在类体中定义的变量,即全局变量,成员变量用于定义对象的状态。例如:Student类有name、age、sex等成员变量分别表示姓名、年龄、性别等状态。publicclassStudent{ publicStringname; //姓名
publicintage; //年龄
publicStringsex; //性别}7.2.3成员变量的定义成员变量是在类体中定义的变量,即437.2.3成员变量的定义成员变量是给对象使用的,每个对象被创建以后,都会有属于自己的属性,即成员变量。通过修改这些属性,从而改变对象的某个状态。不同的实例对象有不同的属性,如图所示。7.2.3成员变量的定义成员变量是给对象使用的,每个对象447.2.3成员变量的定义【例7-1】在项目中创建Book类,在该类中定义书名、出版社、ISBN和价格四个成员变量。publicclassBook{privateStringtitle;
privateStringpress;
privateStringISBN;privatedoubleprice;}成员变量必须直接定义在类体中,如果定义在其他方法或代码块中,就会成为局部变量,而不是成员变量。7.2.3成员变量的定义【例7-1】在项目中创建Boo457.2.3成员变量的定义在声明变量时,需要包含下面3部分内容:修饰符,包括访问权限修饰符等。例如代码中的private。变量的类型,可使用基本类型和引用类型。例如代码中的String和double。变量的名称,通常推荐使用小写英语名词。例如代码中的title、press、ISBN和price。7.2.3成员变量的定义在声明变量时,需要包含下面3部分467.2.4普通方法的定义成员方法是对象行为的描述。面向对象编程中,使用方法来实现对象之间的通信和改变对象的属性。成员方法主要承担外部操作对象属性的接口任务。成员变量和成员方法统称为类成员。[修饰符]返回值类型方法名([形参表]){ ...//方法体 return返回值;}7.2.4普通方法的定义成员方法是对象行为的描述。成员变477.2.4普通方法的定义通常情况下,方法由6部分组成,依次是:1)修饰符,可以是public、private、protected以及static、final等。2)返回值,方法运行的结果,如果没有返回值需要使用void表明。3)方法名称,程序将通过该名称调用这个方法,通常使用首字母小写的英语动词。7.2.4普通方法的定义通常情况下,方法由6部分组成,依487.2.4普通方法的定义通常情况下,方法由6部分组成,依次是:4)参数列表,说明方法被调用时,应该向它传递的数据,放在圆括号内,需要指明参数的类型和名称,当方法有多个形式参数时,参数之间使用“,”逗号分割;如果方法没有参数,可以省略“形参表”部分。5)异常列表,使用throws关键字,在后面的章节进行讲解。6)方法体,放置在大括号之间的内容。7.2.4普通方法的定义通常情况下,方法由6部分组成,依497.2.4普通方法的定义成员方法所处理数据的主要来源1)传递给成员方法的参数。2)类中的成员变量。3)在方法体内声明的局部变量。4)在方法中调用其他成员方法所得到的返回值。7.2.4普通方法的定义成员方法所处理数据的主要来源507.2.5局部变量的定义局部变量:在成员方法内定义的变量,形参也被看作是局部变量。局部变量只在定义它的方法内有效,在方法被执行时创建,在方法执行结束时被销毁,局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。7.2.5局部变量的定义局部变量:在成员方法内定义的变量517.2.5局部变量的定义【例7-3】在项目中创建Sum类,在main()方法中计算1到50之间所有整数之和。public
classSum{
public
static
voidmain(String[]args){
intsum=0;
for(inti=1;i<51;i++){sum+=i;}}}7.2.5局部变量的定义【例7-3】在项目中创建Sum52局部变量的作用域注:局部变量(方法的形参)尽量不要和成员变量同名,否则,局部变量(方法的形参)将覆盖该成员变量。局部变量的作用域注:局部变量(方法的形参)尽量不要和成员变量537.2.6构造方法的定义其功能主要是完成对象的初始化,每当类实例化一个对象时,类都会自动调用构造方法。构造方法与普通方法的差别主要有以下两点:不能有返回值,即没有返回值类型。构造方法的名称与本类的类名完全相同。注意:不是void类型public类名([参数列表]){ //...构造方法体}7.2.6构造方法的定义其功能主要是完成对象的初始化,每547.2.6构造方法的定义在构造方法中可以完成变量赋值、连接数据库等初始化工作,如果类中没有明确定义任何构造方法,则编译器会自动创建一个不带参数的默认构造方法。注意:如果在类中定义的构造方法都不是无参的构造方法,则编译器不会为类设置一个默认的无参构造方法,当试图调用无参构造方法实例化一个对象时,编译器会报错。7.2.6构造方法的定义在构造方法中可以完成变量赋值、连557.2.6构造方法的定义构造方法的特点方法名与类名相同没有返回类型,修饰符void也不能有通常被声明为公有的(public)和成员方法一样,构造方法也可以重载主要作用是完成对象的初始化工作不能在程序中显式的调用在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化7.2.6构造方法的定义构造方法的特点567.2.6构造方法的定义【例】定义Student类,在类中定义姓名、年龄和性别3个成员变量,再定义3个不同参数的构造方法,其中有一个是无参数的默认的构造方法。然后定义sayMyInfo()方法输出自己的信息。7.2.6构造方法的定义【例】定义Student类,在类57publicclassStudent{ publicStringname; publicStringsex; publicintage; publicStudent(){ name="未登记"; sex="未登记"; age=0; }
publicStudent(Stringname){
this.name=name;
}publicclassStudent{ public58
publicStudent(Stringname,Stringsex,intage){
this(name);
this.sex=sex;
this.age=age; }
public
voidsayMyInfo(){ System.out.println("我的名字是:"+name); System.out.println("我是:"+sex+"生"); System.out.println("我"+age+"岁了");} publicStudent(Stringname,S59 publicstaticvoidmain(String[]args){ Studentstudent1=newStudent(); Studentstudent2=newStudent("张三"); Studentstudent3=newStudent("李四","男",14);student1.sayMyInfo();student2.sayMyInfo();student3.sayMyInfo(); }} publicstaticvoidmain(Strin60成员变量的初始化初始化成员变量有5个途径:1)每个数据对应的数据类型有默认的初始值。2)在声明的同时赋予相应的初始值。3)定义成员方法为成员变量赋值。4)在构造方法中为成员变量赋值。5)利用初始化块对成员变量进行初始化成员变量的初始化初始化成员变量有5个途径:61成员变量的初始化利用初始化块对成员变量进行初始化。publicclassPoint{privateintx=1,y=2;{ x=10;y=20;//初始化块}publicPoint(){}publicPoint(intx1,inty1){x=x1;y=y1;}}成员变量的初始化利用初始化块对成员变量进行初始化。publi627.2.7方法参数的传递在方法的参数列表中,可以使用基本类型和引用类型,两者的传递方式都是值传递。值传递就是先将参数复制一份,然后将复制的内容传递到方法中。此时方法操作的内容与原来的参数无关。7.2.7方法参数的传递在方法的参数列表中,可以使用基本63privatestaticvoidswap(Strings1,Strings2){Stringt=s1;s1=s2;s2=t;}publicstaticvoidmain(String[]args){Strings1="123";Strings2="abc";System.out.println("交换前:"+s1+""+s2);swap(s1,s2);System.out.println("交换后:"+s1+""+s2);}交换前:123abc交换后:123abcprivatestaticvoidswap(Strin647.2.7方法参数的传递【例7-7】定义Circle类和ReferenceDataType,演示使用引用类型作为参数的方法。7.2.7方法参数的传递【例7-7】定义Circle类和65public
classCircle{
private
intx;
private
inty;
public
intgetX(){returnx;}
public
voidsetX(intcX){
x=cX;}
public
intgetY(){returny;}
public
voidsetY(intcY){
y=cY;}}publicclassCircle{66public
classReferenceDataType{
private
staticCircletransform(Circlecircle,intx,inty){
circle.setX(x);//设置x坐标
circle.setY(y);//设置y坐标
returncircle;}
public
static
voidmain(String[]args){Circlecircle=newCircle();
System.out.println("进入前"+circle);
transform(circle,5,5);
System.out.println("进入后"+circle);}}publicclassReferenceDataType677.2.7方法参数的传递在JDK5.0版以后,可以为方法指定数量未知的参数列表,这些参数需要具有相同的类型。在使用时,可以将其看成数组,通过遍历数组来获取所指定的参数,获取到的参数的个数将根据调用方法时指定的参数个数确定。privatestaticvoidprint(String...varargs){
for(inti=0;i<varargs.length;i++){System.out.print(varargs[i]+"");
}}7.2.7方法参数的传递在JDK5.0版以后,可以为方68
private
static
voidprint(String...varargs){
for(inti=0;i<varargs.length;i++){System.out.print(varargs[i]+"");
}}
public
static
voidmain(String[]args){
print("Java","PHP");
System.out.println();
print("Java","PHP","Java");
}privatestaticvoidprint(S69类的主方法主方法是类的入口点,它定义了程序从何处开始,主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。主方法的语法如下。publicstaticvoidmain(String[]args){ //方法体}主方法也是静态的,所以要直接在主方法中调用其他方法,则该方法必须也是静态的。主方法没有返回值。主方法的形参为数组。注:如果在主方法中调用非静态方法时,可以先实例化该类,再通过类的实例调用相应的方法。类的主方法主方法是类的入口点,它定义了程序从何处开始,主方法70public
static
voidmain(String[]args){
for(inti=0;i<args.length;i++){
System.out.println(args[i]);
} }类的主方法publicstaticvoidmain(String717.2.8对象的创建和使用在Java语言中通过new操作符来创建对象,每实例化一个对象就会自动调用一次构造方法。 类名对象名=new类构造方法();如:Testtest=newTest();Testtest=newTest("a");
7.2.8对象的创建和使用在Java语言中通过new操作727.2.8对象的创建和使用test对象被创建出来时,test对象就是一个对象的引用,当创建对象时,自动调用构造方法,也就是说在Java语言中初始化与创建是被捆绑在一起的。每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象变成了垃圾,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。7.2.8对象的创建和使用test对象被创建出来时,te737.2.8对象的创建和使用【例7-9】为创建的ObjectCreation类定义一个构造方法。在main()方法中,创建该类对象。publicclassObjectCreation{
publicObjectCreation(){//创建类的构造方法
System.out.println("创建OC类的对象");}publicstaticvoidmain(String[]args){
ObjectCreationobj=newObjectCreation();
}}当用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。7.2.8对象的创建和使用【例7-9】为创建的Obje74publicclassmyapp{inti=47;publicvoidcall(){System.out.println("i的值为"+i);
}publicstaticvoidmain(String[]args){myappt1=newmyapp();myappt2=newmyapp();t2.i=60;System.out.println("对象1:"
+t1.i);t1.call();System.out.println("对象2:"
+t2.i);t2.call();
}}对象1:47i的值为47对象2:60i的值为60publicclassmyapp{对象1:4775对象的销毁Java语言提供了垃圾回收机制,对于不再使用的对象会自动销毁,也可以在程序中显示的为某个对象赋值null值,使对象不再被使用。例如:whiteCar=null;垃圾回收器会找到并销毁它,释放该对象所占用的资源。对象的销毁Java语言提供了垃圾回收机制,对于不再使用的对象767.2.9this关键字的用途在普通方法或者构造方法中,this表示当前对象的引用,即普通方法或者构造方法被调用的对象。使用this就可以在普通方法和构造方法中使用当前对象的任何成员变量。this关键字有两种用途:1)使用this来引用成员变量如果参数与成员变量重名,则会覆盖成员变量,此时可以使用this来引用成员变量进行区分。7.2.9this关键字的用途在普通方法或者构造方法中,777.2.9this关键字的用途【例7-11】在项目中创建Book类,在构造方法中初始化其状态。publicclassBook{privateStringtitle;//定义字符串保存书名
privateStringpress;//定义字符串保存出版社
…
publicBook(Stringtitle,Stringpress,…){this.title=title;this.press=press;…}}7.2.9this关键字的用途【例7-11】在项目中创787.2.9this关键字的用途2)使用this来引用构造方法如果类中定义了多个构造方法,可以使用this来进行简化。7.2.9this关键字的用途2)使用this来引用构造797.2.9this关键字的用途publicclassBook{…//定义成员变量
publicBook(){
this(null,null,null,0);//使用this调用另一构造方法
}publicBook(Stringtitle,Stringpress,…){this.title=title;this.press=press;…}}【例7-12】在项目中创建Book类,定义多个构造方法来初始化其状态。7.2.9this关键字的用途publicclass807.2.10static关键字的用途前面的章节介绍了如何创建成员变量和成员方法。它们都需要先创建对象才能够使用。对于不同的对象,成员变量可以具有不同的状态,而且彼此不会受到影响。如果需要直接使用成员变量和成员方法而不创建对象,则可以使用static关键字。它表明被修饰的成员是属于这个类的,而不是某个特定的对象。由static修饰的变量、常量和方法被称作静态变量、常量和方法。7.2.10static关键字的用途前面的章节介绍了如何817.2.10static关键字的用途1)静态成员变量static关键字应放在变量类型前。在类的内部使用static变量时直接使用变量名即可。在类的外部使用static变量可以使用“类名.静态变量名”的方式。注意:虽然静态成员也可以使用“对象.静态成员”的形式进行调用,但这样的形式通常不被鼓励使用因为这样容易混淆静态成员和非静态成员。7.2.10static关键字的用途1)静态成员变量注827.2.10static关键字的用途静态成员变量的初始化:静态变量只被初始化一次。在声明的同时赋予相应的初始值。利用静态初始化块对静态成员变量进行初始化。静态成员变量不能在构造方法中初始化。因为构造方法只有在对象时才被调用,而静态变量在没有创建对象之前就已经存在,并且可以被引用。7.2.10static关键字的用途静态成员变量的初始化837.2.10static关键字的用途【例7-13】在项目中创建StaticVariable类,定义一个静态变量来保存该类被实例化次数。public
classStaticVariable{
private
static
int
count;
publicStaticVariable(){count++;}public
static
voidmain(String[]args){StaticVariablesv1=newStaticVariable();StaticVariablesv2=newStaticVariable();StaticVariablesv3=newStaticVariable();System.out.println(count);}}7.2.10static关键字的用途【例7-13】在项847.2.10static关键字的用途2)静态成员方法静态成员方法主要是用来操作静态成员变量static关键字应放在返回值类型前。在类的内部调用static方法时直接使用方法名即可。在类的外部调用static方法可以使用“类名.静态方法名()”的方式。7.2.10static关键字的用途2)静态成员方法857.2.10static关键字的用途在Java语言中对静态方法有以下两点规定。在静态方法中不可以使用this关键字在静态方法中不可以直接调用非静态方法注意:在Java中规定不能将方法体内的局部变量声明为static的。也不能在静态上下文和静态代码块中使用this关键字。7.2.10static关键字的用途在Java语言中对静867.2.10static关键字的用途【例7-14】在项目中创建StaticMethods类,定义一个静态方法来计算给定数字的平方数。public
classStaticMethods{
private
static
doublepower(doublenumber){
returnnumber*number;}
public
static
voidmain(String[]args){System.out.println(power(10.5));
}}7.2.10static关键字的用途【例7-14】在项87publicclassmyapp{staticinti=47;publicvoidcall(){System.out.println("i的值为"+i);
}publicstaticvoidmain(String[]args){myappt1=newmyapp();myappt2=newmyapp();t2.i=60;System.out.println("对象1:"
+t1.i);t1.call();System.out.println("对象2:"
+t2.i);t2.call();System.out.println("静态对象i:"+myapp.i);
}}对象1:60i的值为60对象2:60i的值为60静态对象i:60publicclassmyapp{对象1:60887.2.11final关键字的用途final关键字的含义是不可变,可以用来修饰类、成员变量和成员方法。如果修饰类,则表示该类不能够被继承。如果修饰成员变量,则表示该变量一旦被赋值之后就不能修改。如果修饰成员方法,则表示该方法不能够被子类重写。final关键字的一个常见用法是与static关键字组合来创建常量,例如:publicstaticfinalPI=3.1415926;
7.2.11final关键字的用途final关键字的含义897.2.11final关键字的用途【例7-15】创建FinalTest类,在main()方法中将final类型的成员变量进行赋值。publicclassFinalTest{
privatefinalintnumber=2;
//声明final修饰的成员变量
publicstaticvoidmain(String[]args){
newFinalTest().number=5;
//对成员变量进行赋值
}}7.2.11final关键字的用途【例7-15】创建F907.2.12包的定义与使用包是Java中管理源代码文件的方式。在前面内容中,编写的Java文件都使用了默认的包空间。随着文件个数不断的增加,肯定增加了文件命名的难度,也不便于文件的管理。通过使用包,可以具有如下优势:1)便于区分哪些类是相关的2)在不同的包中,可以存在相同名称的类3)可以使用包来控制访问权限7.2.12包的定义与使用包是Java中管理源代码文件的917.2.12包的定义与使用声明包的语法如下:packagecom.mingrisoft;注意:使用package声明包时,该语句必须放在源代码的第一行。前面可以存在注释代码,但是不能有类定义等代码。7.2.12包的定义与使用声明包的语法如下:927.2.12包的定义与使用除了java.lang包中的类,其他的工具类需要导入其所在的包才能够使用。有2种导入类的方式:1)使用import语句导入需要使用的类importjava.util.Date;2)在使用工具类的地方进行导入java.util.Datedate=newjava.util.Date();7.2.12包的定义与使用除了java.lang包中的类937.2.12包的定义与使用如果需要使用一个包中的多个类,可以使用*来进行整体导入,例如:importjava.util.*;这样就可以使用java.util包中的任何类了。注意:使用*仅能导入包中的类,不能导入包的子包中的类。读者可以将其理解为导入一个文件夹中的文件,但不包括这个文件夹的子文件夹中的文件。7.2.12包的定义与使用如果需要使用一个包中的多个类,947.3注释7.3.1预定义注释7.3.2自定义注释7.3注释7.3.1预定义注释957.3.1预定义注释常用的预定义注解包括@Deprecated、@Override和@SuppressWarnings三种。@Deprecated注解用于标示弃用的类或者方法等,它们应该不再使用。@Override注解通常用于修饰重写的方法,如果开发人员并没有遵守重写的规则,则会给出提示。@SuppressWarnings注解用于压制警告信息,例如没有指明泛型的类型。7.3.1预定义注释常用的预定义注解包括@Depreca967.3.2自定义注释在进行项目开发时,通常在类的开始部分统一增加注解信息。这些信息包括代码的作者、文件创建时间、最后修改时间和版本信息等。如果使用注解,可以对它们进行统一定义。说明:在定义注解时,需要使用大括号包含注解的内容。在使用注解时,需要使用小括号来包含注解的内容。7.3.2自定义注释在进行项目开发时,通常在类的开始部分97补充:包装类Integer类Integer类在对象中包装了一个基本类型int的值。设计的初衷是为了在基本类型int和引用类型之间建立一座桥梁。补充:包装类Integer类Integer类在对象中包装了一98补充:包装类Integer类方法名作用toBinaryString(inti)返回指定数字i的二进制表示形式toOctalString(inti)返回指定数字i的八进制表示形式parseInt(Strings)返回包含在由str指定的字符串中的数字的等价整数值intValue()以int型返回此Integer对象valueOf(Stringstr)返回保存指定的String的值Integer对象t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度大货车司机职业安全培训合同样本2篇
- 2024柚子果实分拣、包装与仓储物流合同3篇
- 2025年厂房电气设备安装与绿色建筑认证服务合同3篇
- 2024简化版反担保金融抵押协议指导本版B版
- 《性分化异常》课件
- 2025年度促销员突发事件应对合同3篇
- 敦煌学探秘知到智慧树章节测试课后答案2024年秋西安电子科技大学
- 艺术馆文化协理员招聘协议
- 环保项目工程师劳动合同书
- 药品仓库租赁合同:药品存储
- 2025年中国AI AGENT(人工智能体)行业市场动态分析、发展方向及投资前景分析报告
- 家居建材行业绿色材料应用及节能设计方
- 大庆市2025届高三年级第二次教学质量检测(二模)政治试卷(含答案)
- 2025年内蒙古阿拉善额济纳旗事业单位引进48人历年高频重点提升(共500题)附带答案详解
- 2025-2030年中国电动三轮车市场发展现状及前景趋势分析报告
- 【9化期末】合肥市庐阳区2023-2024学年九年级上学期期末化学试题
- 雅礼中学2024-2025学年初三创新人才选拔数学试题及答案
- 下属企业考核报告范文
- 采购合同评审表-模板
- 期末试卷(试题)-2024-2025学年沪教版三年级上册数学
- 句子成分及句子基本结构(共32张PPT)
评论
0/150
提交评论