1、final修饰符

final定义变量必须进行初始化,并且一经定义不可修改,对于final类变量来说,进行初始化的地方,有以下

两处:

  1. static代码块中
  2. 定义时直接进行初始化操作

final成员变量进行初始化的地方有三处:


  1. 非static代码块中
  2. 构造函数中
  3. 定义时直接进行初始化操作

2、接口和内部类


  1. 接口是一种契约,用来规定类的实现方式,类应该按照接口给定的规则实现,继承了同一接口的任何类(抽象类除外)都必须实现其中定义的方法,在Java中类只支持单继承,但是可以实现多个接口,一个接口也可以继承其他的接口,这样就实现了java的多继承,对于给定的类,被继承的类以及集中起来实现的接口被称为超类型,从超类型来看,新类就是子类型,子类型的引用可以出现在任何超类型引用所出现的地方,简单来说就是任何父类能够出现的地方,子类能够替代的出现在那里,比如作为方法的参数时,常用父类的引用(最好传入参数的类型是接口类型)作为参数,而实际使用的时候,传入子类型的引用,从而实现多态的效果
  2. 接口中可以定义常量,方法,嵌套类和接口,接口中定义的方法隐式为abstract public 也不能有其他的例如native等修饰符,也不可能是static,因为静态方法不可能是抽象的,常量隐式的为public static final,标记接口是未定义任何内容的接口,例如Serializable接口等
  3. 在一个接口中可以定义另一个或多个接口,这种嵌套类型是允许的,对于类来说,嵌套类也是允许的,尽管不能够实例化一个接口,但是却可以声明一个接口类型变量,这个接口类型变量必须引用实现了接口的类对象,这也就是为什么在方法的参数中可以使用接口类型作为参数
  4. 尽量不要使用在接口中只定义常量,而没有方法的接口
  5. 接口和包含了抽象方法的抽象类很像,实现或者继承它们的类都必须实现其中定义的抽象方法,但是为什么还需要接口呢,全部用抽象类不行吗?因为java只支持但继承,一个类只能扩展一个类,如果想要扩展其他的类就不行了,而接口解决了这个问题,一个类可以实现多个接口,java使用接口来实现多继承的功能
  6. 定义在其他类内部的类称为内部类,在java中只有内部类可以是私有的,内部类可以使用private修饰符修饰。内部类可以访问到外部类的所有方法和属性包括私有的,并且内部类对于包中的其他类是隐藏的,静态内部类相当于扩展了命名空间,可以解决命名冲突的问题,但是却失去了普通内部类可以访问外部类成员变量和方法的功能,内部类使用外部类outer的变量或者方法可以这样做outerClassName.this.xxxx,创建内部类的实例可以通过这种方式:OuterCls outer=new Outer();OuterCls.inner inner=outer.new Inner();
  7. 匿名内部类在类的定义只使用一次的时候使用,接口或者抽象类都可以通过匿名内部类来实现