一.类的成员之一:代码块(属性 方法 构造器 代码块)
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: