一、内部类
内部类一般有以下几种:非静态成员内部类、局部内部类、静态成员内部类、匿名内部类。
1、非静态成员内部类:
public class Outer{
int i ;
.......
class Inner{ // 非静态成员内部类
}}
该内部类可以访问外部类的所有成员,包括private成员;如果外部类和内部类定义的属性同名,可以通过“外部类名.this.属性名”的形式访问。
该内部类实例化的途径有以下几种形式:
(1)通过外部类的非静态方法实例化内部类。 如,Inner in = new Inner();
(2)通过外部类的main方法实例化内部类。如Outer out = new Outer(); Outer.Inner in=out.new Inner();
即要通过外部类的引用实例化内部类对象;
(3)在内部类通过this来表示内部类的实例。
2、局部内部类
public class Outer{
private String name;
.......
public void display(){
class Inner{
//局部内部类}
}}
该内部类可以直接访问外部类的成员属性,在该内部类中如果要访问包含其方法的局部变量,则此变量必须是final的,由于该内部类中保存有外部类的引用outer.this,所以不能定义静态属性
3、静态内部类
public class Outer{
int i ;
.......
static class Inner{ // 静态成员内部类
static String name="LI";
int age;
.......
}}
这种内部类就相当于外部类,在其内部可申明静态或非静态成员。但静态内部类只能访问外部类的静态变量或方法。静态内部类可直接实例化:Outer.Inner in=new Outer.Inner();
4、匿名内部类多用于Swing事件处理
二、泛型(Generics) 详见http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
三、Java Annotation(注解)
java.lang包中定义了三个基本注解:
1、@Override 重写父类方法
2、@Dprecated 表示已过时方法或成员
3、@SuppressWarnings 抑制编译器警告
自定义注解: publci @interface MyAnnotation{
String value() default "L";//定义一个属性
}
注解的注解(meta-annotation):
1、@Target 注解应用的目标 @Target(ElmeetType.Method)
2、@Retention 指示编译器如何对待自定义注解,有三种方式;
(1)编译器处理完后,不保留注解到编译后的类文件RententionPolicy.SOURCE
(2)将注解保留在编译后的类文件,但在运行时忽略RententionPolicy.CLASS
(3)将注解保留在编译后的类文件,并在第一次加载类时读取RententionPolicy.RUNTIME
3、@Documented 使用javadoc生产文档时是否忽略注解
4、@Inherited 父类注解是否被子类注解所继承