随着时代与科技的进步与发展,java的应用越加广泛和深刻。今天就来为大家介绍一下,在java中的this这个关键字该如何使用,并且通过具体的代码来为大家详细展示。
首先,我们需要了解的是:
一、当成员变量和局部变量重名,在方法中使用this时,表示的是该方法所在类中的成员变量。也就是说this是当前对象自己。代码展示如下:
public class Hello { String s = "Hello"; public Hello(String s) { System.out.println("s = " + s); System.out.println("1 -> this.s = " + this.s); this.s = s; //把参数值赋给成员变量,成员变量的值改变 System.out.println("2 -> this.s = " + this.s); } public static void main(String[] args) { Hello x = new Hello("HelloWorld!"); System.out.println("s=" + x.s); //验证成员变量值的改变 } } 结果为: s = HelloWorld! - > this.s = Hello - > this.s = HelloWorld! s = HelloWorld!
在上面这个例子中,我们可以很清晰地看出来,构造函数Hello中,参数s与类Hello的成员变量s同名,这时如果直接对s进行操作则是对参数s进行操作。
二、把自己当作参数传递时,也可以用this。这个时候this作为当前参数进行传递,代码展示如下:
class A { public A() { new B(this) .print(); // 调用B的方法 } public void print() { System.out.println("HelloAA from A!"); } } class B { A a; public B(A a) { this.a = a; } public void print() { a.print(); //调用A的方法 System.out.println("HelloAB from B!"); } } public class HelloA { public static void main(String[] args) { A aaa = new A(); aaa.print(); B bbb = new B(aaa); bbb.print(); } } 结果为: HelloAA from A! HelloAB from B! HelloAA from A! HelloAA from A! HelloAB from B!
在上面这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。
三、有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这个时侯如果我们要使用外部类的方法和变量的话,就需要加上外部类的类名。代码展示如下:
public class HelloB { int i = 1; public HelloB() { Thread thread = new Thread() { public void run() { for (int j = 0; j < 20; j++) { HelloB.this.run(); //调用外部类的方法 try { sleep(1000); } catch (InterruptedException ie) {} } } }; // 注意这里有分号 thread.start(); } public void run() { System.out.println("i = " + i); i++; } public static void main(String[] args) throws Exception { new HelloB(); } }
在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的run函数里用到了外部类的run函数。这时由于函数同名,直接调用就不行了。这种情况下有两种办法:1.把外部的run函数换一个名字;2.用这个例子中的办法,用外部类的类名加上this引用来说明要调用的是外部类的方法run。
四、在构造函数中,通过this可以调用同一类中别的构造函数,代码展示如下:
public class ThisTest { ThisTest(String str) { System.out.println(str); } ThisTest() { this("this测试成功!"); } public static void main(String[] args) { ThisTest thistest = new ThisTest(); } }
为了进一步明确说明this的用法,再举一个例子,代码如下:
public class ThisTest { private int age; private String str; ThisTest(String str) { this.str = str; System.out.println(str); } ThisTest(String str, int age) { this(str); this.age = age; System.out.println(age); } public static void main(String[] args) { ThisTest thistest = new ThisTest("this测试成功", 25); } } 结果为: this测试成功 25
同时需要注意的是,⑴在构造调用另一个构造函数,调用动作必须置于最起始的位置;⑵不能在构造函数以外的任何函数内调用构造函数; ⑶在一个构造函数内只能调用一个构造函数。
五、this同时传递多个参数,代码展示如下:
public class TestClass { int x; int y; static void showtest(TestClass tc) { //实例化对象 System.out.println(tc.x + " " + tc.y); } void seeit() { showtest(this); } public static void main(String[] args) { TestClass p = new TestClass(); p.x = 9; p.y = 10; p.seeit(); } } 结果为: 9 10
这里面的showtest(this), this就是把当前实例化的p传给了showtest()方法,才得以运行。
以上就是关于在java 中的this使用方法的详细解读。想要了解更多java经典例子,敬请关注奇Q工具网。
推荐阅读:
在java中如何生成webservice的接口?详细图文解析