java中特殊的类

时间:2022-01-09 19:55:36

l 特殊的类

实名内部类

        将一个类的定义置于另一个类中,这个类就是内部类。

   内部类需要遵循以下准则:

(1) 内部类的类名只用于定义它的类或语句块之内,在外部引用它是必须给出带有外部类名的完整名称。

(2) 内部类的名字不允许与外部类的名字相同。

(3) 内部类可以是抽象类或接口,若是接口,则可以由其他内部类实现。

内部类包含实名内部类(含有显式的类名)和匿名内部类。

实名内部类格式:

类修饰词表 class 类名 extends 父类名 implements 接口名列表{

     类体;

}

实名内部类的访问控制方式相比一般的类增加了protectedprivate这两个权限。实名内部类的修饰词可以使用static,通过static修饰的实名内部类为静态实名内部类,创建静态实名内部类的实例对象格式如下:

new.外部类名.实名内部类名(构造方法调用参数列表)

没有static修饰的内部类称为不具有静态属性的实名内部类,它的成员变量若有静态属性,则必须同时具有final属性,但成员方法不能有静态属性,创建不具有静态属性的实名内部类的实例对象如下:

 外部类实例对象.new 实名内部类名(构造方法调用参数列表)

访问实名内部类的静态属性成员和非静态成员的方式也是有区别的:

访问静态成员:外部类名.实名内部类名.静态成员名

访问非静态成员:实名内部类 实例对象.成员

内部类可以拥有和外部类同名的成员,外部类可以通过实例化内部类得到其对象,并能使用内部类的成员,内部类能直接在外部类的方法中定义。

当内部类成员变量与外部类同名时,调用内部类的成员变量可以使用this关键字,调用外部类同名成员变量可采用外部类名.this的方式。

匿名内部类

   其主要特征是:1.不具有类名 2.类不具有抽象和静态属性也不能派生出子类

格式:new 父类名(父类型的构造函数的调用参数列表){

          类体;

      }

内部类的作用:

(1) 进一步实现多重继承

(2) 能更好地解决接口和父类中方法的同名冲突

(3) 隐藏程序实现细节

类的访问控制方式一般只有public和默认权限,但内部类有privateprotected权限,所以能通过内部类来隐藏程序实现细节。

(4) 能够无条件访问外部类的成员

即使该成员是私有访问控制方式,对内部类也是没有任何影响的。

l 泛型类

泛型本质是参数化类型,也就是所操作的数据类型被指定为一个参数,当这种参数类型用在类中时,该类就被称为泛型类。泛型类的格式如下:

[类修饰词列表] class 类名<类型参数列表> [ex tends 父类名][implements 接口名称列表]{

       类体;

}

类型参数定义方式:

(1) 类型变量标识符

该类型参数的定义等价于一类型参数变量标识符extends objectobject类是Java中自带包中包含,该类很特殊,处于Java继承层次中最顶端,它封装了Java所有类的公共行为,Java语言默认它是每个Java类的直接或间接父类。

(2) 类型变量标识符extends父类型

该方式表明所定义的类型变量是其父类型的子类型,使泛型变量能直接使用继承自父类的方法。

(3) 类型变量标识符extends 父类型1 & 父类型2 &…&父类型n

Java加入房型技术的原因:泛型技术提供了编译时期数据类型的检查功能,即在编译时期强制使用正确的数据类型,可以提前预知错误的发生,增加代码安全性,尤其在大型程序中,泛型技术能提高程序代码的复用性,减少数据的类型转换,以提高代码的运行效率。

l Class

Java运行时系统一直对所有的对象进行运行时类型标识,这项信息

记录了每个对象所属的类,Java虚拟机通常使用运行时类型信息选准正

确方法去执行,用来保存这些类型信息的类是class类。

 Class类无公共构造方法,class对象是在加载类时由JAVA虚拟机以及通

过调用类加载器中的defineclass方法自动构造的,因此不能显示地声明一个class对象。

虚拟机为每种类型管理一个独一无二的class对象,即每一个类都有一个class对象,运行程序时,虚拟机首先检查所要加载的类对应的class对象是否已加载,如果没有, JVM就会根据类名查找class文件,并将其class对象载入,一旦某个类型的class对象已被加载到内存,就可以用它来产生该类型的所有对象。

获取class实例的三种方式:

(1) 利用对象调用getclass()方法获取该对象的class实例

(2) 使用class类的静态方法forName(),用类的名字获取一个class实例。

(3) 运用对象.class方式来获取class实例,对于基本数据类型的封装类,还可以用.TYPE来获取相对应的基本数据类型的class实例。

反射技术

  反射技术就是把Java类中的各种成分映射成相应的Java类,例如:一个Java类中用一个class类的对象来表示,表示Java类中组成的部分(成员变量,方法,构造函数,包等信息)也用一个个的Java类来表示,表示Java类的class类显然要提供一系列方法来获取其中的成员变量,方法,构造函数,包等信息,这些信息通过相应类的实例对象来得到,用到的实例对象包括fieldmethodcontructorpackage等。

通过反射技术,一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用class类的方法可以得到这些实例化对象,在实际编程中,通过class类的反射技术,能较好的提高程序的灵活性和复用性。