一些java基础问题

1.有关初始化

  • 在方法内部如果调用了一个未被初始化的变量,编译器会提示错误信息,必须将该变量进行初始化操作;如果该变量作为一个类的数据属性字段,对于基础数据类型,将被自动初始化为相应的值:表示数字类型的为0double,float0.0boolean初始化为falsechar0显示为空白字符,对于对象引用,则初始化为null
  • 初始化的顺序。在类的内部,变量定义的顺序决定了初始化的顺序,即使变量散落在类的各处,它们也将先被初始化。如果存在静态变量,则静态变量将会被最先初始化,再是非静态变量。静态初始化只在它们必要的时候才会进行,但只会被初始化一次。
  • 构造器将在完成上述过程后执行。

虽然没有显示的定义,但构造方法也属于静态方法。创建对象时,java解释器将查找class文件,载入并会创建一个Class对象,所有关于静态初始化的动作将会执行,并在堆上为对象分配内存,将基本类型数据置为默认值,引用置为null,执行字段定义时的初始化动作,最后执行构造器。

2.关于final

  • final用于保证无法改变的常量上,对于基础数据类型来说,java可以保证它们在任何时刻都不会发生改变。但是对对象引用使用final则有一些差别:java可以保证该引用始终指向同一个对象,即引用不会发生变化,但是对象本身却是可能发生改变的,因此在使用时需要注意这个问题。static主要强调只有一个,而final强调不变,两者同时使用时,该变量只会被初始化一次,且无论创建多少个对象,值都是一样的。
  • final变量,如果方法变量为final,则在方法内部可以读取变量,但不能对它作任何修改,此特性主要用于向匿名内部类传递数据。
  • final方法,声明为final的方法将不能被继承的类修改,确保在继承中方法的含义不会被修改,且不会被覆盖。private是隐的声明为final,它对子类不可见,如果子类以相同名称导出一个方法,该方法与父类没有任何关系,仅仅是与父类方法名称相同。
  • final类, 声明为final的类不可被继承,主要用于不希望类被进行修改的场合,final类内部的所有方法都隐式的指定为final类型。

3.关于多态

  • java方法在执行前如果不能对引用的类型作出明确判断,将在方法执行时判断正确的类型,这被称为动态绑定,java中的多态就是基于此实现的。
  • 在构造器内调用关于动态绑定的方法可能会产生难以预料的结果,由于在运行时对象的初始化动作并不确定,因此结果也无法确定,在构造方法中应尽量避免这样的方法调用。
  • 协变返回类型,从java SE5开始加入了返回协变类型,表示在导出类中的覆盖方法可以返回基类方法返回的类型的导出类型,即相对于基类,导出类中的方法可以返回更加具体的类型。

4.关于接口

  • 接口中的方法隐式的申明为public类型,包含的域则为static和final的。接口中的域可以被非常量表达式初始化。
  • 接口可以嵌套在类当中,嵌套在类内部的private接口不能在类外部被试下你;接口也可以嵌套在接口当中,当实现一个嵌套有其他接口的接口时,不需要实现其内部嵌套的接口。
  • 接口应当为需求而产生,如果为了抽象而抽象将会增加结构的复杂性。

待添加…