this关键字
1、this是一个关键字,全部小写
2、this是什么?在内存方面是怎么样的?
一个对象一个this
this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身。
所以,严格意义上来说,this代表的就是“当前对象”。
3、this只能使用在实例方法中,不能用在静态方法中。,谁调用这个实例方法,this就是谁。所以this代表的是当前的对象。
4、"this."大部分情况下是可以省略的;
只要负责调用的方法a和被调用的方法b在同一个类当中,”this.“可以省略,”类名.“也可以省略
为什么this不能使用在静态方法中?
this代表当前对象,静态方法中不存在当前对象
public class ThisTest01 {
public static void main(String[] args) {
Customer c1 = new Customer("张三");
c1.shopping(); //c1是局部变量
Customer c2 = new Customer("李四");
c2.shopping(); //c2也是局部变量
Customer.dosome();
}
}
//顾客类
class Customer{
//属性
//实例变量
String name;
//构造方法
public Customer(){}
public Customer(String s){
name = s;
}
//顾客购物的方法
//实例方法,需要先创建对象才能调用
public void shopping(){
//这里的this是谁?this是当前对象
//c1调用shopping(),this是c1
//c2调用shopping(),this是c2
//this如果写成c1或c2,程序报错,因为c1和c2在主方法里,是局部变量,在这里不能用
//"this."可以省略不写
//"this."用在实例方法中,代表的就是当前对象。省略的话,还是默认访问“当前对象”的name
System.out.println(this.name + "正在购物!");
}
public static void dosome(){
//this代表的是当前对象,而静态方法的调用不需要对象。二者矛盾了。
//所以静态方法不允许用this
//System.out.println(this);
}
}
this什么时候不能省略?
在实例方法中,或构造方法中,为了区分局部变量和实例变量,这种情况下,"this."是不可以省略的
public class ThisTest02 {
public static void main(String[] args) {
Student s = new Student();
s.setName("张三");
s.setNo(111);
System.out.println(s.getName());
System.out.println(s.getNo());
Student s2 = new Student(2222,"李四");
System.out.println("学号:" + s2.getNo() );
System.out.println("姓名:" + s2.getName());
}
}
//学生类
class Student{
//学号
private int no;
//姓名
private String name;
//构造方法
public Student(){
}
public Student(int no,String name){ //就近原则
//no = no; //这两个no都是局部变量no,和实例变量no没有关系
//name = name; //这两个name都是局部变量name,和实例变量name没有关系
//no是局部变量,
//this.no是实例变量
this.no = no; //this表示当前对象的no, "this."的作用是---区分局部变量和实例变量
this.name = name;
}
public void setNo(int no){
this.no = no;
}
public int getNo(){
return no;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
//getName()实际上获取的是当前对象的名字,
//严格来说,这里是有一个 this. 的 ,只不过这里可以省略
}
}
this用在构造方法中
1、this除了可以用在实例方法中,也可以用在构造方法中。
2、新语法:通过当前的构造方法去调用另一个本类的构造方法,可以使用以下语法格式:
this(实际参数列表):
通过“构造方法1”,去调用"构造方法2",可以做到代码复用。
注意:
"构造方法1"和"构造方法2"都是在同一个类中
3、Q:this() 这个语法的作用是什么?
A:代码复用
4、"this()" 在一个构造方法里只能写一行,并且只能写在构造方法的第一行。
public class ThisTest03 {
public static void main(String[] args){
Date d = new Date();
d.detail();
Date d1 = new Date(2008,8,8);
d1.detail();
}
}
class Date{
private int year;
private int month;
private int day;
public Date(){
/**
* this.year = 1970;
* this.month = 1;
* this.day = 1;
*/
this(1970,1,1); //调用当前类的另一个和他功能相同的构造方法
}
public Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public void setYear(int year){
this.year = year;
}
public int getYear(){
return year;
}
public void setMonth(int month){
this.month= month;
}
public int getMonth(){
return month;
}
public void setDay(int day) {
this.day = day;
}
public int getDay() {
return day;
}
public void detail(){
System.out.println("年:" + getYear() + "月:" + getMonth() + "日:" + getDay());
}
}
标签:name,构造方法,no,int,void,关键字,public
From: https://www.cnblogs.com/sevenxx/p/16721549.html