this关键字
当一个行为/动作执行的过程中需要对象参与的,那么这个方法一定要定义为‘实例方法’,不加static关键字。
- 1.this 是一个引用,一个变量,this变量保存了内存地址指向自身,this 存储在jvm堆内存中java对象内部
- 2.创建100个对象,每一个对象都有this,也就是说有100个不同的this
- 3.this可以出现在‘实例方法’中,this指向当前正在执行这个动作的对象。(this代表当前对象)
- 4.this不能使用在带有static的方法当中
理由如下:static的方法调用不需要对象,直接使用类名,所以执行过程中没有当前对象,不能使用this
解决:创建对象 xxx x=new xxx();
x.yyy;
例子:(变量)
public class Text{
//实例变量(引用.的方式)
int num=10;
//类成员变量
public static int num1=10;
//带有static的方法
public static void main(String[] args){
//没有当前对象
//创建对象
Text c=new Text();
c.num;
Text.num1;
}
例子(方法)
public class Text{
public static void main(String[] args){
Text.doSome();//a
doSome();//a
doOther();//错误 实例方法必须先创建对象,通过引用.的方式访问 this.不可 因为static下没有this
this.doOther();//错误
//解决方法
Text c=new Text();
c.doOther();
}
//带有static 静态方法 类名. 就可以访问
public static void doSome(){
System.out.println("a");
}
// 实例方法
public void doOther(){
System.out.println("b");
}
}
在带有static 的方法中不能‘直接’访问实例变量和实例方法
因为实例方法和实例变量需要对象的存在
而static的方法当中没有this的,也就是当前对象是不存在的
自然也是无法访问当前对象的实例变量和实例方法
//实例方法
public void doOther(){
//this表示当前对象
System.out.println("b");
}
public void run(){
//在大括号中代码执行过程中一定存在当前对象
this.dother();
System.out.println("a");
}
this.不能省略
用来区分局部变量和局部变量时
自定义日期类型
1.可以用在实例方法中,代表当前对象【this.】
2。可以使用在构造方法中,通过当前构造方法调用其他构造方法【this(实参)】
注意:this()这种语法只能出现在构造函数第一行
ps:带有static的方法,其实既可以采用类名的方式访问,也可以采用引用的方式访问,但采用引用的方式访问,实际上执行的时候和所指向的对象无关