三、构造函数
特点:
对象一建立就会调用与之对应的构造函数。
作用:
可以用于给对象进行初始化
构造函数的小细节:
当一个类中没有定义构造函数是,那么系统会默认给该类加入一个空参数的构造函数
当在类中自定义了构造函数之后,默认的构造函数就没有了
举例:
class Person{
Person(){
System.out.println("person run");
}
}
class PersonDemo2{
public static void main(String[] args){
Person p = new Person();
}
}
构造函数重载:
举例:
class Person{
private String name;
private int age;
/*Person(){
System.out.println("A:name = "+name+",age="+age);
}*/
Person(String n ){
name = n;
System.out.println("B:name = "+name+",age="+age);
}
Person(String n ,int a){
name = n;
age = a;
System.out.println("B:name = "+name+",age="+age);
}
}
class PersonDemo2{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person("lisi");
Person p3 = new Person("lisi",10);
}
}
注意:如果把下面的两句以及无参构造函数都注释掉的话,编译会报错
原因:因为Person类中已经有了构造函数,所以不会再默认添加无参构造函数。所以找不到无参构造函数
Person p2 = new Person("lisi");
Person p3 = new Person("lisi",10);
构造函数与一般函数的区别:
(1)写法上不同。
(2)在运行上也不同,构造函数是在对象一建立就运行,给对象初始化。
而一般方法是对象调用才执行。
(3)一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。
什么时候定义构造函数?
当分析事物时,改事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中
例如:人一出生就得有姓名。
构造代码块:
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象的初始化。
构造代码块中定义的是不同对象共性的初始化内容。
举例:
class Person{
private String name;
private int age;
//构造代码块(不同对象的共性放在构造代码块)
{
System.out.println("person code run!");
}
/*Person(){
System.out.println("A:name = "+name+",age="+age);
}*/
Person(String n ){
name = n;
System.out.println("B:name = "+name+",age="+age);
}
Person(String n ,int a){
name = n;
age = a;
System.out.println("B:name = "+name+",age="+age);
}
}
class PersonDemo2{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person("lisi");
Person p3 = new Person("lisi",10);
}
}
四、this 关键字
1、this:表面上,是用于区分局部变量和成员变量同名的情况。即this代表着当前对象的引用。
this为什么可以解决这个问题?
this到底代表是什么呢?
this:代表本类的对象,那到底代表哪一个?
this代表它所在函数所属对象的引用
简单说:哪个对象在调用this所在的函数,this就代表哪个对象
注意:变量出现同名情况下必须的加,在同一个类里的方法调用另外一个方法(同一个类),可以省略this
2.this的用法
当定义类中功能时,活该函数内部要用到调用该函数的对象是,这时候用this来表示这个对象
但凡本类功能内部使用了本类对象,都用this表示
举例:
class Person{
private int age;
Person(int age ){
this.age = age;
}
/*
需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人
*/
public boolean compare(Person p){
return this.age == p.age
}
}
class PersonDemo3{
public static void main(String[] args){
Person p1 = new Person(20); //给p1(this.age)的对象赋值20岁(age)
Person p2 = new Person(25);//给p2(this.age)的对象赋值25岁(age)
boolean b= p1.compare(p2); //这时compare()方法里的this代表了p1(因为this和p1指向同一个地址,指向了同一个对象)
System.out.println(b);
}
}
总结:1.先要看懂this代表什么
2.再具体用代码去实现
3.this关键字在构造函数间调用
说明:1.构造函数之间饿相互调用只能用this
2.this语句只能定义在构造函数的第一行,因为初始化要先执行。
注意:1.不允许两个构造函数间相互调用this语句,否则会出现死循环。
2.一般函数中不能定义this语句。
Class Person{
private String name;
private int name;
Person(String name){
this.name = name;
}
Person(String name,int age){
this(name);//代表调用只有一个参数的构造函数,也相当于p(name)
//但不能直接写Person(name);
this.age = age;
}
}
Class PersonDemo4{
public static void main(String[] args){
Person p = new Person("lisi",30);
Person p1 = new Person("lisi2",36);
}
}
|