A. java中类名.this和这个类的对象有区别吗
this只能用于方法方法体内。当一个对象创建后,Java虚拟机就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。
因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。
并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this
B. 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。
C. java的.class和.this是什么什么是封闭类为什么只有封闭类才可以使用.this
你可以这样理解,.this是指当前运行时实例化的这个特定对象,因为只有封装的类才能实例化出对象,所以是有封装类才能使用.this;.class是运行时这个实例化对象的类信息,用于反射
D. java中的this语句
java中this有两种用法:
1、代表当前类
public class Dog{
private String name;
private float age;
public setName(String name){
this.name = name;
}
.......
}
这里的this就代表的当前的这个Dog类。this.name可以理解为dog.name,只是理解,不是等于。
2、在构造函数中的使用
public class Dog{
private String name;
private int age;
//有一个参数的构造函数
public Dog(String name){
this.name = name;
}
public Dog(String name,int age){
this.name = name;
this.age = age;
}
//这个无参构造方法里调用的有两个参数的构造方法,这个也就是this的第二种用法了!
public Dog(){
this("nihao",20);
}
}
E. 在java中类名.this得到的是什么
这个一般在内部类里面用。。类名.this表示 那个类名所代表的类的对象。。。
比如class A {
public void method(){
A.this就是表示A的对象。。在这种情况下和this是一样的
}
class B {
void method1() {
A.this还是表示A的对象。。但是这里是在内部类里面。。所以这里的this就是内部类B的对象了。。但是我们经常会在内部类里面调用外部的东西。。所以就用A.this这种方式就行了
}
}
}
F. JAVA中Class c = this;什么意思
将本类的实例赋给引用c
若该类名为A,引用为a,当执行到这句时,a的引用就赋给了c,谁执行,就把谁赋给c
G. java里的“this”到底是什么意思
this为一系统资源,只允许用户读而不允许写,它存放当前对象的地址(引用)。
this变量有以下作用:
1. 构造方法重用:
public class Rectangle{
public Rectangle(Location at, Shape size) {…}
public Rectangle(Shape size,Location at){
this(at, size); }
public Rectangle(Location at) {
this(at, new Shape(100,100));
}
public Rectangle(Shape size) {
this(size, new Location(1,1));
}
public Rectangle() {
this(new Location(1,1), new Shape(100,100));
}
}
2、消除歧义:
Location{
private int x;
private int y;
public Location(int x,int y) {
this.x=x;
this.y=y;
}
……
}
3、返回对象-链式方法调用:
public class Count {
private int i = 0;
Count increment() {
i++;
return this; //返回对象的地址,所以我们可以链式访问它
}
void print() {
System.out.println("i = " + i);
}
}
public class CountTest{
public static void main(String[] args) {
Count x = new Count();
x.increment().increment().print();
}
}
4、作为参数传递"this”变量-进行回调:
假设有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接受一个代表其所在容器的参数。例如:
class Container
{
Component comp;
public void addComponent()
{
comp = new Component(this); //代表你所创建的对象,因为它要用到.
}
}
class Component
{
Container myContainer;
public Component(Container c)
{
myContainer = c;
}
}
其中我们开发中最常用到的地方是第二点,消除歧义。
比方说有类
public class A
里面有几个变量
private String aa,
private String bb;
this 在这里就代表A ,其实它是对对象A的引用。
我们在用到aa或者bb的时候,this.aa 和 直接用aa 是没有区别的。
但是假如你在某个方法里也有个变量aa,比如:
public void dosomething(String aa){
this.aa = aa;
//这个时候就this.aa 代表对象A中的变量,而不加this的话,代表方法中的变量。
}