zoukankan      html  css  js  c++  java
  • 类的加载顺序 (一、编译时常量与运行时常量)

    编译时常量在编译阶段会写死到.class中

    而且会存入到 调用这个常量的方法所在的类的常量池中

    如下代码编译后 删除Parents01.class 后依然可以正常执行

    public class MyTest01 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println(Parents01.VALUE);
    	}
    	
    
    }
    class Parents01{
    	public static final String VALUE = "Parents01 const VALUE";
    	static {
    		System.out.println("this is Parents01 static block");
    	}
    }//out:Parents01 const VALUE
    

    说明VALUE被写入了MyTest01中

    运行时常量:(编译时不加载,类初始化时才加载)

    public class MyTest01 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println(Parents01.VALUE);
    	}
    	
    
    }
    class Parents01{
    	public static final String VALUE = new String("Parents01 const VALUE");
    	static {
    		System.out.println("this is Parents01 static block");
    	}
    }//out:Parents01 const VALUE
    

      

    另外 用子类调用父类的 static字段 并不会初始化子类static域

    具体代码如下

    public class MyTest01 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println(Children01.VALUE);
    	}
    	
    
    }
    class Parents01{
    	public static String VALUE = "Parents01 const VALUE";
    	static {
    		System.out.println("this is Parents01 static block");
    	}
    }
    
    class Children01 extends Parents01{
    	static {
    		System.out.println("this is Children01 static block");
    	}
    }
    //~out:

    this is Parents01 static block
    Parents01 const VALUE

      将VALUE修改为final 则 一个static域都不执行。

    static域在static字段后初始化,父类先于子类初始化:

    public class MyTest01 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new Children01();
    	}
    	
    
    }
    class Parents01{
    	public static Sub01 sub = new Sub01();
    	static {
    		System.out.println("this is Parents01 static block");
    	}
    }
    
    class Children01 extends Parents01{
    	static {
    		System.out.println("this is Children01 static block");
    	}
    }
    class Sub01{
    	Sub01(){
    		System.out.println("this is Sub01");
    	}
    }
    //~out:
    this is Sub01
    this is Parents01 static block
    this is Children01 static block
    

      

  • 相关阅读:
    新闻发布项目——Servlet类(doRegServlet )
    新闻发布项目——Servlet类(doNewsModifyServlet )
    新闻发布项目——Servlet类(doNewsModifyServlet )
    新闻发布项目——Servlet类(doNewsModifyServlet )
    and or 逻辑组合
    sqoop
    t
    tmp
    临时表 数据在 内存 转移时间 将160秒的创建临时表时间放入定时任务 不到1秒的求和时间 hadoop 引入Hadoop 分布式计算
    /tmp/crontab.tDoyrp: 设备上没有空间 查看文件夹所在分区 磁盘剩余空间 15g的root-mail大文件
  • 原文地址:https://www.cnblogs.com/chafanbusi/p/10639328.html
Copyright © 2011-2022 走看看