比如public void f() {}这个方法..
你在里面写this.name = "tom"
这个this就表是调用这个f()方法的对象..
这个f方法表面上看没有参数..
其实有一个参数..就是调用这个方法的对象.他被作为隐式参数传给了这个方法..在方法体类使用this来使用这个隐式参数..也可以省略..比如你直接写name = "tom"..前提是这个对象有name这个属性哈..
我给你写个简单的例子吧..
public class ThisTest {
private String name
public void f() {
this.name = "ss"//这个和下面那句的效果是一样的都是对调用这个方法的对象的name属性赋值..
name = "tom"
this.a()//这个和下面的是一样的..都是调用(说执行也可以)--调用这个f()方法的对象--的a()方法..
a()//默认就是让调用f()方法对象来调用a()方法
}
public static void staticF() {
//下面这两个都是不行的..因为static方法是类方法不是对象方法..不需要对象就可以访问..因此就不存调用这个方法的对象..所以就没有this了.为什么直接a()也不行呢..因为a()是非静态方法..必须要对象才能调用..
//this.a()
//a()
}
public void a() {}
}
另外..编程思想最好基础比较好了再看..那样收获才大..
this指直译是“这个”,在java中指“当前的”。不管在哪里,只要用到this,指的一定就是当前的这个对象。最常见的用法是在写java bean中。比如下面的代码
public class Student{private String name
private int age
public Student(){}
public Student(String name,int age){
this()
this.setName(name)
this.age = age
}
public void setName(String name){
this.name = name
}
public int getAge() {
return this.age
}
}
上面的代码是一个java bean。所谓的java bean就是一个类,这个类有一些属性,方法只有这些属性的Getter 或者Setter (从Object类继承的方法不算在此列)。
这个bean有两个属性,在构造器中为属性赋值的时候写的this.setName(name).意思是调用当前你创建的这个对象的Setter给这个对象的属性赋值。而setName里面的this.name = name这一句,等号之前的this.name表示当前对象的name,也就是在类里面定义的private String name这个变量,而等号之后的name表示从外界调用这个方法时候传进来的参数。所以这句话的意思就是将外界传来的字符串变量的值赋给当前对象的name属性。
那么构造器第一行的this()是做什么的呢?这句话是调用当前这个对象的无参构造,就是调用上面的public Student(){}这个构造器。在这段代码里this()体现不出来什么作用。但是我们知道构造器的作用是在构造对象的时候给属性赋值的。如果上面个无参构造里面写一些赋值语句的话那么这里就可以避免代码的重复了。但是请注意,调用this()的时候一定要写在该方法的第一行,否则会报错。
另外,this关键字不能使用在有static关键字修饰的方法和代码块里面。因为static是这个类的所有对象共用的,而this指的只是当前这个对象的“私人”的一些东西,在属性上面就冲突了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)