java内部类中的this
⑴ java:关于Java中的this,这里为什么加不加都一样呢
this指直译是“这个”,在java中指“当前的”。不管在哪里,只要用到this,指的一定就是当前的这个对象。最常见的用法是在写java bean中。比如下面的代码
publicclassStudent{
privateStringname;
privateintage;
publicStudent(){}
publicStudent(Stringname,intage){
this();
this.setName(name);
this.age=age;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnthis.age;
}
}上面的代码是一个javabean。所谓的javabean就是一个类,这个类有一些属性,方法只有这些属性的Getter或者Setter(从Object类继承的方法不算在此列)。
这个bean有两个属性,在构造器中为属性赋值的时候写的this.setName(name).意思是调用当前你创建的这个对象的Setter给这个对象的属性赋值。而setName里面的this.name=name;这一句,等号之前的this.name表示当前对象的name,也就是在类里面定义的privateStringname这个变量,而等号之后的name表示从外界调用这个方法时候传进来的参数。所以这句话的意思就是将外界传来的字符串变量的值赋给当前对象的name属性。
那么构造器第一行的this()是做什么的呢?这句话是调用当前这个对象的无参构造,就是调用上面的publicStudent(){}这个构造器。在这段代码里this()体现不出来什么作用。但是我们知道构造器的作用是在构造对象的时候给属性赋值的。如果上面个无参构造里面写一些赋值语句的话那么这里就可以避免代码的重复了。但是请注意,调用this()的时候一定要写在该方法的第一行,否则会报错。
另外,this关键字不能使用在有static关键字修饰的方法和代码块里面。因为static是这个类的所有对象共用的,而this指的只是当前这个对象的“私人”的一些东西,在属性上面就冲突了。
⑵ JAVA中的this是什么意思
java里面this是指本身的意思,比如说在一个类里面this就代表自己本身这个类
⑶ Java中的this关键字请举个具体的例子来说明用它的好处
this
关键字表示的是当前类
比如
this.name
是指当前类的name属性,有些时候可以用于区分同名属性,如你在类里有个属性为name,有个方法里也有个属性叫name,你在该方法里使用this.name是指类属性,直接使用name则是指方法的name属性,这样不会混淆;
可以用this.method()调用本类的method()方法;
可以调用父类的方法和属性,比如你继承了某个类,在该类中你不能直接看到父类的方法和属性,你需要打开父类去查看他的方法和属性,这样比较麻烦,你可以直接用this.的方式查看到父类的方法和属性;
使用this关键字调用类方法和属性通常比较方便,比如你的类比较长,有时,你想调用某个方法或属性,你又忘了它的名称,直接使用this.的方式直接就能找到;
还有一点要注意,比如你有个类包含一个内部类,你在内部类使用this,则是指调用内部类的方法和属性,此时this不能调用到外部类的方法及属性。
⑷ java,类名.this
有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:
public
class
A
{
int
i
=
1;
public
A()
{
Thread
thread
=
new
Thread()
{
public
void
run()
{
System.out.println("内部类run");
A.this.run();//调用外部类的run方法,输出
外部类run
};
this.run();//调用内部类的run方法
thread.start();
}
public
void
run()
{
System.out.println("外部类run");
}
}
在上面这个例子中,
thread是一个匿名类对象,在它的定义中,它的run函数里用到了外部类的run函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的
run
函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用
外部类的类名加上this引用来说明要调用的是外部类的方法run。
⑸ java中this的含义
1、在一个类中,this可以表示该类的当前实例;例如:
public class Leaf {
private int i = 0;
Leaf increment() {
i++;
return this;
}
void print() {
System.out.println("i = " + i);
}
public static void main(String[] args) {
Leaf x = new Leaf();
x.increment().increment().increment().print();
}
} ///:~
2、若为一个类写了多个构造器,那么经常都需要在一个构造器里调用另一个构造器,以避免写重复的代码。这时可以使用this,例如:
//: Flower.java
// Calling constructors with "this"
public class Flower {
private int petalCount = 0;
private String s = new String("null");
Flower(int petals) {
petalCount = petals;
System.out.println(
"Constructor w/ int arg only, petalCount= "
+ petalCount);
}
Flower(String ss) {
System.out.println(
"Constructor w/ String arg only, s=" + ss);
s = ss;
}
Flower(String s, int petals) {
this(petals);
//! this(s); // Can''t call two!
this.s = s; // Another use of "this"
System.out.println("String & int args");
}
Flower() {
this("hi", 47);
System.out.println(
"default constructor (no args)");
}
void print() {
//! this(11); // Not inside non-constructor!
System.out.println(
"petalCount = " + petalCount + " s = "+ s);
}
public static void main(String[] args) {
Flower x = new Flower();
x.print();
}
} ///:~
而需要注意的是:在一个类A的内部类B中使用this它表示的并非是A.B的当前实例,而是A的当前实例;
