永发信息网

java 静态内部匿名类中为什么可以应用this关键字,且引用的this指代什么?

答案:2  悬赏:0  手机版
解决时间 2021-01-29 08:48
  • 提问者网友:沉默的哀伤
  • 2021-01-28 22:03
public class ThreadLocalGCDemo {
static volatile ThreadLocal<SimpleDateFormat> tl=new ThreadLocal<SimpleDateFormat>(){
protected void finalize() throws Throwable{
System.out.println(this.toString()+" is gc1");
}
};

static volatile CountDownLatch latch=new CountDownLatch(10000);
public static class ParseDate implements Runnable{

int i=0;

public ParseDate(int i){
this.i=i;
}

@Override
public void run() {
// TODO Auto-generated method stub
try {
if(tl.get()==null){
tl.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"){

@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println(this.toString()+" is gc2");
}

});
System.out.println(Thread.currentThread().getId()+":create SimpleDateFormat");
}
Date d=tl.get().parse("2015-03-29 19:29:"+i%60);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
latch.countDown();
}
}

}
}
这是一个类的代码 代码中两个this分别指代什么?为什么静态的内部匿名类里可以有this?
最佳答案
  • 五星知识达人网友:野慌
  • 2021-01-28 22:48
package TestUi;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;

public class ThreadLocalGCDemo {
static volatile ThreadLocal<SimpleDateFormat> tl=new ThreadLocal<SimpleDateFormat>(){
protected void finalize() throws Throwable{
System.out.println(this.toString()+" is gc1");//这里指的就是这个类自身(static 关键字原理) 也可以写成 ThreadLocalGCDemo.toString()
}
};

static volatile CountDownLatch latch=new CountDownLatch(10000);
public static class ParseDate implements Runnable{

int i=0;

public ParseDate(int i){
this.i=i; //这里和上面的那个方法指代的有所不同,是实例化之后的这个类 ,ThreadLocalGCDemo cc = new ThreadLocalGCDemo 这个this 指的就是 cc 了 , 
}

@Override
public void run() {
// TODO Auto-generated method stub
try {
if(tl.get()==null){
tl.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"){

@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println(this.toString()+" is gc2");
}

});
System.out.println(Thread.currentThread().getId()+":create SimpleDateFormat");
}
Date d=tl.get().parse("2015-03-29 19:29:"+i%60);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
latch.countDown();
}
}

}
}
全部回答
  • 1楼网友:有你哪都是故乡
  • 2021-01-28 23:12
1、当在匿名类中用this时,这个this则指的是匿名类或内部类本身。 2、this.i=i 是指 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this是当前对象自己)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯