Java 类加载:显式加载、隐式加载,动态加载、静态加载;方法调用:显式调用、隐式调用;方法分派:动态分派、静态分派

类加载方式:

显式加载(传入类全限定名的加载)、动态加载(编译时类可以缺席的加载):

    ClassLoader.loadClass(className) :只执行装载过程。

    Class.forName(className):执行类的装载、链接、初始化过程。https://www.cnblogs.com/heyjia/p/11338612.html

Class.forName(className)是初始化类,newInstance()是实例化类。new是初始化加实例化类。(new关键字和Class类的newInstance()的区别:https://blog.csdn.net/qq_33704186/article/details/86596614

隐式加载(非传入类全限定名的加载)、静态加载(编译时类不可以缺席的加载):

         创建类对象
         使用类的静态域
         创建子类对象
         使用子类的静态域

其他特殊的隐式加载:
在JVM启动时,BootStrapLoader会加载一些JVM自身运行所需的class
在JVM启动时,ExtClassLoader会加载指定目录下一些特殊的class
在JVM启动时,AppClassLoader会加载classpath路径下的class,以及main函数所在的类的class文件。

https://blog.csdn.net/jiyiqinlovexx/article/details/51090751

方法调用方式: 

显式调用(写明调用方法)、隐式调用(未写明调用方法)举例:
(1)toString()调用:
显式调用:System.out.println(object.toString());
隐式调用:System.out.println(object);
(2)父类无参构造方法调用:
显式调用:

public class Person {
    public Person (){
        System.out.println("Person ()");
    }
}

public class Student extends Person {
    public Student(){
        super();
    }

    public static void main(String[] args) {
        new Student();
    }
}

隐式调用:

public class Person {
    public Person (){
        System.out.println("Person ()");
    }
}

public class Student extends Person {
    public Student(){
    }

    public static void main(String[] args) {
        new Student();
    }
}

 

方法分派方式:
动态分派:根据实际类型(变量实例类型)分派方法版本。如子类给父类赋值,父类调用方法时,根据实例类型,即子类类型匹配子类方法。运行阶段确定方法版本,由JVM负责。
静态分派:根据静态类型(变量声明类型)分派方法版本。如方法重载,根据参数声明类型匹配方法。编译阶段确定方法版本,由编译器负责。

Java是静态多分派,动态单分派语言。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值