一.类的成员之一:代码块(属性 方法 构造器 代码块)
1.非静态代码块(初始化块)
①格式:类中的一对{}
②在每次创建对象时执行
③非静态代码块的执行优先于构造器
④用于为对象进行初始化(通常为多个构造器中的共性内容进行初始化)
⑤非静态代码块可有多个,依次向下顺序执行为属性赋初始值的方式:①默认值(缺省值)② 直接显示赋值 ③ 构造器 ④ 代码块
顺序:① ②④ ③ 注意:②④按顺序执行2.静态代码块
①格式:static{}
②随着类的加载而加载,并且只加载一次
③静态代码块的执行优先于构造器
④静态代码块中不能使用非静态成员,也不能使用this和super关键字
⑤静态代码块可有多个,依次向下顺序执行
- public class StaticTest {
- public static void main(String[] args) {
- Person p1=new Person();
- // p1.cry();
- Person p2=new Person("");
- //p2.cry();
- Person p3=new Person("",18);
- //p3.cry();
- }
- }
- class Person{
- private String name;
- private int age;
- public Person(){
- //cry();
- System.out.println("Person's Constructor....");
- }
- public Person(String name){
- //cry();
- this.name=name;
- }
- public Person(String name, int age) {
- //cry();
- this.name = name;
- this.age = age;
- }
-
- {
- cry();
- System.out.println("非静态代码块1.....");//可以多个
- }
- {
- cry();
- System.out.println("非静态代码块2.....");//顺序执行
- }
- {
- cry();
- System.out.println("非静态代码块3.....");
- }
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- public void cry() {
- System.out.println("哭...");
- }
- }
执行顺序:

2.静态代码块
①格式:static{}
②随着类的加载而加载,并且只加载一次
③静态代码块的执行优先于构造器
④静态代码块中不能使用非静态成员,也不能使用this和super关键字
⑤静态代码块可有多个,依次向下顺序执行
- public class StaticTest {
- public static void main(String[] args) {
- Person p1=new Person();
- // p1.cry();
- Person p2=new Person("");
- //p2.cry();
- Person p3=new Person("",18);
- //p3.cry();
- }
- }
- class Person{
- private String name;
- private int age;
- public Person(){
- //cry();
- System.out.println("Person's Constructor....");
- }
- public Person(String name){
- //cry();
- this.name=name;
- }
- public Person(String name, int age) {
- //cry();
- this.name = name;
- this.age = age;
- }
-
- {
- cry();
- System.out.println("非静态代码块1.....");//可以多个
- }
- {
- cry();
- System.out.println("非静态代码块2.....");//顺序执行
- }
- {
- cry();
- System.out.println("非静态代码块3.....");
- }
-
- static{
- System.out.println("静态代码块1....");
- }
- static{
- System.out.println("静态代码块2....");
- }
- static{
- System.out.println("静态代码块3....");
- }
-
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void cry() {
- System.out.println("哭...");
- }
- }
Exer:
