this关键字
1、什么是this?
/*
* this关键字:
* 1.this是什么?
* this是一个引用类型
* 在对中的每一个Java对象上都有this
* this保存内存地址指向自身
*
* 2.this能用在什么地方
* 第一:this可以应用在成员方法中
*
* 第二:this可以应用在构造方法中
* 语法:this(实参)
* 通过一个构造方法去调用另一个构造方法
* this(实参);语句必须出现在构造方法的第一行
* 作用:使代码得到更简便的重用
*/
package gthis关键字;
public class ThisTest01 {
public static void main(String[] args){
//创建MyDate类对象
MyDate u1 =new MyDate();
System.out.println(u1.year+"年"+u1.month+"月"+u1.day+"日");
MyDate u2 =new MyDate(2019,9,18);
System.out.println(u2.year+"年"+u2.month+"月"+u2.day+"日");
}
}
class MyDate{
//属性
int year;
int month;
int day;
//构造方法
//需求:在创建日期对象的时候,默认日期是1997-1-1
MyDate(){//无参数的构造方法尽量也写出来
this(1997,1,1);
}
MyDate(int _year,int _month,int _day){
year=_year;
month=_month;
day=_day;
}
}
2、this用在成员方法中
/*
* this用在成员方法中
*/
package gthis关键字;
public class ThisTest02 {
public static void main(String[] args){
//创建对象
Employ w = new Employ("Smith",15545);
w.work();
//创建对象
Employ w1= new Employ("Bob",15845);
w1.work();
w.m1();
}
}
class Employ{
//员工名字
String name;
//编号
int num;
Employ(){}
Employ(String _name,int _num){
name=_name;
_num=num;
}
//提供一个成员工作的方法
public void work(){
//下面的name是成员变量,访问它用“引用.”
//所以下面的name=this.name,this省略了
/*
* 所以this用在成员方法中,谁(w or w1)去调用这个方法,this就代表谁
* this指的就是当前对象
*/
System.out.println(name+"在工作");
}
//成员方法1
public void m1(){
this.m2();//this.=w.
m2();//这两个调用效果一致,集在成员方法中this.可省略
}
//成员方法2
public void m2(){
System.out.println("测试");
}
}
3、this提供成员变量和局部变量
/*
* this可以用来提供局部变量和成员变量
*/
package gthis关键字;
public class ThisTest03 {
public static void main(String[] args){
Manager u1 = new Manager();//调用无参数的构造方法,系统默认赋值name=null
u1.setManager("钟荣杰");//但此处又调用了赋值方法name="钟荣杰"
System.out.println(u1.getManager());
Manager u2 = new Manager("这句话啊睡觉啊上课卡是假的加大数据");
System.out.println(u2.getManager());
}
}
class Manager{
//Field
private String name;
//constructor
Manager(){}
Manager(String name){//此构造方法也是一个赋值语句,与下面的一样
this.name=name;//所以调用构造方法,再调用getManager方法
}
//Method
public void setManager(String name){
this.name=name;//加个this.就知道前面的name是成员变量了
}
public String getManager(){
return name;//此处的this.可以省略
}
}
4、this不能用在静态方法中
/*
* this不能用在静态方法中
* 1.静态方法的执行根本不需要java对象的存在。直接使用 类名. 的方式
* 而this代表的是当前对象。所以静态方法中根本没有this
*
*/
package gthis关键字;
public class Test01 {
//如:
String skr;
//入口
public static void main(String[] args){
//访问name(成员变量)用 引用.
//访问静态方法用 类名.
Person.m1();//m1是一个静态方法
//skr是一个成员变量,只能用 引用. 去访问
//在静态方法中不能System.out.println(skr);
//而应该
Test01 a = new Test01();
System.out.println(a.skr);//null
}
}
class Person{
//Field
String name;
Person(){}
Person(String name){
this.name=name;
}
//静态方法
public static void m1(){
//System.out.println(name);Error:不能对非静态字段 name 进行静态引用
//要想访问name:
Person n=new Person("科技开发建设");
System.out.println(n.name);
}
}