Final方法节省时间开销

1、final类:
可以用“final”声明一个类不可再被作为超类。

2、final方法:
当一个方法用“final”来修饰时,表示该方法不可以被子类重写。
好处:
一、限制了子类中对其改写;
二、提高了执行的效率,因为这种情况属于静态绑定,Java虚拟机(JVM)的即时编译器就不会去检索该方法在其父类、子类或爷爷类、孙子类等有内联关系的类中是否存在重写,省去了动态判断究竟要执行哪一个类(具体内联关系的类)的这个名称的方法。

3、final属性:
对于成员变量和变量,也可以用“final”来修饰,表示是一个不可被修改的常量。
注意:一个方法如果需要被构造函数所调用,那么方法最好声明为“final”;否则,如果子类重写了这个方法,就可能引起意外的风险,应避免多态性的发生。
/**  
* 对被final关键字修饰的方法执行效率测试类  
* @author CodingMouse  
* @version 1.0.0.1 2009-5-5  
*/   
public class FinalTest {    
        
    /**  
     * 循环次数(这里用一千万来测试)  
     */   
    private final static int NUM = 10000000;    
   
    /**  
     * 测试方法一  
     */   
    public static void Method1() {    
            
        int[] arr = new int[10000000];    
        for (int i = 0; i < NUM; i++) {    
            arr[i] = i;    
        }    
            
    }    
        
    /**  
     * 测试方法二  
     */   
    public final static void Method2() {    
            
        int[] arr = new int[10000000];    
        for (int i = 0; i < NUM; i++) {    
            arr[i] = i;    
        }    
            
    }    
        
    /**  
     * 测试程序入口方法  
     * @param args 入口参数列表  
     */   
    public static void main(String[] args) {    
            
        long start, now;    
        start = System.currentTimeMillis();    
        Method1();    
        now = System.currentTimeMillis() - start;    
        System.err.println("调用不带final关键字的Method1方法耗时(ms毫秒):" + now);    
        System.out.println("---------------------------------------------------");    
        start = System.currentTimeMillis();    
        Method1();    
        now = System.currentTimeMillis() - start;    
        System.err.println("调用带final关键字的Method2方法耗时(ms毫秒):" + now);    
            
    }    
        
}

你可能感兴趣的:(jvm,虚拟机)