java中this用法实例,java this关键字的使用。this关键字,关于它的解释,可以概括为:哪一个对象在用这段代码,this就代表谁。
例如,“人”这个类,张三说,“我”的“名字”,这个“我”字就相当于“this”。
举个列子,一目了然。
public class ThisDemo {
public static void main(String[] args) {
ThisPerson p1 = new ThisPerson();
p1.name = “zhangsan”;
p1.talk(“lisi”);
p1.say(“lisi”);
}
}
class ThisPerson{
String name ;
public void talk(String name){
System.out.println(“My name is “+name);
}
public void say(String name){
System.out.println(“My name is “+this.name);
}
}
主要用在方法传递时,如talk方法,传了个this进来,那么方法体中的name指的是传进来的,还是这个类的?
结果输出:
My name is lisi
My name is zhangsan
如果要说高级一点,可以用线程同步来说:
public class ThreadSynA{
public static void main(String[] args) {
/*ThreadSynAA ti = new ThreadSynAA();
Thread t1 = new Thread(ti);
Thread t2 = new Thread(ti);*/
Thread t1 = new ThreadSynAB();
Thread t2 = new ThreadSynAB();
t1.start();
t2.start();
}
}
class ThreadSynAA implements Runnable{
int a = 100;
public void run(){
while(true){
synchronized(this){
System.out.println(Thread.currentThread().getName()+”–”+a);
a–;
Thread.yield();
if(a<1){
break;
}
}
}
}
}
class ThreadSynAB extends Thread{
int a = 100;
public void run(){
while(true){
synchronized(this){
System.out.println(Thread.currentThread().getName()+”–”+a);
a–;
Thread.yield();
if(a<1){
break;
}
}
}
}
}
用ThreadSynAB创建的线程,是不能同步的,而ThreadSynAA则可以!
因为ThreadSynAA中的this代表这个类的对象,可以看到,我们只创建了一个ThreadSynAA,也就是只写了一次new ThreadSynAA()。
ThreadSynAA ti = new ThreadSynAA();
Thread t1 = new Thread(ti);
Thread t2 = new Thread(ti);
Thread t1 = new ThreadSynAB();
Thread t2 = new ThreadSynAB();
而ThreadSynAB却new了两次,很显然进入run方法时会有两个不同的对象!