面向对象之构造方法and this关键字
构造方法介绍
需要在创建对象的同时明确对象的属性值
l 构造方法的格式:
修饰符构造方法名(参数列表)
{
}
构造方法的体现:
1. 构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。
2. 构造方法名称必须和类名保持一致。
3. 构造方法没有具体的返回值。
构造方法的代码体现:
1 class Person {
2
3 // Person的成员属性age和name
4
5 private int age;
6
7 private String name;
8
9
10
11 // Person的构造方法,拥有参数列表
12
13 Person(int a, String nm) {
14
15 // 接受到创建对象时传递进来的值,将值赋给成员属性
16
17 age = a;
18
19 name = nm;
20
21 }
22
23 }
public class Person {
private String name;
private int age;
public Person(){
name="小猪佩奇";
age=16;
}
//构造方法的重载
public Person(String name,int age){
this.name=name;
this.age=age;
}
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 Test {
//构造方法调用:创建对象new的时候调用,而且一个对象只能调用一次
//构造方法:1.如果你这个类里面,一个构造方法也没有,那么这个类在编译时候,
//你的编译器会自动给你添加一个空参构造方法
//public Person(){}
//2.但如果你的这个类中有哟个或者多个构造方法,那么编译器就不给你添加了
public static void main(String[] args) {
Person p=new Person();
Person p1=new Person("琪琪国王",8);
System.out.println(p1.getName());
System.out.println(p1.getAge());
}
}
图解:
构造方法和一般方法区别
构造方法在对象创建时就执行了,而且只执行一次。
一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。
this关键字
构造方法之间的调用,可以通过this关键字来完成。
1. 构造方法调用格式:
this(参数列表);
构造方法的调用
class Person {
// Person的成员属性
private int age;
private String name;
// 无参数的构造方法
Person() {
}
// 给姓名初始化的构造方法
Person(String nm) {
name = nm;
}
// 给姓名和年龄初始化的构造方法
Person(String nm, int a) {
// 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
// 调用其他构造方法,需要通过this关键字来调用
this(nm);
// 给年龄初始化
age = a;
}
}
this的原理图解
可以在成员变量名前面加上this.来区别成员变量和局部变量
class Person { private int age; private String name; // 给姓名和年龄初始化的构造方法 Person(String name, int age) { // 当需要访问成员变量是,只需要在成员变量前面加上this.即可 this.name = name; this.age = age; } public void speak() { System.out.println("name=" + this.name + ",age=" + this.age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person("张三", 23); p.speak(); } }
this的应用
需求:在Person类中定义功能,判断两个人是否是同龄人
class Person {
private int age;
private String name;
// 给姓名和年龄初始化的构造方法
Person(String name, int age) {
// 当需要访问成员变量是,只需要在成员变量前面加上this.即可
this.name = name;
this.age = age;
}
public void speak() {
System.out.println("name=" + this.name + ",age=" + this.age);
}
// 判断是否为同龄人
public boolean equalsAge(Person p) {
// 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较
// 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
/*
* if(this.age == p.age) { return true; } return false;
*/
return this.age = p.age;
}
}