动态加载机制

我理解的动态加载机制就是在须要的时候继续加载,举个简单的例子:spa

public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("--------"); People p = new People (); Pet pt = new Pet(); } }

用cmd命令Javac test1.Java先编译生成.class文件code

      再经过Java -version test1能够看出全部被加载的类文件对象

 

 标红的部分是在代码里建立了People和Pet对象,因此被加载。blog

假设只声明不实例化一个对象呢?图片

public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("--------"); People p = new People (); //Pet pt = new Pet();  Pet pt; } }

并无加载Pet类。cmd

说明只有类被实例化才华加载。io

另外在这个例子中看一下static语句块与static方法在加载时的区别编译

public class Pet { static { System.out.println("原来如此"); } public static void show(){ System.out.println("show"); } }

依然看第一张图片,控制台只输出了“原来如此”,说明只执行了静态块语句。刚开始我误觉得只要是静态的就该被执行,class

如今看来二者是有区别的,静态块语句是类被加载时执行,是主动的;而静态方法是调用时才执行,是被动的。test

那么静态方法(调用能够不建立对象,直接经过类名.静态方法名调用)和非静态方法(必须建立对象再调用)都是调用时才会执行,

那么效率同样吗?为何在我所接触的项目中,大多数方法都是用非静态方法呢?本身还要去研究下。

相关文章
相关标签/搜索