JavaSE 【类和对象】(3)(重点:代码块、对象的打印)

目录

一、代码块

1.静态代码块

2.构造代码块/实例代码块

3.总结

代码块执行的顺序:

1.静态代码块

2.构造代码块(实例代码块)

3.执行对应的构造方法

其中:静态的只执行一次

二、 对象的打印

有一个快速打印的方法:重写toString


一、代码块

使用 {} 定义的一段代码称为代码块
根据代码块定义的位置以及关键字,又可分为以下四种:
1.普通代码块:就是定义在方法中的代码块
2.构造代码块(实例代码块)
3.静态代码块
4.同步代码块(后续讲解多线程部分再谈)
 

 

class Student{

    public String name ;
    public int age ;

    //静态成员变量:所有对象共有的
     public static String classRoom = "110class";

   //带参数的构造方法
    public Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("带参数的构造方法Student(String,int)");
    }


    /**
     * 静态代码块:
     * 一般用来初始化静态成员
     * 类加载的时候就被调用
     */
    static {
        classRoom = "bit";
        System.out.println("静态代码块!!");
    }
    /**
     * 构造代码块/实例代码块
     */
    {
        System.out.println("构造代码块/实例代码块");
    }

    public void eat() {
        System.out.println(this.name+"吃饭!");
    }

    public void show(){
        //this.eat();//可以在成员方法里,调用另一个成员方法
        System.out.println("姓名:"+this.name+" 年龄:"+this.age);
    }

}


public class Test {
    public static void main(String[] args) {
        System.out.println(Student.classRoom);
    }

}

1.静态代码块

static{

}

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第1张图片

 JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第2张图片

打印出来了,证明静态代码块被执行了 

 JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第3张图片

 

2.构造代码块/实例代码块

{

}

实例代码块需要实例化对象以后才会执行 

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第4张图片

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第5张图片

没有打印出构造代码块,说明 构造代码块没有被执行

 JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第6张图片

是因为,实例代码块需要实例化对象以后才会执行 

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第7张图片

        此时我只运行了一条实例化对象的student1这个语句,可我们发现 静态代码块被执行了,构造代码块(实例代码块)被执行了,构造方法也被执行了。

        尽管我换了这几个代码的顺序,依然得到如下结果。JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第8张图片

3.总结

代码块执行的顺序:

1.静态代码块

2.构造代码块(实例代码块)

3.执行对应的构造方法

其中:静态的只执行一次

 再实例化一个对象student2

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第9张图片

发现第二次实例化对象的时候,没有 执行静态代码块了

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第10张图片

 当有多个静态块时,可以看作一个大的静态块,按从上到下的顺序依次执行

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第11张图片

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第12张图片

二、 对象的打印

以往打印对象的属性,要写一个show方法

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第13张图片

 

有一个快速打印的方法:重写toString

sout (对象),原本打印的是对象student1的地址

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第14张图片

 打开源码发现,sout底层调用的是 toString这个方法

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第15张图片

 

 自己写一个toString方法,按照自己想要的格式输出返回

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第16张图片

 这样原本打印的student1对象的地址,就可以打印出对象的属性信息了

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第17张图片

 

假如我就喜欢上面show方法的格式,我自定义toString修改之后,同样可以达到一样的效果

(这个其实就是重写)

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第18张图片

JavaSE 【类和对象】(3)(重点:代码块、对象的打印)_第19张图片 

 

你可能感兴趣的:(Java,java,前端,开发语言)