this是一个引用,是一个变量。
每一个对象在执行这个动作时结果不一样,这个必须有对象的参与,所以在定义的时候不加static。实例变量必须通过对象的引用去访问。
完整的写法就算在定义类的时候也该是引用.name,name只是一种省略的方式,这个引用就是this。this可以是你设置的引用c1或者c2。
this关键字,在定义一个类的时候,是实例变量,不带static的时候, 是可以省略不写的。
带有static的时候:看的是要访问的是不是实例变量,而不是定义的方法带不带static
带有static的方法: 下面被注释的都不能访问。没有当前对象。
那该如何访问?
这是在另一个测试类中调用,执行得到的name是空,因为c这个引用被new出来的时候就是空。
执行结果为系统默认值空。
没出大括号变量也报错,不认识了。这个是对的。
想要访问这个num=10,必须再main方法中new一个thistest的对象,通过引用访问,但这个只能访问10.
调用带static的方法。类名点方法名,类名也可以省略。
调用实例方法必须用引用去调用。
这个tt.doother();在main方法里
在这里调用doother方法必须可以用this表示这个对象的doother。
run被调用时必须有对象,doother调用时也必须有对象,因为调用run时有对象,所以在run里可以调用doother。
this什么时候不能省略?
java有就近原则,下面的不加this,id=id和最上面的实例变量没关系了。
this的另一种用法:可以调用其他的构造方法。
综合例子:
用引用会警告但不会报错。不会出现空指针异常,就算t=null,下面的t.dosome()在运行时会被改成类名点dosome。
在没有statci的方法,实例对象的时候会出现this。
public class test {
public static void method1(){
//调用doSome
test.doSome();//使用完整方法
doSome();//使用省略方法
//调用doOther
test t = new test();//使用完整方法
t.doOther();
//使用省略方法,没有。
//访问i
System.out.println(t.i);
//System.out.println(i);会报错,没有当前对象,这是访问当前对象的代码。
}
public void method2(){
//调用doSome
test.doSome();//使用完整方法
doSome();//使用省略方法,也可以是this.doSome()
//调用doOther
this.doOther();//使用完整方法
doOther(); //使用省略方法
//访问i
System.out.println(this.i);//使用完整方法
System.out.println(i);//使用省略方法
}
public static void main(String[] args) {
//调用method1
test.method1();//使用完整方法
method1();//使用省略方法,调用方法和被调用方法在同一个类中,类名可以省略。
//调用method2
test t = new test();//使用完整方法
t.method2();
}
int i = 10;
public static void doSome(){
System.out.println("do some!");
}
public void doOther(){
System.out.println("do other!");
}
}