• Ekt-Class和类加载器的执行过程


    演示1:
     1 class  Base{
     2     static int a=1;
     3     static {
     4         System.out.println("我是int:Base");
     5     }
     6 }
     7 class Sub extends Base{
     8     static int b=2;
     9     static {
    10         System.out.println("我是int Sub");
    11     }
    12 }
    13 public class Ekt2{
    14     static {
    15         System.out.println("init Ekt2");
    16     }
    17 
    18     public static void main(String[] args) {
    19         //启动类加载Base类
    20         System.out.println(Base.a);
    21         System.out.println("*****************");
    22         //启动类,加载Base类,在加载Sub类
    23         System.out.println(Sub.b);
    24         //加载子类的时候,它会去查父类有没有加载,它会先去加载父类然后加载子类
    25         int[] arr=new int [3];
    26 
    27         System.out.println(arr.getClass());
    28         System.out.println(int[].class);
    29 
    30         int[] arr1=new int[5];
    31         System.out.println(arr.getClass()==arr1.getClass());
    32 
    33         int[][] arr2=new int[3][2];
    34         System.out.println(arr2.getClass()==int[][].class);
    35     }
    36 }
     1 演示2:
     2 class Test{
     3     static {
     4         System.out.println("我是Test静态块");
     5     }
     6 }
     7 public class Ekt3 {
     8     public static void main(String[] args) {
     9         try {
    10             Class.forName("Ekt3.Test");
    11             //表示在父类运行是不加载静态块
    12             Class ff = Class.forName("Ekt3.Test",false,Thread.currentThread().getContextClassLoader());
    13             //在创建类的对象时才会运行静态块
    14             //通过类对象得到类的实例
    15             Object o = ff.newInstance();
    16 
    17         } catch (ClassNotFoundException e) {
    18             e.printStackTrace();
    19         } catch (IllegalAccessException e) {
    20             e.printStackTrace();
    21         } catch (InstantiationException e) {
    22             e.printStackTrace();
    23         }
    24     }
    25 }

    技术总结:

    一个类的类对象是唯一的
    已知对象的实例可以通过getClass()的到类对象
    已知基本类型可以通过class的到类对象
    加载子类的时候,它会去查父类有没有加载,它会先去加载父类然后加载子类



    有6种情况,JVM会加载Class对象:
    1.使用new关键字创建对象时

    2.通过反射创建对象是

    3.调用某个类的static方法时

    4.调用某个类的static属性时

    5.初始化某个类的子类时候

    6.某个类标明为main()函数类(启动类)

    
    
    



  • 相关阅读:
    Silverlight 4版本升级到4.0.60531.0
    Silverlight实例教程 理解Navigation导航框架Page类
    微软官方在线培训课程汇总2011版
    分享Silverlight/WPF/Windows Phone一周学习导读(07月11日07月17日)
    Linux内核简介
    Brief Summary of IaaS, PaaS, SaaS
    On Amazon EC2's Underlying Architecture
    Linux进程管理(2)
    一个诡异的时间问题追查[转]
    查看一个进程打开了哪些文件的命令
  • 原文地址:https://www.cnblogs.com/KcBlog/p/13537105.html
Copyright © 2020-2023  润新知