- 构造函数
this 关键字
1. 构造函数
class Person{ private String name; private int age; // 定义一个 Person 类的构造函数 Person() // 构造函数, 而且是空参数的. { System.out.println("person run"); } // 如果有的孩子一出生就有名字 Person(String n) { name = n; } // 如果有的孩子一出生既有名字,又有年龄 Person(String n, int a) { name = n; age = a; } public void speak() { System.out.println(name+":"+age); }}class Demo{ public static void main(String[] args) { Person p = new Person(); // 构造函数: 构建创造对象时,调用的函数.给对象进行初始化 Person p1 = new Person("旺财"); Person p2 = new Person("小强",20); p2.speak(); }}
特点:
- 函数名与类名相同
- 不用定义返回值类型
- 没有具体的返回值
作用: 可以给对象进行初始化.
备注:
- 创建对象都必须要通过构造函数初始化
- 一个类中如果没有定义过构造函数, 那么该类中会有一个默认的空参数构造函数. 如果在类中定义了指定的构造函数, 那么类中的默认构造函数就没有了.
一般函数和构造函数的区别
- 构造函数: 对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数: 对象创建后,需要该函数功能时才调用
- 构造函数: 对象创建时,会调用且只调用一次 一般函数: 对象创建后,可以被调用多次
- 构造函数首字母大写,一般函数首字母小写
什么时候定义构造函数
在描述事物时,该事物一存在就具备的一些内容,这些内容都定义在构造函数中.
构造函数的内存图解
构造函数细节
- 构造函数与一般方法 set 不冲突, 构造函数只在对象初始化的时候调用, 一般方法 set,需要时调用.
- 如果定义过构造函数, 默认的空构造函数就不存在了.
- 构造函数有 return 语句.
2. this 关键字
特点:
this 代表对象, 就是所在函数所属对象的引用.简单说: 哪个对象调用了 this 所在的函数, this 就代表哪个对象.
this 的应用
- 当成员变量和局部变量重名时,可以用关键字 this 来区分
class Person{ private String name; private int age; Person(String name) { this.name = name; } public void speak() { System.out.println(this.name+":"+this.age); // 注意 this 关键字 }}class Demo{ public static void main(String[] args) { Person p = new Person("旺财"); p.speak(); Person p1 = new Person("小强"); }}
- 构造函数与构造函数之间的访问
class Person{ private String name; private int age; Person(String name) { this.name = name; } Person(String name,int age) { // this.name = name; this(name); // 调用 Person(String name) 构造函数, 只能定义在构造函数的第一行 this.age = age; } public void speak() { System.out.println(this.name+":"+this.age); // 注意 this 关键字 }}
- 本类方法中调用本类对象
// 需求: 判断是否是同龄人class Person{ private String name; private int age; Person(String name) { this.name = name; } Person(String name) { // this.name = name; this(name); this.age = age; } // 判断是否是同龄人 public boolean compare(Person p) { return this.age == p.age; }}class Demo{ Person p1 = new Person("aa",30); Person p2 = new Person("xx",14); p1.compare(p2);}
参考资料: