版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章Java面向对象程序设计(一)第4章Java面向对象程序设计(一)学习导读本章着重介绍Java编程中类和对象等非常重要的概念。Java程序是由一个个类定义组成的,编写Java程序的过程就是从现实世界中抽象出Java可实现的类并用合适的语句定义它们的过程,这个定义过程包括对类内各种属性和方法的定义,创建类的对象,也包括类间的各种关系和接口的定义。方法是类的主要组成部分。在一个类中,程序的作用体现在方法中。方法是Java语言的基本构件。利用方法可以组成结构良好的程序。本章介绍方法的构成规则和设计、使用方法的基本要点。学习导读本章着重介绍Java编程中类和对象等非常重要的概念。2课程结构4.1.面向对象的基本概念4.2类4.3方法4.4访问控制符4.5静态修饰符、静态字段和方法4.6抽象类与抽象方法4.7最终类、最终属性、最终方法与终结器课程结构4.1.面向对象的基本概念34.1面对对象的基本概念1抽象1.什么是抽象抽象就是抽出事物的本质特性而暂时不考虑它们的细节。过程抽象和数据抽象是常用的两种主要抽象手段。
4.1面对对象的基本概念1抽象44.1面对对象的基本概念2.如何用面向对象的方法实现抽象一个抽象数据类型(AbstractDataType,ADT)可以分解成4个部分,如图4-2所示。语法和语义构成抽象数据类型ADT的说明,让使用者了解这个抽象数据类型的特征。属性和方法构成ADT的实现,展示这个ADT是怎样做成的图4-2抽象数据类型
4.1面对对象的基本概念2.如何用面向对象的方法实现抽象图54.1面对对象的基本概念2封装将信息隐蔽的过程称为封装。有两方面的原因促使我们控制对成员的访问。第一个原因是防止程序员接触他们不该接触的东西——通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响4.1面对对象的基本概念2封装64.1面对对象的基本概念3对象可将对象想象对象(object)应是实际问题域中有意义的个体或概念实体。此外,对象应该具有记忆自身状态的能力。同时对象应该以某种方式与系统发生关联,既对象应该与系统中其他有意义的对象进行消息传递,并提供外部服务。4.1面对对象的基本概念3对象74.1面对对象的基本概念3对象(1)所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。(2)程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。(3)每个对象都有自己的存储空间,可容纳其他对象。(4)每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。(5)同一类所有对象都能接收相同的消息4.1面对对象的基本概念3对象84.2类类是现实世界某些对象的共同特征(属性和操作)的表示,对象是类的实例。类的属性:就是类的静态属性的简称,指类内包含的各项数据,如变量或其他类的对象;类的服务:则被称为成员函数或方法。4.2类类是现实世界某些对象的共同特征(属性和操作)的94.2类类的基本定义方法如下:[修饰符]class类名[extends父类][implements接口名]{类成员变量声明类方法声明类的修饰符用来说明类的特殊性质。分为三种:访问控制符:public公共类,抽象类说明符:abstract最终类说明符:final接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是Java语言用来实现多重继承的一种特殊机制,我们将在后面详细介绍它的使用方法。4.2类类的基本定义方法如下:类的修饰104.2类class关键字,在它的后面,应跟随新数据类型的名称。(注意不要把class写成Class)。父类名跟在extends
关键字后面,用来说明当前类是哪个已经存在类的子类,存在继承关系。继承是类与类之间的一种非常重要的关系。4.2类class关键字,在它的后面,114.2类“public”(公共)——一个类定义为公共类,表示它能被其他所有的类访问和引用,类作为整体被其他类看到,并可以在其他任意对象中将它实例化。
“缺省”——一个类被定义为友好的,表示只能被同一包中的类访问和引用,而不可以被其他包中的类访问或引用,即使用import引入也不行。
4.2类“public”(公共)——一个类定义为公共124.2类接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是Java语言用来实现多重继承的一种特殊机制,我们将在后面详细介绍它的使用方法。4.2类接口名跟在implements关键字后面,用来134.2类关于类体类体的定义要包括类的具体内容,包括类的属性与方法。class<classname>{<memberFielddeclarations><memberMethoddeclarations>}4.2类关于类体144.2类类的属性Java中声明类属性为简单变量的语法如下:[修饰符]变量类型变量名[=变量初值];
变量类型和变量名是声明一个变量必不可少的部分;变量的类型是简单数据类型,如int、double等。4.2类类的属性Java中声明类属性为简单变量的语法如154.2类类的属性Java中声明类属性为对象或复杂变量的语法如下:[修饰符]类名对象名=new类名(参数列表);
在声明对象和复杂变量是可以不在声明是用new创建,可以在以后的构造函数中创建。4.2类类的属性Java中声明类属性为对象或复杂变量的164.2类类的方法类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。Java中声明方法的语法如下:[修饰符]返回值类型方法名(参数列表)throws例外名1,例外名2,…{方法体:局部变量声明;语句序列;}
类的方法,又称为成员函数,用来规定类属性上的操作,实现类的内部功能的机制,同时也是类与外界进行交互的重要窗口。4.2类类的方法Java中声明方法的语法如下:类的方174.2类Java语言中定义的方法有两类:一类是需要程序书写专门的调用命令来调用的方法,称为程序调用方法,例如isPfime();
另一类是运行过程中系统自动调用的方法,称为系统方法,例如我们前面程序中的action()、paint()、init()等。这两类方法的定义和使用原则有很大差异。注意:系统调用方法的最大特点:不需要在程序里书写专门的调用方法的命令4.2类Java语言中定义的方法有两类:注意:系统调用184.2类2用户程序自定义类Java程序员把注意力放在创建称为类的用户自定义类型(user-definedtype)上,类也称为程序员定义的类型(programmer-definedtype),每个类都含有数据和一组操作数据的方法,类中的数据部分称为实例变量。用户定义类型(即类)的实例称为对象。下面是一个简单化的Employee类,在编写今后的职工工资系统时,会用到它。4.2类2用户程序自定义类194.2类classEmployee{//构造函数publicEmployee(Stringn,doubles,intyear,intmonth,intday){name=n;//职工姓名salary=s;//职工工资hireDay=newDate(year,month-1,day);//出勤数}//方法1publicStringgetName(){returnname;}//更多的方法
……//属性的实例Stringname;doublesalary;DatehireDay;}4.2类classEmployee204.2类3创建类及类的实例对象对象是类的一个实例,类是同种对象的抽象,是创建对象的模板。在程序中创建—个对象将在内存中开辟一块空间,其中包括该对象的属性和方法。我们将分步讲述这个类的实现细节。创建对象使用关键字运算符new,例如下面的语句将创建Employee的对象Employeeemp=newEmployee;Employeeemp=newEmployee(“张三”,75000,1987,12,15);4.2类3创建类及类的实例对象214.2类在程序中我们构造了三个Employee对象,并将它们初始化。
staff0=newEmployee("张三",75000,1987,12,15);
staff1=newEmployee("李四",50000,1989,10,1);
staff2=newEmployee("王五",40000,1990,3,15);创建对象以某个类为模板,这个类里定义了哪些属性和方法,新建的对象就必然在内存里拥有相应的属性和方法。可见,相对于简单数据类型,类就是用户自己定义的复杂的抽象数据类型:而相对于简单变量,对象就是复杂的既包括数据又包括方法代码的复杂数据单位。4.2类在程序中我们构造了三个Employee对象,并224.2类4构造函数1).构造函数的一般概念要使用对象,首先必须构造它们,并指定它们的初始状态,然后将方法应用于对象。在Java程序设计语言中,使用构造函数(constructor)来构造新的实例。一个构造函数是一个新的方法,它的作用是构造并初始化对象。构造函数是类的一种特殊方法,它的特殊性主要体现在如下的几个方面:(1)构造函数的方法名与类名相同。(2)构造函数没有返回类型。(3)构造函数的主要作用是完成对类对象的初始化工作。(4)构造函数不能由编程人员显式地直接调用。(5)在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。4.2类4构造函数234.2类2)创建自己的构造函数构造函数的名字和类的名字是相同的。当构造Employee类的对象时,此构造函数被启动,实例字段赋初值,在Java中,定义和初始化是统一的——两者缺一不可。例如,用下面的代码创建Employee类的一个实例时,newEmployee(“JamesBond”,100000,1950,1,1);构造函数的特点有:(1)构造函数和类具有相同的名字。(2)一个类可以有多个构造函数。(3)构造函数可以有0个、1个或多个参数。(4)构造函数没有返回值。(5)构造函数总是和new运算符一起被调用。4.2类2)创建自己的构造函数244.2类3)构造函数的作用(1)对象初始化(2)引入更多的灵活度(变量赋值或更复杂的操作)(3)Java中可以不定义构造函数Java中可以不定义构造函数,此时系统会自动为该系统生成一个默认的构造函数。这个构造函数的名字与类名相同,它没有任何形式参数,也不完成任何操作。例见书p614.2类3)构造函数的作用254.3方法1方法概述Java程序是由一个个类定义组成的,类有两个部分:属性和方法。属性描述类是什么,方法描述类做什么。任何对象都有独立的内存存储它的属性。类的所有的对象共享存贮在内存的方法。换言之:方法是类的主要组成部分。在一个类中,程序的作用体现在方法中。方法即是JAVA创建一个有名字的子程序。一个主方法和若干个子方法构成。主方法调用其他方法,其他方法间也可互相调用,同一个方法可被一个或多个方法调用任意次。
4.3方法1方法概述264.3方法Java程序的基本结构如下:引入Java类库;定义用户类1{
定义类1的若干变量或对象:定义类1的方法1;定义类1的方法2;…定义类1的方法M1;}定义用户类2{定义类2的若干变量或对象:定义类2的方法1;定义类2的方法2;…定义类2的方法M2}4.3方法Java程序的基本结构如下:274.3方法Java语言的方法实现子任务处理时,有下面几个原则与规律:(1)算法中需要细化的步骤、程序中重复的代码以及重载父类方法都可以定义成类的方法。(2)界面清晰。(3)大小适中。(4)方法有两种:一种是标准方法,JavaAPI提供了丰富的类和方法,这些方法提供了程序员所需的许多功能。另一种是用户自定义的方法,以解决用户专门需要。(5)Java应用程序中,程序的执行从main类开始,调用其他方法后又回到main类,在main类中结束整个程序的运行。4.3方法Java语言的方法实现子任务处理时,有下面几284.3方法2定义方法1).声明方法头2).声明方法体Java中声明方法的语法如下:[修饰符]返回值类型方法名(参数列表)throws例外名1,例外名2,…{方法体:局部变量声明;语句序列;}
类的方法,又称为成员函数,用来规定类属性上的操作,实现类的内部功能的机制,同时也是类与外界进行交互的重要窗口。4.3方法2定义方法Java中声明方法的语法如下:294.3方法1.声明方法头方法头一般由方法名、参数列表、返回类型、方法修饰符和方法抛出的例外五部分组成(1)方法名可以是任何有效的标识符,命名规则与标识符命名规则相同。(2)类型说明符用来指定方法返回值的类型,方法最多只能返回一个值。(3)参数列表是方法的输入接口,它列出了一系列形式参数的类型和名称,在方法参数表的右括号后加一个分号是语法错误。参数表以逗号为分隔符,其中包含了方法被调用时传递给方法的参数说明。对于方法定义中的每一个参数,方法调用时必须有一个参量与之对应,而且该参量的类型必须与对应参数类型相一致。4.3方法1.声明方法头304.3方法方法头定义了方法的性质,方法体则定义了方法的具体内容。方法体通常起到两种作用,一是围绕类的属性进行各种操作;二是与其他的类与对象进行数据交流、消息传递等操作。在一个方法中定义另一个方法将产生语法错误。(1)最好避免局部变量“屏蔽”实例变量,在一个类中不使用同名标识符就可以做到这一点;方法调用中参数用来传递数值、传递引用,同时方法还可以嵌套、递归调用。(2)方法体中如果指定了非void的返回值类型,方法中就必须包含一条return语句保证任何情况下都有返回数值,return语句后面不能跟任何表达式;4.3方法方法头定义了方法的性质,方法体则定义了方法的314.3方法例如下面的语句为部门类Department定义了若干方法:ClassDepartment{intm_DeptNo;//部门编号
Stringm_DeptName;//部门名称
intm_DeptTotalEmp;//部门雇员数
ManagerEmployeem_DeptMgr;//部门主管
intgetDeptNo()//获取当前对象的部门号{return_DeptNo;}//返回这个对象的部门号4.3方法例如下面的语句为部门类Department定324.3方法3方法的调用1).系统调用方法2).程序调用方法Java语言中调用方法有两类:一类是需要程序书写专门的调用命令来调用的方法,称为程序调用方法,例如isPfime();
另一类是运行过程中系统自动调用的方法,称为系统方法,例如我们前面程序中的action()、paint()、init()等。这两类方法的定义和使用原则有很大差异。注意:系统调用方法的最大特点:不需要在程序里书写专门的调用方法的命令4.3方法3方法的调用注意:系统调用方法的最大特点334.3方法在类中调用类自身的方法,可以直接使用这个方法的名称;调用其他对象或类的方法,则需要使用该对象或类为前缀。例如在isSameDept()方法中,语句
if(getDeptNo()==d.getDeptNo())中通过getDeptNo()调用当前对象自身的方法并获得当前对象的部门号,通过d.getDeptNo()调用形式参数d的方法获得d的部门编号。这里的形式参数d也是一个Depamnent类的对象。4.3方法在类中调用类自身的方法,可以直接使用这个方法344.3方法实例booleansetDeptNo(intNewNo)//把当前部门号重新设置称参数值{
if(NewNo>0)//若给出的新部门号合法{
m_DeptNo=NewNo;//修改类属性m_DeptNoreturntrue;//返回true,声明部门编号修改成功}
elsereturnfalse;//若形式参数给出新部门号非法,返回false}4.3方法实例354.4访问控制符Java推出了“访问控制修饰符”的概念,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的。这种访问控制的级别在“最大访问”和“最小访问”的范围之间,分别包括:public,“默认”(无关键字),protected以及private。下面的列表说明访问控制修饰符含义:
类的访问控制修饰符(一种符号)
public公共访问属性与方法的访问控制修饰符(四种符号)
符号publicprotectedprivateprotectedprivate
含义公共访问保护访问私有保护访问私有访问
4.4访问控制符Java推出了“访问控制修饰符364.4访问控制符1公共访问控制符public用于类:Java中类的访问控制符只有一个:public,即公共的。一个类被声明为公共类,表明它可以被所有的其他类所访问和引用,这里的访问和引用是指这个类作为整体是可见和可使用的,程序的其他部分可以创建这个类的对象、访问这个类内部可见的成员变量和调用它的可见的方法。
一个类作为整体对程序的其他部分可见,并不能代表类内的所有属性和方法也同时对程序的其他部分可见,前者只是后者的必要条件,类的属性和方法能否为所有其他类所访问,还要看这些属性和方法自己的访问控制符。
4.4访问控制符1公共访问控制符public374.4访问控制符用于类内属性:用public修饰的类内属性称为公共属性,若这个类是公共类则它可以被所有的其他类访问4.4访问控制符用于类内属性:384.4访问控制符2缺省访问控制符用于类假如一个类没有访问控制符,说明它具有缺省的访问控制特性。这种缺省的访问控制权规定该类只能被同一个包中的类访问和引用,而不可以被其他包中的类使用,这种访问特性称为包访问性。通过声明类的访问控制符可以使整个程序结构清晰、严谨,减少可能产生类间干扰和错误。用于类属性类内的属性和方法如果没有访问控制符号来限定,也说明它们具有包访问性
4.4访问控制符2缺省访问控制符394.4访问控制符3私有访问控制符private用private修饰的属性或方法只能被该类自身所访问和修改,而不能被任何其他类,包括该类的子类,来获取和引用1).私有数据例如有三个实例字段,它们含有在Employee类的实例内部被操作的数据。privatestringname;privatedoublesalary;privateDatehireDay;private(私有的)关键字用来确保可以访问这些实例字段的只能是Employee类本身的方法4.4访问控制符3私有访问控制符private404.4访问控制符2).私有方法在实现类时,我们使所有的数据字段都是私有的,因为公开的数据是危险的。对于方法又是什么情况呢
?虽然大多数方法是公开的,但是私有方法也经常使用。这些方法只能被同一个分离的方法。
总起来说,在下面的情况下可以选择私有方法:(1)与类的使用者无关的那些方法。(2)如果类的实现改变了,不容易维护的那些方法。
4.4访问控制符2).私有方法414.4访问控制符4保护访问控制符protected用protected修饰的成员变量可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类。使用protected修饰符的主要作用是允许其他包中的它的子类来访问父类的特定属性。protected关键字为我们引入了一种名为“继承”的概念,它以现有的类为基础,并在其中加入新的成员,同时不会对现有的类产生影响——我们将这种现有的类称为“基础类”或者“基本类”(BaseClass)。亦可改变那个类现有成员的行为。对于从一个现有类的继承,我们说自己的新类“扩展”(extends)了那个现有的类。4.4访问控制符4保护访问控制符protected424.4访问控制符5私有保护访问控制符privateprotectedprivate和protected按顺序连用构成一个完整的访问控制符:私有保护访问控制符。用pnvateprotected修饰的成员变量可以被两种类访问和引用,一种是该类本身,一种是该类的所有子类,不论这些子类是与该类在同一个包里,还是处于其他的包中。相对于protected,privateprotected修饰符把同一包内的非子类排除在可访问的范围之外,使得成员变量更专有于具有明确继承关系的类,而不是松散地组合在一起的包。4.4访问控制符5私有保护访问控制符private434.4访问控制符4.4访问控制符444.4访问控制符上图中可访问类成员的区域类public却省属性与方法publicABprotectedB+CB却省BBprivateprotectedC+DE+DprivateDD4.4访问控制符上图中可访问类成员的区域类public454.5静态修饰符、静态属性和方法1静态修饰符static称为静态修饰符,它可以修饰类中的属性和方法。使用static(静态)关键字,可满足两方面的要求:(1)一种情形是只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象;被static修饰的属性称为静态属性,这类属性一个最本质的特点是:它们是类的属性,而不属于任何一个类的具体对象。换句话说,对于该类的任何一个具体对象而言,静态属性是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值,同样任何一个类的对象去修改它时,也都是在对同一个内存单元做操作。4.5静态修饰符、静态属性和方法1静态修饰符464.5静态修饰符、静态属性和方法(2)另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能用类直接调用的方法。static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法。
4.5静态修饰符、静态属性和方法(2)另一种情形是我们需要一474.5静态修饰符、静态属性和方法2静态常量静态变量是很少见的。然而,静态常量却很普遍。例如,Math类中定义了一个静态常量:publicclassMath{……publicstaticfinaldoublePI=3.1.4159265358979323846;……}4.5静态修饰符、静态属性和方法2静态常量484.5静态修饰符、静态属性和方法3静态方法
声明一个方法为static至少有三重含义:(1)使用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名;(2)static的方法是属于某个对象的方法,在这个对象创建时对象的方法在内存中拥有自己专用的代码段;而static的方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有;(3)由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量。[例]书p75static示例4.5静态修饰符、静态属性和方法3静态方法494.5静态修饰符、静态属性和方法5main方法main方法并不对任何对象施加操作。实际上,当程序开始执行时,还不存在任何对象。静态方法被执行,并构造程序所需的对象。提示每个类都可以有一个main方法。这是对类进行单元测试的一个很方便技巧。4.5静态修饰符、静态属性和方法5main方法504.6抽象类与抽象方法abstract是抽象修饰符,可以用来修饰类或方法。1抽象类当一个类被声明为abstract时,这个类被称为是抽象类。所谓抽象类就是没有具体实例对象的类。针对这个问题,Java专门提供了一种机制,名为“抽象方法”。它属于一种不完整的方法,只含有一个声明,没有方法主体。下面是抽象方法声明时采用的语法:abstractvoidX();4.6抽象类与抽象方法abstract是抽象修饰符,可以用来514.6抽象类与抽象方法2抽象方法
作为类方法修饰符,abstract则声明了一种仅有方法头,而没有具体的方法体和操作实现的抽象方法。可见,abstract方法只有方法头的声明,而用一个分号来代替方法体的定义:至于方法体的具体实现,那是由当前类的不同子类在它们各自的类定义中完成的。4.6抽象类与抽象方法2抽象方法524.6抽象类与抽象方法
需要特别注意的是,所有的抽象方法,都必须存在于抽象类之中。除了抽象方法,抽象类也可以有具体的数据和方法。
在Java编程语言中抽象方法是非常重要的概念。在接口里你会大量的用到它。
例:书p69abstract示例4.6抽象类与抽象方法需要特别注意的是,所有的抽象534.7最终类、最终属性、最终方法与终结器final是最终修饰符,它可以修饰类、属性和方法。另外终结器的关键字与final很相近,一并介绍1最终类如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。被定义成final的类,通常是一些有特殊作用的、用来完成标准功能的类,将一个类定义为final则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能是准确无误的4.7最终类、最终属性、最终方法与终结器final是最终修饰544.7最终类、最终属性、最终方法与终结器2最终属性许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。常数主要应用于下述两个方面:(1)编译期常数,它永远不会改变;(2)在运行期初始化的一个值,我们不希望它发生变化。可以把一个实例字段定义为final(不能改变的)。在对象被构造时,这种字段必须被初始化。即,必须保证在每一个构造函数结束之前其值已被设定。以后字段的值不能改变4.7最终类、最终属性、最终方法与终结器2最终属性554.7最终类、最终属性、最终方法与终结器3最终方法之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。采用final方法的第二个理由是程序执行的效率
编译器不再采用方法执行机制而采用常规的代码插入方法,从而提高执行效率(方法代码量少时)4.7最终类、最终属性、最终方法与终结器3最终方法564.7最终类、最终属性、最终方法与终结器4终结器终结器的作用是回收对象时执行的方法。类似与构造函数是创建对象时执行的方法一样。例protectedvoidfinalize(){System.out.println(““);}4.7最终类、最终属性、最终方法与终结器4终结器57finalize()和gc()(1)问题:finalize()函数是干嘛的?Java不是有GarbageCollection(以下简称gc)来负责回收内存吗?回答:gc只能清除在堆上分配的内存(纯java语言的所有对象都在堆上使用new分配内存),而不能清除栈上分配的内存(当使用JNI技术时,可能会在栈上分配内存,例如java调用c程序,而该c程序使用malloc分配内存时).因此,如果某些对象被分配了栈上的内存区域,那gc就管不着了,对这样的对象进行内存回收就要靠finalize().举个例子来说,当java调用非java方法时(这种方法可能是c或是c++的),在非java代码内部也许调用了c的malloc()函数来分配内存,而且除非调用那个了free()否则不会释放内存(因为free()是c的函数),这个时候要进行释放内存的工作,gc是不起作用的,因而需要在finalize()内部的一个固有方法调用它(free()).finalize的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作.(2)问题:finalize()在什么时候被调用?回答:有三种情况1.所有对象被GarbageCollection时自动调用,比如运行System.gc()的时候.2.程序退出时为每个对象调用一次finalize方法。3.显式的调用finalize方法除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因.finalize()和gc()584.8其他修饰符volatile
如果一个属性被volatile修饰,说明这个属性可以同时被几个线程所控制和修改。synchronized
主要用于线程同步(用于方法和代码段)native
表示该方法不是用java语言写成的,是用C,C++等语言写的)4.8其他修饰符volatile594.9包4.9.1包用途Java允许把多个类收集在一起成为一组,称作包(package)。包便于组织任务,以及使自己的任务和其他人提供的代码库相分离。标准Java库被分类成许多的包,其中包括java.1ang、java.util和等等。标准Java包是分层次的。就像在硬盘上嵌套有各级子目录一样,可以通过层次嵌套组织包。所有的Java包都在Java和Javax包层次内。4.9包4.9.1包用途Java允许把多个类604.9.2创建包已经看到,已有的库,比如JavaAPI中的类和接口,可以导入到Java程序中。JavaAPI中的每一个类和接口属于一个特定的包。它包含一组相关联的类和接口,实际是对类和接口进行组织的目录结构。例如,假定文件名是MyClass.java。它意味着在那个文件有一个、而且只能有一个public类。而且那个类的名字必须是MyClass(包括大小写形式):packagemypackage;publicclassMyClass{……}
{……}4.9.2创建包已经看到,已有的库,比如JavaAPI614.9.2创建包创建可复用的类的步骤简要说明如下:(1)定义一个public类。如果类不是public,它只能被同一包中的其他类使用。(2)选择一个包名,并把package语句加到可复用的类的源代码文件中。(3)编译这个类。这样,它就被放到适当的包目录结构中,以供编译器和解译器使用。(4)把这个可复用的类导入到需要用它的程序中。现在就可以使用它了。注意在Java语言中可以出现在类定义的括号外面的仅有两个语句,它们是package和import。
{……}4.9.2创建包创建可复用的类的步骤简要说明如下:624.9.2包引用---每个类名前加上完整的包名例如,给出一个指向此包中的类的快捷方式。一旦使用import(导入)了以后,就不再需要给出完整的包名。可以引入一个特定的类,也可以引入整个包。import语句要放在源文件的头部(但在所有package语句的下面)。例如,可以通过下面的语句引入在java.util包中的所有的类:importjava.util.*;然后,就可以使用Datetoday=newDate();而不需要在前面加上包名。也可以引入包中某个特定的类:importjava.util.Date;4.9.2包引用---每个类名前加上完整的包名例如,给出634.9.2包引用---向包中添加类要把类放入一个包中,必须把此包的名字放在源文件头部,并且放在对包中的类进行定义的代码之前。例如,在文件Employee.java的开始部分如下:packagecom.horstmann.corejava;publicclassEmployee{……}把包中的文件放入与此完整的包名相匹配的子目录中。例如,在包com.horstmann.corejava中的所有的类文件都必须放在子目录com/horstmann/core.java(Windows下的com\horstmann\corejava)下。这是最简单的一种方法,在本章的后面可以看到更多的选项。
4.9.2包引用---向包中添加类要把类放入一个包中,必644.9.3包引用--定位类类被存储在文件系统的子目录中。类的路径必须与所在包名相匹配。在前面的例子中,包目录com/horstmann/corejava是程序目录的一个子目录。然而这样安排很不灵活。一般,有多个程序需要访问包文件。为了使包可以在多个程序间共享,需要做以下事情:1)把类放在一个或多个特定的目录中,比如/home/user/classdir。此目录是包树的基本目录。如果加入了类com.horstmann.corejava.Employee,那么此类文件必须位于子目录/home/user/classdir/com/horstmann/corejava下。2)设置类路径。类路径是其子目录包含类文件的所有基本目录的集合。
4.9.3包引用--定位类类被存储在文件系统的子目录中。654.9.3包引用--标记包作用域已经接触过public和private访问指示符。被标记为Public的部件可以被任何类使用,而私有部件只能被定义它们的类使用。如果没有指定public或private,那么部件(即类、方法或变量)可以被同一个包中的所有方法访问。4.9.3包引用--标记包作用域已经接触过public和664.9.4JavaAPI包为了简化面向对象的编程过程,Java系统事先设计并实现了一些体现了常用功能的标准类,如用于输入/输出的类,用于数学运算的类,用于图形用户界面设计的类,用于网络处理的类等。这些系统标准类根据实现的功能不同,可以划分成不同的集合,每个集合是一个包,合称为类库。可以引用这些包,也可以创建自己的包。Java的类库是系统提供的已实现的标准类的集合,是Java编程的API,它可以帮助开发者方便、快捷地开发Java程序。4.9.4JavaAPI包为了简化面向对象的67Java程序使用包中类的方式遇到import语句就搜索classpath指定的子目录以便找到合适和.class文件包经常以压缩文件的方式存在(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 舞蹈艺术之魅力
- 人事部在企业战略中的角色计划
- 感恩父母与爱同行的演讲稿5篇
- 2024年员工三级安全培训考试题(满分必刷)
- 2023-2024年项目安全培训考试题带答案(夺分金卷)
- 社团运营与成员发展
- 《本科心律失常》课件
- 教授能量转换守恒
- 北师大版八年级下册数学期末测试题
- 印刷设备智能化升级-第1篇-洞察分析
- 2024-2025学年七年级上学期历史观点及论述题总结(统编版)
- 2024年市特殊教育学校工作总结范文(2篇)
- 【MOOC】创新思维与创业实验-东南大学 中国大学慕课MOOC答案
- 青岛大学《英语综合》2023-2024学年第一学期期末试卷
- 课题1 金属材料 教学设计 九年级化学下册人教版2024
- EPC工程总承包实施方案
- 新人模特经纪合同范例
- 电动车自燃应急预案
- 语法辨析-中考语文真题题源解密(辽宁版)(带答案)
- 山西省晋中市2023-2024学年高一上学期期末考试 化学 含解析
- 2024-2030年中国电子驻车制动器(EPB)行业发展现状及前景趋势研究报告
评论
0/150
提交评论