Java的构造方法以及代码块

接上一条博客, 今天, 我们来谈谈java中的构造方法以及代码块

1. 构造方法

有一个问题: 一个对象的产生分为几步? 他是怎样产生的?
答案为: 两步 1. 给对象分配内存; 2. 调用合适的构造方法

那么什么是构造方法?
构造方法是一种特殊的的方法, 使用关键字new实例化对象的时候, 就会自动调用构造方法, 用于完成初始化的操作.

构造方法的构造要求:
构造方法名与类名相同, 并且没有返回值

class Person {
    private String name;
    private int age;

    // 构造方法
    public Person () {
        System.out.println("person");
    }
}
public class Test {
    public static void main(String[] args) {
       Person person = new Person();
    }
}

构造方法可以是一个, 也可以是多个.

若自己未在代码中定义构造方法, 编译器将会默认自带一个无参的构造方法. 若自己定义了构造方法, 编译器将不再赠送构造方法

构造方法可以是无参的构造方法, 也可以是有参构造方法, 由构造方法的构造可知, 它完全符合重载的要求

所以, 构造方法可以进行重载

class Person{
    private String name;
    private int age;

    // 构造方法
    public Person() { // 不带参数的构造方法
        System.out.println("person");
    }
    
    public Person(String name, int age) { // 带有参数的构造方法
        System.out.println("person || String || age");
    }
}
public class Test {
    public static void main(String[] args) {
       c
        Person person = new Person("zhangsan",18);
    }
}

this关键字的简单介绍

这里我们从一个问题入手: this代表一个对象, 这句话对不对?

这句话是错误的

这里展示一段代码:

class Person{
    private String name;
    private String age;

    // 构造方法
   public Person() {
       this.name = "zhangsan";
       this.age = 18;
       System.out.println(name + " " + age);
   }
}
public class TestDemo03 {
    public static void main(String[] args) {
        Person person = new Person();
    }
}

我们知道, 一个对象要产生, 首先就要先给对象分配内存, 然后再调用合适的构造方法. 但是从这段代码中我们可以看出, 在构造方法中就已经使用了this关键字, 而这个时候, 对象还没有完全创建好. 所以, this代表一个对象是错误的

那么,this到底代表什么呢? this代表的是当前对象的引用(this写在哪个类, 就代表哪个类的对象的引用)

构造方法还可以调用构造方法

  public Book() {
        this("木偶奇遇记", "10697061418"); // 调用了有参的构造方法
        this.name = "鲁宾逊漂流记";
        this.id = "10697061419";
        System.out.println("name = " + name + ", " + "id = " + id);
    }
    // 有参的构造方法
    public Book(String name, String id) {
        this.name = name;
        this.id = id;
        System.out.println("name = " + name + ", " + "id = " + id);
    }

调用构造方法, 需要使用 this( ) 来调用自己的构造方法

注意: 1. this( ) 只能在构造方法里面写

2. this( ) 只能调用一次

3. 调用的时候只能写在第一行

2. 代码块

代码块分为3种: 1. 静态代码块

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

​ 3.本地代码块

我们着重介绍前两个代码块

class Person {
    private String name;
    private int age;
     // 构造方法 
    public Person() {
        System.out.println("person");
    }
    
    // 实例代码块
    {
        System.out.println("实例代码块");
    }
    
    // 静态代码块(使用static定义的代码块)
    static {
        System.out.println("静态代码块 ");
    }
}

public class TestDemo04 {
    public static void main(String[] args) {
         Person person = new Person();
    }
}

运行结果为:

静态代码块 
实例代码块
teacher

由运行结果可知: 不论静态代码块, 实例代码块, 构造方法如何分布, 在访问的时候都是优先访问静态代码块, 再下来是实例代码块, 之后才是构造方法

注意: 无论创建多少个对象, 静态代码块都只执行一次, 并且是最先执行的

如果一个类中存在两个或者多个静态类的数据成员, 那么他们被访问的顺序按照他们定义的先后顺序

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值