收藏 分享(赏)

java 第4章.ppt

上传人:dzzj200808 文档编号:3660585 上传时间:2018-11-15 格式:PPT 页数:99 大小:484.50KB
下载 相关 举报
java 第4章.ppt_第1页
第1页 / 共99页
java 第4章.ppt_第2页
第2页 / 共99页
java 第4章.ppt_第3页
第3页 / 共99页
java 第4章.ppt_第4页
第4页 / 共99页
java 第4章.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

1、第章 类、对象和接口,4.1 编程语言的几个发展阶段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字 4.6 包 4.7 访问权限 4.8 类的继承 4.9 对象的上转型对象 4.10 多态性,4.11 abstract 类和abstract方法 4.12 super关键字 4.13 接口 4.14 内部类 4.15 匿名类 4.16 异常类 4.17 Class类 4.18 基本类型的类包装 4.19 反编译和文档生成器 4.20 jar文件,Java同其他面向对象的编程语言一样,也支持面向对象(OPP)的三个特征 封装 继承 多态,4.1 类与对象,面向对

2、象的编程思想力图使在计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致,类和对象是面向对象方法的核心概念。 类是对某一类事物的描述 ,是抽象的、概念上的定义。 对象是实际存在的该类事物的个体,因而也称为实例。,以下图为例,其中汽车设计图就是“类”,由这个图纸设计出来的若干的汽车就是按照该类产生的“对象”。,其中一辆汽车被改变了,是不会影响到同型号的其他汽车的,但如果设计图纸改变了,以后出厂的所有汽车都会改变的。,4.2 类,类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。 类的实现包括两部分:类声明和类体。,1.类声明,class Peopl

3、e “class People”叫做类声明;“People” 是类名。习惯上类名的第一个字母大写,但这不是必须的。,2.类体,写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“”,“”以及它们之间的内容称做类体,大括号之间的内容称做类体的内容。 类体的内容由两部分构:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。,class 梯形 float 上底,下底,高,laderArea; /变量定义部分float 计算面积() /方法定义 laderArea=(上底+下底)*高/2.0f;return laderArea; void 修

4、改高(float h) /方法定义 高=h; ,3.成员变量和局部变量,我们已经知道类体分为两部分。变量定义部分所定义的变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。 成员变量在整个类内都有效,局部变量只在定义它的方法内有效。 成员变量又分为实例成员变量(简称实例变量)和类变量(也称静态变量) .如果成员变量的类型前面加上关键字static,这样的成员变量称做是类变量或静态变量。 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效 . 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成员变量,

5、必须使用关键字this。,class 三角形 float sideA,sideB,sideC,lengthSum;static int x;void setSide(float sideA,float sideB,float sideC) this.sideA=sideA; this.sideB=sideB; this.sideC=sideC;int test() int a,b; this.sideA,this.sideB,this.sideC就分别表示成员变量sideA,sideB,sideC,4.方法,我们已经知道一个类的类体由两部分组成:变量的定义和方法的定义。方法的定义包括两部分:方

6、法声明和方法体。 方法参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效。如果局部变量的定义是在一个复合语句中,那么该局部变量的有效范围是该复合语句,即仅在该复合语句中有效,如果局部变量的定义是在一个循环语句中,那么该局部变量的有效范围是该循环语句,即仅在该循环语句中有效 . 写一个方法和C语言中写一个函数类似,只不过在这里称做方法,5.方法重载,方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。,class Area float getArea(float r) return 3.14f*r*r;

7、double getArea(float x,int y) return x*y;float getArea(int x,float y) return x*y;double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; ,6.构造方法,构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,而且没有类型,构造方法也可以重载。,class 梯形 float 上底,下底,高;梯形() 上底=60;下底=100;高=20;梯形(float x,int y,float h) 上底=x;下底=y;高=h;,7.类方法和实例

8、方法,类中的方法也可分为实例方法和类方法. 方法声明时,方法类型前面不加关键字static的是实例方法、加关键字static的是类方法。 构造方法是特殊的方法,不能用static修饰构造方法。,4.3 对象,类是创建对象的模板。当使用一个类创建了一个对象时,我们也说我们给出了这个类的一个实例。,1.创建对象,创建一个对象包括对象的声明和为对象分配内存两个步骤。(1)对象的声明。 一般格式为:类的名字 对象名字; 如: People zhangPing;,(2)为声明的对象分配内存 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法

9、是无参数的,你一定还记得构造方法的名字必须和类名相同这一规定)。如:zhangPing=new People();,(3)对象的内存模型 使用例子1来说明对象的内存模型 class XiyoujiRenwu float height,weight;String head, ear,hand,foot, mouth;void speak(String s) System.out.println(s); class A public static void main(String args) XiyoujiRenwu zhubajie; /声明对象zhubajie=new XiyoujiRenwu

10、(); /为对象分配内存,/使用new 运 算 符和默认的构造方法 ,声明对象时的内存模型,当用XiyoujiRenwu类声明一个变量,即对象zhubajie时,如例子1中的对象zhubajie:XiyoujiRenwu zhubajie;内存模型如右图所示,对象分配内存后的内存模型,当系统见到: zhubajie=new XiyoujiRenwu(); 时,就会做两件事: 为height,weight,head,ear,mouth,hand,foot各个变量分配内存,即XiyoujiRenwu类的成员变量被分配内存空间,然后执行构造方法中的语句。 new运算符在为变量height,weigh

11、t,head,ear,mouth,hand,foot分配内存后,将返回一个引用给对象变量zhubajie。,2.使用对象,对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。 当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。,例4_3,例4_4,3.对象的引用和实体,当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。 一个类创建的两个对象,如果具有相同的引用,那么就具

12、有完全相同的实体。 没有实体的对象称作空对象,空对象不能使用,即不能让一个空对象去调用方法产生行为。,每个创建的对象都是有自己的生命周期的,对象只能在其有效的生命周期内被使用,当没有引用变量指向某个对象时,这个对象就会变成垃圾,不能再被使用。 对象变成垃圾主要有三种情况,如下:,第一种情况的程序代码: XiyoujiRenwu zhubajie=new XiyoujiRenwu(); 程序执行完这个代码块后,产生的XiyoujiRenwu对象就会变成垃圾,因为这个对象的引用zhubajie已超过其作用域。,第二种情况的程序代码: XiuyoujiRenwu zhubajie=new Xiyou

13、jiRenwu(); zhubajie=null; 在执行完zhubajie=null;后,即使引用还没有超过其作用域,任然有效,但它已经被赋值为空,也就是说zhubajie不再指向任何对象,这个XiuyoujiRenwu对象变成了垃圾。,第三种情况代码: XiuyoujiRenwu zhubajie=new XiuyoujiRenWu(); XiuyoujiRenwu sunwukong=zhubaijie; zhubaijie=null; 执行完zhubajie=null;后,产生的XiuyoujiRenwu对象不会变成垃圾,因为这个对象仍被sunwukong所引用,直到sunwukong

14、超出其作用域而无效,产生的XiuyoujiRenwu对象才会变成垃圾。,例4-5,它显示了一个使用 Employee类的程序代码。,在这个程序中,构造了一个Employee数组,并填入三个雇员对象: Employee staff = new Employee3;,接下来,利用Employee类的raiseSalary方法将每个雇员的薪水提高5%: for (Employee e : staff)e.raiseSalary(5);,最后,调用getName方法、getSalary方法和getHireDay方法将每个雇员的信息打印出来: for (Employee e : staff)System

15、.out.println(“name=“ + e.getName() + “,salary=“ + e.getSalary() + “,hireDay=“ + e.getHireDay();,解析Employee类,通过查看源代码,我们发现Employee类包含一个构造方法和4个方法。 public Employee(String n, double s, int year, int month, int day) public String getName() public double getSalary() public Date getHireDay() public void rai

16、seSalary(double byPercent),这个类的所有方法都被标记为public。关键字public意味着任何类的任何方法都可以调用这些方法(共4种访问级别,将在本章稍后介绍) 接下来,需要注意在Employee类的三个成员变量都是用private关键字修饰的。private String name;private double salary;private Date hireDay;,关键字private确保只有Employee类自身的方法能够访问这些成员变量,而其他类的方法不能够读写这些变量。,注释:可以用public标记成员变量,但这是一种极为不提倡的做法。public允许程

17、序中的任何方法对其进行读取和修改,这就完全破坏了封装。,最后,请注意,有两个成员变量本身就是对象:name是String类对象,hireDay是Date类对象。,从构造方法开始,下面先看看Employee类的构造方法: public Employee(String n, double s, int year, int month, int day)name = n;salary = s;GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);hireDay = calendar.getTime();,构造

18、方法与类同名。在构造Employee类对象时,构造方法被运行,以便将成员变量初始化为所希望的状态。 例如,当使用下面这条代码创建Employee类实例时: new Employee(“James“, 7500, 1987, 1, 1); 将会把成员变量设置为:name=“James“; salary=7500;hireDay=January1,1987;,构造方法与其他的方法有一个重要的不同,构造方法总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造方法来达到重新设置成员变量的目的。 例如:new Employee(“James“, 10000, 1985, 3, 6);

19、/ERROR 将产生编译错误。,如果在构造方法中没有显式的给成员变量赋予初值,那么就会被自动的赋为默认值:数值为0、布尔值为flase、对象引用为null。 所谓默认构造方法是指没有参数的构造方法。例如,Employee类的默认构造方法:public Employee() name=“;salary=0;hireDay=new Date();,如果在编写一个类时没有编写构造方法,那么系统就会提供一个默认构造方法。这个默认构造方法将所有的成员变量设置为默认值。,如果类中提供了至少一个构造方法,但是没有提供默认的构造方法,则在构造对象时如果没有提供构造参数就会被视为不合法。例如,例4-5中的Emp

20、loyee类提供了一个简单的构造方法:Employee(String n, double s, int year, int month, int day) 对于这个类,构造默认的雇员属于不合法。也就是,调用e=new Employee();将会产生错误。,警告:请记住,仅当类没有提供任何构造方法的时候,系统才会提供一个默认的构造方法,如果在编写类的时候,给出了一个构造方法,哪怕是很简单的,要想让这个类的用户能够用下面的方式构造实例:new ClassName()就必须提供一个默认的构造方法(即不带参数的构造方法)。当然,如果希望所有的成员变量都被赋予默认值,就可以采用下列格式: public

21、ClassName() ,有关构造方法需要记住的: 构造方法与类同名 每个类可以有一个以上的构造方法 构造方法可以有0个、1个或1个以上的参数 构造方法没有返回值 构造方法总是伴随着new操作一起调用。 不要在构造方法中定义与成员变量重名的局部变量,4.4 static 关键字,用static修饰的成员变量称为类变量 用static修饰的方法称为类方法,类变量,用static修饰的成员变量称为类变量 ,每个类中只有一个这样的变量。而每一个对象对于所有的类变量都有自己的一份拷贝。 类变量属于类,而不属于任何独立的对象。,例如:class Employee private int id; priv

22、ate static nextId=1; 每一个雇员对象都有一个自己的id域,但这个类的所有对象将共享一个nextId。换句话说,如果有1000个Employee类的对象,则由1000个实例变量id,但是只有一个类变量nextId。即使没有一个雇员对象,类变量nextId也存在。,类方法,类方法是一种不能向对象实施操作的方法。例如,Math类的pow方法就是一个类方法。表达式Math.pow(x,a)计算Xa。在运算时,不使用任何Math对象。 因为类方法不能操作对象,所以不能在类方法中访问实例变量。但是类方法可以访问自身类中的类变量。,例如: public static int getNex

23、tId() return nextId; /return static field 可以通过类名调用这个方法: int n=Employee.getNextId 这个方法可以省略关键字static吗?,使用类方法的两种方法: 一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(例如:Math.pow)。 一个方法只需要访问类的类变量。,main方法,为什么要用static修饰main()?,前面说过,不需要构造Math类对象就可以调用Math.pow。也就是说,不需要使用对象调用类方法。main方法是一个静态方法,main方法不对任何对象进行操作。事实上,在启动程序时还没有任何一个对象

24、。static修饰的main方法将执行并创建程序所需要的对象。,4.5 this 关键字,this是Java的一个关键字,表示某个对象。 this可以出现在实例方法和构造方法中,但不可以出现在类方法中。 this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。 this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。,4.6 包,包是Java语言中有效地管理类的一个机制。,1.包语句,通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为:package 包名;如果源程序中省

25、略了package语句,源文件中你定义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该包没有名字。 包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成 。,. import 语句,使用import 语句可以引入包中的类。 在编写源文件时,除了自己编写类外,我们经常需要使用Java提供的许多类,这些类可能在不同的包中。 在学习Java语言时,使用已经存在的类,避免一切从头做起,这是面向对象编程的一个重要方面。,4.7访问权限,类创建了一个对象之后,该对象可以通过“.”运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的方法是有一定限制

26、的。 所谓访问权限是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法。 访问限制修饰符有private、protected和public,都是Java的关键字,用来修饰成员变量或方法。,1.私有变量和私有方法,一个类在另外一个类中创建一个对象后,该对象不能访问自己的私有变量和私有方法 对于一个类的私有类变量(静态成员变量),那么在另外一个类中,也不能通过类名来操作这个私有类变量。,.共有变量和共有方法,一个类在另外一个类中创建一个对象后,该对象能访问自己的public变量和public方法 对于一个类的public类变量(静态成员变量),那么在另外一个类中,也能通过

27、类名来操作这个public类变量。,3.友好变量和友好方法,不用private、public 、protected修饰符的成员变量和方法被称为友好变量和友好方法。 一个类在另外一个类中创建一个对象后,如果两个类在同一包中,该对象能访问自己的友好变量和友好方法 对于一个类的友好类变量(静态成员变量),如果两个类在同一包中,那么在另外一个类中,也能通过类名来操作这个友好类变量。,.受保护的成员变量和方法,一个类在另外一个类中创建一个对象后,如果两个类在同一包中,该对象能访问自己的protected变量和protected方法 对于一个类的protected类变量(静态成员变量),如果两个类在同一包

28、中,那么在另外一个类中,也能通过类名来操作这个protected类变量。 在后面学习类的继承时,将讲述protected和“友好”之间在继承方面的区别。,4.8类的继承,继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。Java不支持多重继承(子类只能有一个父类)。,1.子类,在类的声明中,通过使用关键字extends来创建一个类的子类,关键字extends表示继承。格式如下: class 子类名 exte

29、nds 父类名 例如: class Manager extends Employee 添加方法和成员变量 ,关键字extends表明正在构建的新类派生于一个已经存在的类。已存在的类被称为超类或父类;新类被称为子类或派生类。 尽管Employee类是一个父类,但不是因为他位于子类之上或者拥有比子类更多的功能,恰恰相反,子类比父类拥有的功能更加丰富。,2.子类的继承性,类有可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明定义的,另一部分是从它的父类继承的。 所谓子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法

30、操作. 所谓子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法调用。,子类和父类在同一包中的继承性,如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量(方法)作为自己的成员变量(方法), 继承的成员或方法的访问权限保持不变。,子类和父类不在同一包中的继承性,如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量(方法)做为子类的成员变量(方法), 继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。,在Manage

31、r类中,增加一个用于存储奖金信息的成员变量,以及一个用于设置这个成员变量的方法。,class Manager extends Employee private double bonus;public void setBonus(double b)bonus=b; ,如果有一个Manager对象,就可以使用setBonus方法。,Manager boss=; boss.setBonus(5000);,当然,由于setBonus方法不是在Employee类定义的,所以属于Employee类的对象不能使用它。父类的方法不能调用子类的方法。,然而,尽管在Manager类中没有显示的定义getName和

32、getHireDay等方法,但属于Manager类的对象却可以使用它们,这是因为Manager类自动的继承了父类Employee中的这些方法。 同样,从父类中还继承了name、salary和hireDay这三个成员变量。这样一来,每个Manager类对象就包含了4个成员变量:name、salary、hireDay和bonus。,在通过扩展父类定义子类时,仅需要指出子类与父类的不同之处。因此在设计类的时候,应该将通用的方法放在父类中,而将具有特殊用途的方法放在子类中。 然而,在父类中有些方法对子类并不一定适用。例如,在Manager类中的getSalary方法应该返回薪水和奖金的总和。这时应如何

33、做?,为此,需要提供一个新的方法来覆盖父类中的这个方法:,class Manager extends Employee public double getsalary() ,应该如何实现这个方法呢?,下面两种方式,是否正确?,public double getSalary() return salary+bonus; ,public double getSalary() double baseSalary=getSalary();return baseSalary+bonus; ,方法一:,方法二:,double baseSalary=super.getSalary,super:super只是

34、一个指示编译器调用父类方法的特有关键字。 在子类中可以增加成员变量、增加方法或覆盖父类的方法,然而绝对不能删除继承的任何成员变量和方法。,3.成员变量的隐藏和方法的重写,子类也可以隐藏继承的成员变量,对于子类可以从父类继承的成员变量,只要子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量 . 子类通过方法的重写可以隐藏继承的方法 ,方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同。 对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用子类重写的方法,如果子类继承了父类的方法(未重写),那么子类创建的对象

35、也可以调用这个方法,只不过方法产生的行为和父类的相同而已.,super关键字,我们来看下super关键字在构造方法中的应用:,public Manager(String n,double s,int year,int month,int day) super(n,s,year,month,day);bonus=0; ,在这里关键字super具有不同的含义。语句super(n,s,year,month,day); 是调用父类Employee中含有n,s,year,month和day参数的构造方法。,由于Manager类的构造方法不能访问Employee类的私有成员变量,所以必须利用Employe

36、e类的构造方法对这部分私有成员变量进行初始化,我们可以通过super实现对超类构造方法的调用。 使用super调用构造方法的语句必须是子类构造方法的第一条语句。,如果子类的构造方法没有显式的调用父类的构造方法,则将自动的调用父类默认(没有参数)的构造方法。 如果父类没有不带参数的构造方法,并且在子类的构造方法中又没有显式的调用父类的其他构造方法,则java编译器将报告错误。 例46:ManagerTest.java,继承的层次,继承不仅限于一个层次。(如下图所示),在继承层次中,从某个特定的类到其祖宗的路径称为该类的继承链。,4. final关键字,final关键子可以修饰类、成员变量和方法中

37、的参数。 final类不能被继承,即不能有子类。 如果一个方法被修饰为final方法,则这个方法不能被重写。 如果一个成员变量被修饰为final的,就是常量,常量必须赋给初值,而且不能再发生变化。 如果方法的参数被修饰为final的,该参数的值不能被改变。,4.9对象的上转型对象,假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时:A a;B b=new B();a=b; 称这个A类对象:a,是子类对象b的上转型对象. 对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原子类对象的一些属性和功能。,上转对象不能操作子类新增的成员变量(失掉了这

38、部分属性);不能使用子类新增的方法(失掉了一些功能)。 上转型对象可以操作子类继承或隐藏成员变量,也可以使用子类继承的或重写的方法。 上转型对象操作子类继承或重写的方法时,就是通知对应的子类对象去调用这些方法。因此,如果子类重写了父类的某个方法后,对象的上转型对象调用这个方法时,一定是调用了这个重写的方法。 可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有属性和功能。,4.10 多态性,多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为 . 当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。那么当我们把子类创建的对象的引用放到一个父类

39、的对象中时,就得到了该对象的一个上转型对象,那么这个上转的对象在调用这个方法时就可能具有多种形态.,4.11abstract 类和abstract方法,用关键字abstract修饰的类称为abstract类(抽象类)。 abstract class A ,abstract类有如下特点,和普通的类相比,abstract类可以有abstract方法。对于abstract方法,只允许声明,不允许实现,而且不允许使用final修饰abstract方法。 abstract class A abstract int min(int x,int y);int max(int x,int y) return

40、xy?x:y; ,abstract类不能用new运算创建对象 对于abstract类,我们不能使用new运算符创建该类的对象,需产生其子类,由子类创建对象,如果一个类是abstract类的子类,它必须具体实现父类的abstract方法,这就是为什么不允许使用final修饰abstract方法的原因。 一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现,抽象类中的抽象方法可以强制子类必须给出这些方法的具体实现。,4.13接口,Java不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Jav

41、a使用了接口,一个类可以实现多个接口。,1.接口的声明与使用,使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。 接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾。如: interface Printable final int MAX=100;void add();float sum(float x ,float y); ,接口的使用,一个类通过使用关键字implements 声明自己使用一个或多个接口。如果使用多个接口,用逗号隔开接口名。如: class A im

42、plements Printable,Addable 如果一个类使用了某个接口,那么这个类必须实现该接口的所有方法,即为这些方法提供方法体 .,2.理解接口,接口的思想在于它可以增加很多类都需要实现的功能,使用相同的接口类不一定有继承关系. 同一个类也可以实现多个接口。接口只关心功能,并不关心功能的具体实现.,3.接口回调,接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法 .,4.接口做参数,一个方法的参数是接口类型,就可以将任何实现该

43、接口的类的实例的引用传递给该接口参数,接口参数就可以回调类实现的接口方法。,4.14 内部类,Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类。 内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。,4.15 匿名类,和类有关的匿名类当使用类创建对象时,程序允许我们把类体与对象的创建组合在一起,也就是说,类创建对象时,除了构造方法还有类体,此类体被认为是该类的一个子类去掉类声明后的类体,称作匿名类。 和接口有关的匿名类 Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了接口的类去掉类声明后

44、的类体,称作匿名类 .,4.16 异常类,程序运行出现异常时,Java运行环境就用异常类Exception的相应子类创建一个异常对象,并等待处理,例如,读取一个不存在的文件时,运行环境就用异常类IOException创建一个对象,异常对象可以调用如下方法得到或输出有关异常的信息: public String getMessage() public void printStackTrace() public String toString(),使用trycatch语句来处理异常,将可能出现的异常操作放在trycatch语句的try部分,当try部分中的某个语句发生异常后,try部分将立刻结束执行

45、,而转向执行相应的catch部分;所以程序可以将发生异常后的处理放在 catch部分。trycatch语句可以由几个catch组成,分别处理发生的相应异常。,trycatch语句的格式如下: try包含可能发生异常的语句 catch(ExceptionSubClass1 e) catch(ExceptionSubClass2 e),4.17 Class类,Class是java.lang包中的类,该类的实例用来封装对象运行时的状态。当一个类被加载且创建对象时,和该类相关的一个类型为Calss的对象就会自动创建。Class类本身不提供构造方法,因此,不能使用new运算符和构造方法显示地创建一个Cl

46、ass对象。任何对象调用getClass()方法都可以获取和该对象相关的一个Class对象,这个Class对象调用如下的方法可以获取创建对象的类的有关信息.,使用Class实例化一个对象,创建对象最常用的方式就是使用new运算符和类的构造方法,实际上我们也可以使用Class对象得到一个类的实例。为了得到一个类的对象,可以先得到一个和该类相关的Class对象,做到这一点并不困难,只要使用Class的类方法 public static Class forName(String className) throws ClassNotFoundException 就可以返回一个和参数className指

47、定的类相关的Class对象。再让这个Class对象调用 public Object newInstance() throws InstantiationException,IllegalAccessException 方法就可以得到一个className类的对象。,4.18 基本类型的类包装,Java的基本数据类型包括:byte、int、short、long、float、double、char。Java同时也提供了基本数据类型相关的类,实现了对基本数据类型的封装。这些类在java.lang包中,分别是:Byte、Integer、Short、Long、Float、Double和Character

48、类。,1. Double和Float类,Double类和Float类实现了对double和float基本型数据的类包装。 可以使用Double类的构造方法:Double (double num) 创建一个Double类型的对象; 使用Float类的构造方法:Float (float num) 创建一个Float类型的对象。 Double对象调用doubleValue()方法可以返回该对象含有的double型数据; Float对象调用floatValue()方法可以返回该对象含有的float型数据。,2. Byte、Integer、Short、Long类,下述构造方法分别可以创建Byte、Int

49、eger、Short和Long类型的对象: Byte(byte num) Integer(int num) Short(short num) Long(long num)Byte、Integer、Short和Long对象分别调用byteValue ()、intValue()、shortValue ()和longValue ()方法可以返回该对象含有的基本型数据。,3. Character类,Character类实现了对char基本型数据的类包装。 可以使用Character类的构造方法: Character (char c) 创建一个Character类型的对象。 Character对象调用charValue()方法可以返回该对象含有的char型数据。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报