初始化块

Posted sangong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始化块相关的知识,希望对你有一定的参考价值。

1、初始化块:

  {

    num2 = 74;

  }

2、静态初始化块:

  static {

    num3 = 85;

 }

 

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

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

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

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


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();
		/**
		 * 	输出
		        我是静态初始化块
			我是普通初始化块
			我是构造方法
			我是普通初始化块
			我是构造方法
             (创建了两个对象,只在第一次创建时输出了静态初始化块) */ } }

  

 

 









以上是关于初始化块的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 快速开发 代码块

Xcode 快速开发 代码块 快捷键

<code> vs <pre> vs <samp> 用于内联和块代码片段

Xcode自定义代码块

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?