接上一条博客, 今天, 我们来谈谈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
由运行结果可知: 不论静态代码块, 实例代码块, 构造方法如何分布, 在访问的时候都是优先访问静态代码块, 再下来是实例代码块, 之后才是构造方法
注意: 无论创建多少个对象, 静态代码块都只执行一次, 并且是最先执行的
如果一个类中存在两个或者多个静态类的数据成员, 那么他们被访问的顺序按照他们定义的先后顺序