zoukankan      html  css  js  c++  java
  • 初始化块

    1、初始化块:

      {

        num2 = 74;

      }

    2、静态初始化块:

      static {

        num3 = 85;

     }

    程序运行时,当一个类被加载时,其静态初始化块最先被执行,其次是普通初始化块,最后是构造方法;

    仍需注意的是,静态块只在类加载时执行一次,二普通初始化块和构造方法均会在对象创建时执行一次;

    静态初始化块只能给静态变量赋值,而普通静态块也能够给静态变量赋值;

    类加载:

      静态块是在类加载的时候进行,类加载就是程序运行前要先把代码加载到内存中,然后才可以占用CPU资源(冯诺依曼计算机规定的)。

      Java也是一样,Java的.class字节码文件要想执行,首先也要加载到内存,由类加载器把字节码文件的代码加载到内存中,这一步就叫类加载,这是首先要进行的。

    静态方法和非静态方法的区别总结如下:

    1、静态方法属于类所有,类实例化前即可使用,用类名.方法名;
    2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员;
    3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存;
    4、static内部只能出现static变量和其他static方法!而且static方法中还不能使用this等关键字,因为它是属于整个类;
    5、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;
    6、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。


    主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。

    package test;
    
    public class JC20180724 {
    	
    	static int num1;
    	int num2;
        int num3;
    	
        static{
        	num1 = 1;
        	System.out.println("我是静态初始化块");
        	//静态块中不能初始化非静态变量
        	//num2 = 2;
        }
        
    	{
    		num2 = 2;
    		System.out.println("我是普通初始化块");
    		//非静态块中能够初始化静态变量
    		//num1 = 1;
    	}
    	
    	public JC20180724(){
    		num3 = 3;
    		System.out.println("我是构造方法");
    	}
    	
    	
    	public static void test1(){
    		num1 = 1;
    		//不能给非静态变量赋值
    		//num2 = 2;
    	}
    
    	public void test2(){
    		num1 = 1;
    		num2 = 2;
    		
    	}
    	
    	public static void main(String[] args){
    		//1、不加任何代码,不创建对象的话只执行静态初始化块
    		/**
    		       输出    我是静态初始化块
    		*/
    		
    		//2、创建对象,依次执行静态初始化块、普通初始化块、构造方法
    		JC20180724 test1 = new JC20180724();
    		/** 输出
    		        我是静态初始化块
    			我是普通初始化块
    			我是构造方法
    		*/
    		
    		//3、再创建一个对象
    		JC20180724 test2 = new JC20180724();
    		/**
    		 * 	输出
    		        我是静态初始化块
    			我是普通初始化块
    			我是构造方法
    			我是普通初始化块
    			我是构造方法
                 (创建了两个对象,只在第一次创建时输出了静态初始化块) */ } }

      

     

    -------------------------------------------------------------------------------------------------------------------------------------------------------------- 白云苍狗时光飞,嘻嘻哈哈一生追。哈!
  • 相关阅读:
    【CF741D】Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
    【CF600E】Lomsat gelral(dsu on tree)
    【Vijos】lxhgww的奇思妙想(长链剖分)
    【HDOJ6586】String(枚举)
    【HDOJ6578】Blank(DP)
    【HDOJ6583】Typewriter(SAM,DP)
    JAVA 集合 List 分组的两种方法
    HashMap的实现原理
    HashMap, HashTable, CurrentHashMap的区别
    java ThreadLocal(应用场景及使用方式及原理)
  • 原文地址:https://www.cnblogs.com/sangong/p/9385381.html
Copyright © 2011-2022 走看看