java面向对象编程(5)

44 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情

代码块

使用{} 定义的一段代码。

根据代码块定义的位置以及关键字,又可分为以下四种:

  • 普通代码块 定义在方法中的代码块!
class Animal{
    String name;
    int age;
    public void speak(){
       //普通代码块,在方法中
       {
        System.out.println("haha");
      }
    }
}
  • 构造块 构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
class Animal{
    String name;
    int age;
    //构造块
    {
        System.out.println("构造方法");
    }
}

new一个对象时,构造块比构造构造方法先执行!

class Animal{
    String name;
    int age;
    public Animal(){
        System.out.println("构造方法");
    }
    //构造块
    {
        System.out.println("构造块");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
    }
}

在这里插入图片描述

  • 静态块 静态块:由static定义的代码块!一般用于初始化静态属性!
class Animal{
    static String name;
    //静态代码块
    static {
        name = "bug郭";
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println(Animal.name);
    }
}

在这里插入图片描述

  • new一个对象时,构造方法,构造块,静态代码块三者的优先级!
class Animal{
    static String name;
    //构造块
    {
        System.out.println("构造块");
    }
    //构造方法
    public Animal(){
        System.out.println("构造方法");
    }
    //静态代码块
    static {
        System.out.println("静态代码块");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println("=========");
        Animal animal2 = new Animal();//静态代码块是否还会执行???
    }
}

在这里插入图片描述 注意事项: 1.静态代码块只执行一次! 2.三者执行优先顺序: 静态代码块,构造块,构造方法

  • 同步代码块 bug郭尚未学习到,就不做介绍!

toString方法

Object类中有一个toString方法,而我们的创建的所有类都是Object的子类,所有,我们创建的类继承了父类Object中的toString方法! 在这里插入图片描述 可以看到toString方法返回我们的class的类名+'@'+哈希处理过的对象地址! 在这里插入图片描述既然是父类中的方法我们就可以在子类中重写父类方法! 我们可以通过刚刚我们学习settergetter快捷方式直接进行重写! 在这里插入图片描述在这里插入图片描述 重写toString方法可以返回属性名和属性值!在这里插入图片描述重写后使我们打印一个对象的属性值更快捷方便! 这就是java中类和对象所有的内容!如有遗漏,还望指出!