静态块,构造块,静态函数

静态代码块:

  • 在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。

  • 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存。所以静态的会优先非静态的。

  • 每个静态代码块只会执行一次。如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

static {
    	 System.out.println("静态初始化1");
    	  id = 40; 
    	  Employee employee = new Employee("liuliu",50);
    	  System.out.println(employee);
     }
     public static int id = 30;
     {
    	 
    	 System.out.println("初始化2");
    	 name = "zhaosi";
    	 age = 40;
     }
     static {
    	 System.out.println("静态初始化2");
    	 id=80;
     }

静态块,构造块,静态函数_第1张图片

构造代码块:

{ // 构造代码块
}

  • 构造代码块的作用是给对象进行初始化。
  • 对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,类不能调用构造代码块的,而且构造代码块与构造函数的执行顺序是前者先于后者执行。
  • 构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。
  {
    	 System.out.println("初始化1");
    	 name = "wangwu";
    	 age = 20;
     } 

构造函数:

  1. 对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。
  2. 构造函数的作用是用于给对象进行初始化。
  3. 一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。
	public Employee(String name,int age) {
		super();
		System.out.println("有参构造");
		this.name = name;
		this.age=age;
		
	}
	public Employee() {
		
		super();
		System.out.println("无参构造");
		// TODO Auto-generated constructor stub
	}

静态块,构造块,静态函数_第2张图片
根据最终的结果说明:
执行顺序如下:
静态代码块(一次)
构造代码块(new几次就有几次)
构造函数(new几次就有几次)
普通代码块(每次调用方法都会调用)

你可能感兴趣的:(静态块,构造块,静态函数)