一、类中的一种特殊的方法:构造方法!
1、构造方法的名字一样,和类名一样。
2、构造方法没有返回值。
3、构造方法不需要我们手动调用,会在new这个类的对象的时候自动调用构造方法。
4、构造方法用来对对象进行初始化。
5、一个类至少要有一个构造方法,如果不写构造方法,编译器会自动生成一个不带参数的构造方法。
6、构造方法支持重载. 规则和普通方法的重载一致
构造的先后顺序:
1、先执行构造就地初始化的部分
2、再执行构造代码块中的部分
3、最后再执行构造方法中的部分
注意哦!!!
普通的构造代码块,每次创建对象都执行,static修饰的代码块,只在类加载的时候才执行,和创建对象无关!
类加载:类加载的过程
class Person{
private String name;//实例成员变量
private int age;
private String sex;
//默认构造函数 构造对象
public Person(){
this.name="yinger";
this.age=20;
this.sex="女";
}
//带有三个参数的构造函数:
public Person(String name,int age,String sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
public void show() {
System.out.println("我叫"+name+"今年"+age+"岁,性别:"+sex);
}
}
public class Main {
public static void main(String[] args) {
Person p1=new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
p1.show();
Person p2=new Person("shuaizai",22,"男");//调用带有三个参数的构造函数
p2.show();
}
}
运行结果:
我叫yinger今年20岁,性别:女
我叫shuaizai今年22岁,性别:男
this关键字:
this表示当前对象的引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法,相当于“我”这样的代词。
1、this能够访问成员变量
2、this也能够调用方法
3、this()就能够调用构造方法
class Person{
private String name;//实例成员变量
private int age;
private String sex;
//默认构造函数 构造对象
public Person(){
this("ergouzi",12,"男");//this调用构造函数
}
//这两个构造函数之间的关系为重载。
public Person(String name,int age,String sex) {
this.name=name;//带三个参数的构造函数
this.age=age;
this.sex=sex;
}
public void show() {
System.out.println("我叫"+name+"今年"+age+"岁,性别:"+sex);
}
}
public class Main {
public static void main(String[] args) {
Person p1=new Person();//调用不带参数的构造函数
p1.show();
}
}
运行结果:
我叫ergouzi今年12岁,性别:男
我们会发现在构造函数的内部,我们可以使用this关键字,构造函数是用来构造对象的,对象还没有构造好,我们就使用了this,那this还代表当前对象吗?当然不是,this代表的是当前对象的引用。
二、toString方法
可以使用 toString 这样的方法来将对象自动转成字符串
class Person{
private String name;//实例成员变量
private int age;
private String sex;
public Person(String name,int age,String sex) {
this.name=name;//带三个参数的构造函数
this.age=age;
this.sex=sex;
}
public void show() {
System.out.println("我叫"+name+"今年"+age+"岁,性别:"+sex);
}
public String toString() {
return "Person{"+"我叫"+name+"今年"+age+"岁,性别:"+sex+'}';
}
}
public class Main {
public static void main(String[] args) {
Person p1=new Person("shuaizai",22,"男");//调用不带参数的构造函数
p1.show();
System.out.println(p1);
}
}
运行结果:
我叫shuaizai今年22岁,性别:男
Person{
我叫shuaizai今年22岁,性别:男}
注意!!!
1、toString 方法会在 println 的时候被自动调用.
2、 将对象转成字符串这样的操作我们称为 序列化.
3、toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法实 现我们自己版本的转换字符串方法. (关于继承和重写这样的概念, 我们后面会重点介绍).
4、 @Override 在 Java 中称为 “注解”, 此处的 @Override 表示下面实现的 toString 方法是重写了父类的方法.
5、 IDEA快速生成Object的toString方法快捷键:alt+f12(insert)