构造方法、this 关键字
构造方法
语法格式:【public】类名(【参数】){ }
构造函数无返回值,不用写也不能写void,最多用public、protected、private修饰就可以了
类的构造方法和普通方法一样可以进行重载。
普通方法是这样调用的:
方法修饰符中有 static 的时候:类名.方法名(实参列表);
方法修饰符列表中无 static 的时候:引用.方法名(实参列表);
构造函数的作用:
1.创建对象依赖构造函数
一个类没有手动写任何构造函数,也会有一个构造函数(默认的,隐式的,无参的),为了满足创建对象的依赖;
一个类如果手动写了构造函数,就不会再生成那个(默认的,隐式的,无参的)构造函数了;
一个类如果写了有参构造,建议把无参构造也写出来!
2. 给属性初始化
public class Student { String stuID; String name;
public Student(){ System.out.println("我是无参构造。。。");} public Student(String stuID1,String name1){ stuID=stuID1; name=name1; } }
//--------------------------------------------------------- //无参构造也可以给属性初始化(了解即可!) public Student(){ stuID="0x112"; name="孙权"; }
设置带有参数的构造方法:作用是为了给成员变量做初始化
使用有参构造方法来创建对象
这时我们试着去使用无参构造方法来创建对象,发现已经使用不了了
通过以上的测试,得出这样一个结论(这是java 中语法的规定,记住就行):当一个类没有显示的定义任何构造方法的时候,系统默认提供无参数构造方法,当显示的定义构造方法之后,系统则不再提供无参数构造方法。无参数构造方法又叫做缺省构造器,或者默认构造方法。
-------------------------------------------------------------
this关键词
this使用场景:
1.默认使用
package test; public class java01 { String name; public void fun(){ System.out.println(name); //默认使用 //System.out.println(this.name); } }
2.有参构造对属性初始化,this.属性=属性
set方法,this.属性=属性
区分成员变量和局部变量,this不可省略!
3.构造函数之间相互调用使用 this(【实参】); 且必须放第一行
this:当前对象
类的非static方法中使用 this,表示当前对象,这个方法被哪个对象调用,this就是哪个对象!
上面例子中,在fun()方法中使用了this,当p1调用fun()方法时,this就是指对象p1了。
语法:this(【实参】); 必须在第一行!
构造函数中没有递归,也不能相互调用,影响创建对象!
构造函数可以直接调用非构造函数!
public class Animal { public Animal(){ this(20); //调用 有参构造,必须放首行 System.out.println("我是无参构造。。。"); } public Animal(int a){ this.fun1(); //调用 非构造函数 System.out.println("我是有参构造。。。"+a); } public void fun1(){ System.out.println("fun1..."); } } //------------------------------------------------ package cn.bjpowernode.javase01.day10.thisdemo03; public class TestAnimal { public static void main(String[] args) { Animal a1 = new Animal(); } }
执行结果:
fun1...
我是有参构造。。。20
我是无参构造。。。
public class Cat { String name; int age; public Cat(){ // this.name="咖啡猫"; // this.age=3; this("咖啡猫",3); //意义:无参构造去调用有参构造,提高代码的重复利用率! } public Cat(String name,int age){ //有参构造对属性初始化,this.属性=属性 this.name=name; this.age=age; } }