一、构造方法(构造函数)
对于初学者而言,经常见到和用到的是在java中去new一个对象(初始化对象),那这个对象又是怎样new出来的? 例如:Cat A=new Cat();这里是创建了一个Cat类的对象A,我们发现有个Cat()这个玩意儿,看上去是个函数的写法,bingo!,Cat()在这里就可以理解为一个方法,叫做构造方法或函数;有点啰嗦了,直接上代码
class Cat {
private String name;
private int age;
// 1、无参构造方法默认值
/*Cat() {
System.out.println("我是无参构造方法!");
}*/
// 2、有参构造方法
/*Cat(String name) {
System.out.println("我是有参构造方法! ");
}*/
//3、构造代码块
/*
* { System.out.println("我是构造代码块!"); }
*/
}
public class Test1 {
public static void main(String[] args) {
Cat A = new Cat();
System.out.println(A);
//Cat B = new Cat("黑猫");
}
}
请先忽略注释部分:代码输出结果为test.Cat@659e0bfd 表示输出的A的对象,可能你会发现Cat类里面并没有构造方法Cat()啊,这里的Cat()是类默认的,你把他直接写出来也可以,注默认的是无参构造方法。
下面把Cat类中1 2注释掉,Test1里面的代码也注释掉,这是我们发现Cat类里面有连个方法Cat()和Cat(String name)这是方法的重载,这是Cat里面有两个构造方法,一个叫无参构造方法,一个叫有参构造方法,你去new对象的时候可以调用不同的构造方法。
总结:
1、使用new + 构造方法创建一个新的对象
2、构造函数是定义在java类中的一个用来初始化对象的函数。
3、构造函数与类同名且没有返回值。
二、构造代码块
先上代码:
class Cat {
private String name;
private int age;
// 1、无参构造方法默认值
Cat() {
System.out.println("我是无参构造方法!");
}
// 2、有参构造方法
Cat(String name) {
System.out.println("我是有参构造方法! ");
}
//3、构造代码块
{
System.out.println("我是构造代码块!");
}
}
public class Test1 {
public static void main(String[] args) {
Cat A = new Cat();
Cat B = new Cat("黑猫");
}
}
输出结果我们发现在new对象的时候 { }这个大括号里的内容总是优先执行,这里的{ }就表示构造代码块,它也是用来初始化对象的,它与构造方法初始化队形的区别是:构造方法是给对应的对象进行初始化,构造代码块是给所有的对象进行初始化。理解不了?那就把上面的代码给加工一下:
class Cat {
private String name;
private int age;
// 1、无参构造方法默认值
Cat() {
System.out.println("我是无参构造方法!");
}
// 2、有参构造方法
Cat(String name) {
System.out.println("我是有参构造方法! ");
}
//3、构造代码块
{
name="猫";
System.out.println("我是构造代码块!");
}
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 class Test1 {
public static void main(String[] args) {
Cat A = new Cat();
Cat B = new Cat("黑猫");
System.out.println(A.getName());
System.out.println(B.getName());
}
}
输出结果:
我们发现在{ }里面加了个属性name="猫",两个对象A B就都获得了这个属性值,所以构造代码块可以把所有对象共性信息放在里面,简化代码冗余。
总结:特点:对象已建立就运行了,而且优先于构造函数执行
作用:给对象进行初始化的
区别:构造方法是给对应的对象进行初始化,构造代码块是给所有的对象进行初始化。
构造代码块中定义是不同对象共性的初始化内容
可能表述的有些啰嗦,不够简洁全面,欢迎指正!