`
qzww5324
  • 浏览: 37373 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java bookmark (三)

阅读更多

1.final关键字:final的使用有3种情况

(1)数据:在成员变量中用final修饰,表示了该数据的不变性,根据参数的类型又可以分为两种不同情况。如果该成员变量是基本类型,那么通过final修饰,该变量就不可以改变,如果加上static就表示了该成员变量,作为全局变量使用;如果该成员变量是引用类型,用final修饰,那么该引用不可再变,即引用的指向不可变,但是引用所指向的对象的值可以改变。

 

final数据的初始化在域的定义处或构造处进行,即final在使用前必须初始化。

 

final可以修饰方法中的参数,但是只能读不可修改。

 

(2)方法:方法用final修饰作用主要时为了该方法不能在继承的时候被修改,还有一个作用就是把被修饰的方法的调用转为内嵌调用以提高效率,不过不提倡用该种方式来提高效率,在比较新的jvm中,已经提供了这种功能。

 

类中private方法都隐式的指定为final。

 

(3)类:final修饰类时,表示该类不允许被继承,该类中的所有方法都被隐式指定为final方法。

 

2.继承初始化

当导出类执行时,即使没显示的去调用基类或打算生成一个基类对象,也会先去加载基类中的static域,然后加载导出类的static域,完成类的加载,基类构造器和导出类的构造器一样,以相同的顺序来经历相同的过程。在基类构造器完成之后,实例变量按其次序被初始化。最后构造器的其余部分被执行。

 

3.动态绑定:

   将一个方法调用同一个方法主体关联起来被称作绑定。在运行时根据对象的类型进行绑定称为后期绑定,后期绑定也称为动态绑定或运行时绑定。java中除了static方法和final(private)方法外,其他方法都是后期绑定

 

4.几个缺陷:

   a.只有非private方法才可以被覆盖。所以在导出类中,对基类的private方法。最好采用不同的名字。

 

public class A{
  private void f(){System.out.println("private f()")};
  public static void main(String[] args){
    A a=new B();
    a.f();
  }
}

class B extends A{
  public void f(){System.out.println("public f()")}
}

 输出的结果为:

    private f();

 

b.任何域访问操作都将由编译器解析,因此不是多态。静态方法也不具有多态性,因为它是对类来说,而不是对象。

c.在构造器内部唯一能够安全调用的那些方法是基类中的final(private)方法,调用其他方法会存在隐患。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics