以下摘自孙鑫视频的课件:为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。 为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。 class中所有的private和static方法自然就是final。 我想问为什么"class中所有的static方法自然就是final"?求大侠赐教,在下先谢过了.

解决方案 »

  1.   

    final的主要目的就是 不变   不希望别人改变他们,包括他们的子类
    而private本来就不可见,所以一定不可变
    而static只在类加载的时候载入一次,以后将不再载入了,更不用说可变了
      

  2.   

    不过呢,static方法好象是可以被继承的,是否为final就不清楚了
      

  3.   

    final的主要目的就是 不变  不希望别人改变他们,包括他们的子类 
    而private本来就不可见,所以一定不可变 
    而static只在类加载的时候载入一次,以后将不再载入了,更不用说可变了
    class中所有的private和static方法自然就是final了。
      

  4.   

    class中所有的private和static方法自然就是final。
    ---------------------------
    这个说法是错误的,
    例如:
    private static int a=0;
    private final static int b=0;
    private void abc()
    {
       a=1;//通过;
       b=1;//错误,不能通过。
    }
    这两个变量,是不同的,a的值可以在本类里被改变,而b的值就永远是0了。
      

  5.   

    static final用来修饰成员变量和成员方法,为“全局常量” 
    变量,表示一旦给值就不可修改,并且通过类名可以访问。 
    方法,表示不可覆盖,并且可以通过类名直接访问。 
    -----------
    static :通过类名访问
    final  :不可改你问的那句话 肯能和上下文有关
      

  6.   

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

  7.   

    static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:1.它们仅能调用其他的static 方法;2.它们只能访问static数据。也就是说static变量或方法不会随着对象有所变化,它只属于定义它的类,从这个层面上讲,也就是相当于常量final了。
    而private则是除了包含这个成员的类外,其他任何类都无法访问这个成员,那当然就是和fianl一样的作用了。
      

  8.   

    final修饰static方法时具有不同的语义,表示该方法不能被隐藏(hidden)。例如:
    class A {
        public static f() {
            System.out.println("fa");
        }
    }class B extends A {
        public static f() {
            System.out.println("fb");
        }
    }
    这段代码是合法的。但是如果将A的f()方法声明成final,则会发生编译错误。
      

  9.   

    只想说一句,你有没有测试你的句子,
    没返回值 也没void....
      

  10.   

    我测试了,static 类型的方法可以被继承,但是不能被重写,所以,static 类型的方法应该是final 类型的。
      

  11.   

    Thinking in Java 中有很详细的介绍,从final变量到final对象,final方法,fianl类都有很详细的讲解,还有实例。
      

  12.   

    孙鑫的说法无可厚非。但是讨论一个static方法是否是final,这个话题没有意义。
    因为static方法与继承/覆盖等相关概念无关,是否是final对其行为没有任何影响。而final修饰方法主要是体现在继承/覆盖情形下的。
    给static方法加final修饰符也同样没有任何意义。
      

  13.   

    static private 都是 访问级别  staitic 是公共随便访问  private是 私有 只能类内访问 什么都不写默认的是包内可以访问
    private可以继承 但是 子类内访问不了 因为是 私有的只能父类自己访问