动态加载机制

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

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文件

      再通过Java -version test1可以看出所有被加载的类文件

 

 标红的部分是在代码里创建了People和Pet对象,所以被加载。

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

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类。

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

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

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

}

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

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

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

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

 

转载于:https://www.cnblogs.com/-flash/p/6677505.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值