Java_5高级特征_第1页
Java_5高级特征_第2页
Java_5高级特征_第3页
Java_5高级特征_第4页
Java_5高级特征_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第五章第五章 Java 高级特征高级特征static关键字关键字 final 关键字关键字抽象类抽象类 Interface package 泛型泛型常用类常用类25.1 static关键字z成员变量可以分为实例变量和类变量。同样,类中的方法也可分为实例方法和类方法。用static关键字修饰的变量是类变量,也称静态变量,同样的,用static关键字修饰的方法是类方法,也称静态方法z目的:使该变量或方法独立于类的实例,使用类去访问,而不用类实例3类变量类变量(static)在该类在该类所有对象之间共享所有对象之间共享。在加载该类时,只分配。在加载该类时,只分配一次空间,并初始化。一次空间,并初始

2、化。例:例:class Employee static int com ;则运行时,则运行时,comcomcomcome1e2e34类变量可用来在实例之间进行通信或跟踪该类实例的数类变量可用来在实例之间进行通信或跟踪该类实例的数目。目。对于对于除除private 类型的类变量类型的类变量外外,可以在类外,可以在类外直接用类名直接用类名调用调用而不需要而不需要实例实例化化。class StaticVarpublic static int number ;class Otherclasspublic void method()int x = StaticVar.number ;类变量类变量5类类方

3、法方法(静态方法静态方法)静态方法在访问本类的成员时,只允许访问静态成员(即静态成员静态方法在访问本类的成员时,只允许访问静态成员(即静态成员 变量和静态方法),而不允许访问实例成员变量和实例方法;变量和静态方法),而不允许访问实例成员变量和实例方法;静态方法中没有静态方法中没有thisthis引用变量引用变量子类不能重写父类的静态方法子类不能重写父类的静态方法MainMain方法最终访问所在类的成员时,必须首先创建方法最终访问所在类的成员时,必须首先创建 相应的对象相应的对象可以直接通过类名调用,而不需要生成任何实例可以直接通过类名调用,而不需要生成任何实例class accessMembe

4、rprivate static int sa; /定义一个静态成员变量private int ia; /定义一个实例成员变量/下面定义一个静态方法static void statMethod()int i = 0; /正确,可以有自己的局部变量sa = 10; /正确,静态方法可以使用静态变量otherStat(); /正确,可以调用静态方法ia = 20; /错误,不能使用实例变量insMethod(); /错误,不能调用实例方法class GeneralFunctionpublic static int addUp(int x, int y)return x+y ;public calss

5、 UseGeneralpublic void method()int c = GeneralFunction.addUp(9,10);6静态方法-非静态方法z静态方法(static修饰)在类Test被实例化以前就已经存在于内存中z静态方法使所有该类的实例也就是对象共有的方法z一般的非静态方法只有在类被实例化以后,才被加载到内存中,具体存储在堆中,z非静态方法是每个该类的实例也就是对象所私有的7静态初始化程序静态初始化程序 不存在于任何方法体中的静态语句块。在加载该不存在于任何方法体中的静态语句块。在加载该类时类时执行且只执行一次执行且只执行一次。class StaticInitDemostat

6、ic int i=5; static System.out.println(Static code: i=+i+);public class test public static void main(String args)for(int j=0;j3;j+)System.out.println( Main code: i=+StaticInitDemo.i);Static code: i=5 Main code: i=6 Main code: i=6 Main code: i=68static关键字注意:z如果在声明时不用static关键字修饰,则默认声明为实例变量和实例方法。z每个对象的实

7、例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。z类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,z每个实例对象对类变量的改变都会影响到其它的实例对象。z类变量类方法可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问。95.2 final 关键字关键字final可用来修饰变量、方法和类。可用来修饰变量、方法和类。 final的属性或变量,即是一个常量。的属性或变量,即是一个常量。 final的方法不能被的方法不能被重写重写。 final的类不能被的类不能被继承继承。 J2SDK中提供有许多中提供有许多final类,例类,例String、

8、Math、Boolean等。(参看等。(参看API文档)文档) 如果自己的类不想被别人继承,可用如果自己的类不想被别人继承,可用final修饰。修饰。finalfinal的成员变量:只能被的成员变量:只能被初始化一次初始化一次(定义时或在构造(定义时或在构造方法中进行)方法中进行)finalfinal的局部变量:代表的是一个常量。方法体内任何位的局部变量:代表的是一个常量。方法体内任何位置都可以初始化,但置都可以初始化,但赋值一次赋值一次。101 1final final 修饰成员变量修饰成员变量final修饰变量,则成为常量,例如 final type variableName; 修饰成员变

9、量时,定义时同时给出初始值,而修饰局部变量时不做要求。 112 2final final 修饰成员方法修饰成员方法final修饰方法,则该方法不能被子类重写。final returnType methodName(paramList) 123 3final final 类类zfinal修饰类,则类不能被继承。如果一个类被final关键字修饰,说明这个类不能再被其他类所继承,该类被称为最终类。final class finalClassName 在默认情况下,所有的成员变量或成员方法都可以被隐藏或重写,如果父类的成员不希望被子类的成员所隐藏或重写则将其声明为final。13class ep3_1

10、2_a static final double pi = 3.1415926; / 声明静态常量 public final void f() / 声明最终方法System.out.println(pi= + pi); class ep3_12_b extends ep3_12_a int num = 100;private void f() System.out.println(num= + num);class testpublic static void main(String args) ep3_12_b One = new ep3_12_b();One.f();z 需要注意的是:需要注

11、意的是:y被被private声明为私有的方法,以及包含在声明为私有的方法,以及包含在final类中的方法都被默认为是类中的方法都被默认为是最终的。最终的。y用用static和和final两个关键字修饰变量时,若不给定初始值,则按照默认规两个关键字修饰变量时,若不给定初始值,则按照默认规则对变量初始化。若只用则对变量初始化。若只用final修饰而不用修饰而不用static,就必须且只能对该变量,就必须且只能对该变量赋值一次,不能默认。赋值一次,不能默认。 / 出错,不可覆盖父类的最终方法145.3抽象类抽象类用用abstract关键字修饰的类,即抽象类。关键字修饰的类,即抽象类。 作用:描述作用

12、:描述概念性概念性的内容,这样可以提高开发效率,更好地的内容,这样可以提高开发效率,更好地统一用户统一用户“接口接口”。语法格式:语法格式: 抽象类必须被继承,抽象方法必须被重写。抽象类必须被继承,抽象方法必须被重写。 抽象类不能被实例化;抽象类不能被实例化;抽象方法只需声明,无需实现。抽象方法只需声明,无需实现。 抽象类通常包括一个或多个抽象方法,但不是一定包括抽象类通常包括一个或多个抽象方法,但不是一定包括 若类中包含了抽象方法,则该类必须被定义为抽象类。若类中包含了抽象方法,则该类必须被定义为抽象类。abstract class 抽象类名抽象类名 abstract 返回类型返回类型 抽象

13、方法抽象方法(参数表参数表);155.3抽象类抽象类抽象类也可有普通的成员变量或方法。抽象类也可有普通的成员变量或方法。 可以生成抽象类的变量,该变量可以指向具体的一个可以生成抽象类的变量,该变量可以指向具体的一个子类的实例。子类的实例。abstract class Employeeabstract void raiseSalary(int i) ;class Manager extends Employeevoid raiseSalary(int i ) .Employee e = new Manager( ) ;Employee f = new Employee ( ) ;/错误错误165

14、.4 5.4 接口(接口(interfaceinterface)5.4.1 interface的含义的含义interface定义了一组行为的协议。定义了一组行为的协议。实现一个接口的类将具实现一个接口的类将具有规定的行为,对有规定的行为,对象之间通过这个协议进行通信。象之间通过这个协议进行通信。interface 不属于类层次结构。不相关的类可以实现相同不属于类层次结构。不相关的类可以实现相同的接口。的接口。175.4.2接口定义接口定义是是抽象方法和常量抽象方法和常量的定义的集合。的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类从本质上讲,接口是一种特殊的抽象类,这种抽象类中只中

15、只包含包含常量常量和和方法方法的声明的声明,而,而没有没有变量和方法的变量和方法的实现实现接口的定义格式:接口的定义格式:public interface 接口名接口名 extends 父接口名列表父接口名列表 type NAME = value; /该常量被实现该接口的多个类共享;该常量被实现该接口的多个类共享; /缺省的具有缺省的具有public, final, static的属性的属性 returntype methodName(paramlist); /缺省的具有缺省的具有 public和和abstract属性属性18计算机科学与技术系计算机科学与技术系l 特性:特性:l接口中声明的成

16、员变量默认为接口中声明的成员变量默认为public static final的,的,且也只能是且也只能是public static final的;的;l接口中只能定义为抽象方法,而且这些方法默认为接口中只能定义为抽象方法,而且这些方法默认为public的,且也只能为的,且也只能为public的的l接口可以继承其它接口,并添加新的属性和抽象方接口可以继承其它接口,并添加新的属性和抽象方法。法。l接口可以接口可以多继承多继承其它其它接口。接口。即一个接口可有多个父接口,用逗号隔开即一个接口可有多个父接口,用逗号隔开5.4.25.4.2接口定义接口定义19计算机科学与技术系计算机科学与技术系inte

17、rface avoid aa();interface bvoid bb();interface c extends a,bvoid cc();5.4.25.4.2接口定义接口定义20 用用implements表示一个类实现了某个接口。表示一个类实现了某个接口。 该类中必须实现接口中的该类中必须实现接口中的所有方法所有方法。例:例:interface SayHello void printMessage( ); class SayHelloImpl implements SayHellovoid printMessage( )System.out.println(“Hello”);5.4.3实现

18、接口实现接口215.4.4 5.4.4 多重继承多重继承可以通过实现接口实现多重继承:一个类可只继承可以通过实现接口实现多重继承:一个类可只继承一个父类,并实现多个接口。一个父类,并实现多个接口。interface I1 ;interface I2 ;class E . ;class M extends E implements I1,I2 说明:说明: extends子句必须放在子句必须放在 implements 子句之前225.4.45.4.4多重继承多重继承抽象或具体父类抽象或具体父类父类方法父类方法 interface_1 interface_2 interface_ninterfac

19、e_1interface_2interface_n子类子类235.4.55.4.5接口的使用接口的使用Interface可以作为一种数据类型使用。并且可可以作为一种数据类型使用。并且可以支持多态。以支持多态。Interface Human void showNameInNativeLanguage();class Chinese implements Humanvoid showNameInNativeLanguage() System.out.println(“Chinese”)class Japanese implements Human.Human e = new Chinese( );

20、 Human e = new Japanese( );e.showNameInNativeLanguage();245.4.65.4.6接口与抽象类接口与抽象类接口中的所有方法都是抽象的,而抽象类可以定义带有方接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法;法体的不同方法;一个类可以实现多个接口,但只能继承一个抽象父类;一个类可以实现多个接口,但只能继承一个抽象父类;接口与实现它的类不构成类的继承体系,不相关的类可以接口与实现它的类不构成类的继承体系,不相关的类可以实现相同的接口,而抽象类是属于一个类的继承体系,并实现相同的接口,而抽象类是属于一个类的继承体系,并且一般位于类

21、体系的顶层。且一般位于类体系的顶层。255.5.1 5.5.1 什么是包什么是包包包(package)是相关类与接口的一个集合,它提供是相关类与接口的一个集合,它提供访问控访问控制与命名空间管理制与命名空间管理。 Java平台中的类与接口都是根据功能以平台中的类与接口都是根据功能以包组织的。包组织的。包机制的好处:包机制的好处:程序员容易确定包中的类是相关的,并且容易根据所需的功能找到相应的类。每个包都创建一个新的命名空间,因此不同包中的类名不会冲突。同一个包中的类之间有比较宽松的访问控制。265.5.2 创建包创建包用用package语句指定源文件中的类属于一个特定包:语句指定源文件中的类属

22、于一个特定包: 说明:说明: 包定义语句在每个源程序中只能有一条包定义语句在每个源程序中只能有一条,即一个类只能属于一个包。,即一个类只能属于一个包。 包定义语句必须在程序的包定义语句必须在程序的第一行第一行(之前可有空格及注释)。(之前可有空格及注释)。多个包名用多个包名用“.” 分隔。分隔。如在程序第一行加上如在程序第一行加上package语句,则在当前文件夹下创建一个子文件语句,则在当前文件夹下创建一个子文件夹,夹,存放其存放其.class文件。文件。package的命名全都是小写的英文字母。的命名全都是小写的英文字母。如果如果package未指定,则所有的类被组合到一个未命名的缺省包中

23、,未指定,则所有的类被组合到一个未命名的缺省包中,不不能被其他包中的类使用能被其他包中的类使用package pkg1.pkg2.pkg3;275.5.2包成员的使用包成员的使用将将package 引入源程序,格式:引入源程序,格式:import 包名包名.*;import 包名包名. 类名;类名; 说明:说明: import 语句必须在源程序之前,在语句必须在源程序之前,在package 声明之后声明之后 package . /缺省是缺省是package . import . /缺省是缺省是import java.lang.* 类声明类声明 使用长名引用包成员使用长名引用包成员 包名包名.类

24、名类名28方法的访问控制方法的访问控制publicprotecteddefaultprivate同类同包子类通用性(不同包且非子类)不同情形下295.6.1泛型概念泛型概念类和方法的泛化类和方法的泛化泛型是泛型是Java SE 1.5的新特性,泛型的本质是参数化类的新特性,泛型的本质是参数化类型,也就是说所操作的型,也就是说所操作的数据类型被指定为一个参数数据类型被指定为一个参数。这。这种参数类型可以用在类、接口和方法的创建中,分别称种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。为泛型类、泛型接口、泛型方法。30z规则限制规则限制z1、泛型的类型参数只能是类类型

25、(包括自定义类),不能是简单类型。z2、泛型的类型参数可以有多个。z3、泛型的参数类型可以使用extends语句,例如。z4、泛型的参数类型还可以是通配符类型。例如Class classType = Class.forName(java.lang.String);315.6.2泛型的定义和使用泛型的定义和使用class MyBox private T t; public void add(T t) this.t = t; public T get() return t; public class MyBoxTestpublic static void main(String args)MyBo

26、x aBox;aBox = new MyBox(); aBox.add(new Integer(1000);Integer i = aBox.get(); System.out.println(The Integer is : +i); 注:注:T是类型参数,可以是除了基本类型之外的任意类型是类型参数,可以是除了基本类型之外的任意类型32z class Gen z private T ob; / 定义泛型成员变量 z public Gen(T ob) this.ob = ob; z public T getOb() return ob; z public void setOb(T ob) th

27、is.ob = ob; z public void showType() z System.out.println(T的实际类型是: + ob.getClass().getName();z z z public class test z public static void main(String args) / 定义泛型类Gen的一个Integer版本z Gen intOb = new Gen(88);z intOb.showType();z int i = intOb.getOb();z System.out.println(value= + i);z System.out.println

28、(-);z / 定义泛型类Gen的一个String版本z Gen strOb = new Gen(Hello Gen!);z strOb.showType();z String s = strOb.getOb();z System.out.println(value= + s);z 335.8包装类(包装类(Wrapper) Wrapper将基本类型表示成类。将基本类型表示成类。每个每个wrapper类对象都封装了基本类型的一个值。类对象都封装了基本类型的一个值。Primitive Data Type Wrapper ClassbooleanBooleanbyteBytecharCharact

29、ershortShortint IntegerlongLongfloatFloatdoubleDouble345.8.25.8.2自动装箱与拆箱自动装箱与拆箱l 装箱(装箱(Box):把基本类型的数据通过相应把基本类型的数据通过相应Wrapper类形类形成对象成对象l 拆箱(拆箱(Unbox):把一个):把一个Wrapper类对象中的基本数据类对象中的基本数据类型提取出来。类型提取出来。l 自动装箱与拆箱自动装箱与拆箱Integer i = 10;int j = i;355.9 Java5.9 Java常用类常用类 类库的结构类库的结构java.lang 语言基础类库(System、Math、

30、 Thread、基本数据类型类)java.util Java的工具类库(向量、栈、日期)java.io Java的标准输入输出类库java.applet 用于实现Java Applet小程序的类库java.awt 用于构建图形用户界面的类库java.awt.event 界面用户交互控制和事件响应类 库 Java的用于实现网络功能的类库 使用使用JDK Document查看类库查看类库365.9.2 5.9.2 字符串相关类字符串相关类StringString类类l Java语言将字符串作为对象处理,对应的类为语言将字符串作为对象处理,对应的类为java.lang.Stringl “*”是该类的

31、一个对象,即用是该类的一个对象,即用双引号双引号括住的一括住的一串字符,代表串字符,代表不可变的字符序列不可变的字符序列。l 例:例:l String通常用来产生字符串常量。通常用来产生字符串常量。Hello World! 375.9.2 5.9.2 字符串相关类字符串相关类StringString类类2. 用用String类产生字符串对象,有两种方式:类产生字符串对象,有两种方式: 例:例: 注意:使用这两种方式产生出来的字符串,它们在注意:使用这两种方式产生出来的字符串,它们在内存中存放的方式不一样。内存中存放的方式不一样。l调用调用String类的构造方法类的构造方法l使用双引号使用双引

32、号“ ”String str1 = new String(“Java”);String str2 = “Java”; 38l 比如比如:5.9.2 5.9.2 字符串相关类字符串相关类StringString类类String str1 = new String(“Java”);String str2 = new String(“Java”);str1str2stacknullnullheap“Java”0 x876543210 x12345678“Java”395.9.2 5.9.2 字符串相关类字符串相关类StringString类类String str3 = “Java”;String str4 = “Java”;stacknullnullstr3str4Data Seg“Java”0 x876543210 x87654321405.2 5.2 字符串相关类字符串相关类StringString类类l 字符串的比较字符串的比较l 例:例:l运算符运算符= /比较两个对象的内存地址比较两个对象的内存地址lbo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论