我想问问为什么static方法自动就是final方法.莫非static方法不会被继承?哪位大侠能帮忙指点下.多谢

解决方案 »

  1.   

    孙鑫说static方法不用特别声明为final就会被当作final方法而进行优化,我想问问这是为什么?
      

  2.   

    lz是看到很多定义成static final的变量了吧,所以才有这问题?
      

  3.   

    以下摘自孙鑫视频的课件:为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。class中所有的private和static方法自然就是final。
      

  4.   

    这个东西你可以考虑一下,static方法的调用方式,设成final与否都不影响static方法的使用,所以JDK自动设成final以提高性能
      

  5.   

    我不太明白7楼说的,这和函数的调用方式有什么关系呢?应该和继承之类的有关吧,我真的很菜.我把那页贴全了吧:为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。class中所有的private和static方法自然就是final。求教.
      

  6.   

    static 是不实例化就可以调用该方法,
    final  是最终的意思,方法不可以重写,变量不可以调用,类不可以继承.楼主说static方法就自动(默认)就是fianl方法,,对不起,您说错了! 两者没有太大的关系
      

  7.   

    我觉得 static 方法就是final 方法是说法是正确的,当类被继承时,你永远不可能重写
    父类的static方法,不然你们去试试... 
    重写时请加上这个  @Override
    你就可以发现在编译是能不过的,
    这说明父类的该方法并不能在子类重写
    .....
    个人见解
      

  8.   


    当然正确了,孙鑫说的是在继承中,如果父类写成是private static的方法,就相当与final方法了,不能被覆盖。这只在继承中父类和子类间成立,不能说一个类中static就自动是final方法,这是错的。
      

  9.   

    因为private子类是不能继承的,又是static的,此变量只在加载类的时候创建一个。