java类的两种引用方法

  • 更新时间:2021-06-16 11:50:25
  • 编辑:毛思博
给大家整理一篇相关的编程文章,网友庾宜春根据主题投稿了本篇教程内容,涉及到java相关内容,已被621网友关注,相关难点技巧可以阅读下方的电子资料。

参考资料

正文内容

这是一篇很好的Java技术文章,感觉写的不错,增加了更多知识点内容,希望对网友有用。

java类的两种引用方法

1、类的主动引用,一定会发生类的初始化

当虚拟机启动,先初始化main方法所在的类

实例化一个类的对象

调用类的静态成员(除了final常量)和静态方法

使用java.lang.reflect包的方法对类进行反射调用

当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类

2、类的被动引用,不会发生类的初始化

当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化

通过数组定义类引用,不会触发此类的初始化

引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)

3、实例

package com.volcano.reflection;
//什么时候会发生类的初始化,除了第一个注释一直开着,其他都要独立打开测试,否则不准确
public class TestReflection3 {
    static {
        //1.虚拟机启动就会最先初始化main方法所在的类 会
        System.out.println("main方法被加载");
    }
    public static void main(String[] args) throws ClassNotFoundException {
        //2.实例化一个对象 会
        //new Father();
        //3.调用类的静态成员(除了final常量)和静态方法 会
        //System.out.println(Son.a);
        //4.使用java.lang.reflect包的方法对类进行反射调用 会
        //Class cls = Class.forName("com.volcano.reflection.Father");
        //5.当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类 会
        //new Son();
 
        //6.当访问一个静态域时,只有真正声明这个域的类才会被初始化 不会
        //System.out.println(Father.a);//两个都是只加载Father
        //System.out.println(Son.a);//因为a是Father的静态成员
        //7.通过数组定义类引用,不会触发此类的初始化 不会
        //Father[] fathers = new Father[10];
        //8.引用常量不会触发此类的初始化 不会
        //System.out.println(Father.B);
 
    }
}
class Father{
    static {
        System.out.println("Father被加载");
    }
    static int a=100;
    static final int B = 300;
}
class Son extends Father{
    static {
        System.out.println("Son被加载");
    }
    static int c=200;
 
}

以上就是java类的两种引用方法,希望对大家有所帮助。Java基础

相关教程

  • Javaweb视频下载之JSP四大作用

    程序员在写代码的时候,难免会遇到作用域的问题,今天我们要谈的也是JSP的四大作用域。本文主要总结了JSP四大作用域page、request、session和application和它们的请求范围。

    发布时间:2021-06-06

  • java中redis增删查以及清理缓存的案例

    这篇文章主要介绍了java中redis增删查以及清理缓存的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2021-05-02

用户留言