关于代码块方面的知识
代码里面有详细的说明
package com.jingtai.bean;
import com.jicheng.bean.Person;
/*
* 非静态代码块与静态代码块:
* 一、作用:可以用来初始化类、对象
* (1)赋值的方法
* ①默认初始化
* ②显式初始化
* ③构造器中初始化
* ④通过“对象.属性” 或 “对象.方法”进行初始化
* ⑤在代码块中赋值
* 提示:在实际开发中可以选择不用代码块,但是在看一些源码时,里面可能会有代码块
* 二、代码块只能用static来修饰
* 三、代码块分为 ”非静态代码块“ 与 ”静态代码块“
* (1)非静态代码块: ①内部可以有输出语句
* ②随着对象的创建而执行
* (2)静态代码块: ①内部可以有输出语句
* ②随着类的加载而执行
* 注意:如果一个类中定义了多个静态或着非静态代码块,他们都是按照定义的先后顺序执行
* 但非静态代码块整体要晚于静态代码块的执行,因为静态代码块是随着类的加载而执行
* 而非静态代码块是随着对象的创建而执行(但是在实际的应用中,一般静态或者非静态写一个就可)
* */
public class StaticTest {
public static void main(String[] args) {
//静态属性或者方法可以直接通过类来调用,
//因为其随着类的加载而加载
String say1 = Static.nation;//随着类的加载而执行
System.out.println(Static.nation);
Static.print();//随着类的加载而执行,且只执行一次
Static s1 = new Static();//随着对象的创建而去执行
Static s2 = new Static();//每造一个对象,非静态代码块就执行一次
System.out.println(s1.age);
}
}
class Static{
static String nation = "中国";
static int age;
//以下代码块(静态代码块)随着类的加载而执行
//也可理解代码块无法被调用,只能自动的去执行
//注意:静态代码块的执行要优先于非静态代码块(因为其随着类的加载而加载)
static{
System.out.println("你好啊,陌生人!");
nation = "CHINA";//静态代码块内部只能调用静态的属性或者方法
}
public static void print(){
System.out.println("未来你好!");
}
//以下代码块(非静态代码块)随着对象的创建而去执行
{
//非静态代码块内部既可以调用静态的属性或者方法,也可以调用非静态的属性或者方法
System.out.println("世界你好!");
//在创建对象时,对对象的属性等进行初始化
age = 1;
}
}