文章詳情頁(yè)
淺談 Java 中 this 的使用
瀏覽:23日期:2024-06-20 13:32:14
內(nèi)容: 1. this是指當(dāng)前對(duì)象自己。 當(dāng)在一個(gè)類中要明確指出使用對(duì)象自己的的變量或函數(shù)時(shí)就應(yīng)該加上this引用。如下面這個(gè)例子中:public class A { String s = 'Hello'; public A(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) { new A('HelloWorld!'); }}運(yùn)行結(jié)果:s = HelloWorld!1 -> this.s = Hello2 -> this.s = HelloWorld! 在這個(gè)例子中,構(gòu)造函數(shù)A中,參數(shù)s與類A的變量s同名,這時(shí)如果直接對(duì)s進(jìn)行操作則是對(duì)參數(shù)s進(jìn)行操作。若要對(duì)類A的變量s進(jìn)行操作就應(yīng)該用this進(jìn)行引用。運(yùn)行結(jié)果的第一行就是直接對(duì)參數(shù)s進(jìn)行打印結(jié)果;后面兩行分別是對(duì)對(duì)象A的變量s進(jìn)行操作前后的打印結(jié)果。2. 把this作為參數(shù)傳遞 當(dāng)你要把自己作為參數(shù)傳遞給別的對(duì)象時(shí),也可以用this。如:public class A { public A() { new B(this).print(); } public void print() { System.out.println('Hello from A!'); }}public class B { A a; public B(A a) { this.a = a; } public void print() { a.print(); System.out.println('Hello from B!'); }}運(yùn)行結(jié)果:Hello from A!Hello from B! 在這個(gè)例子中,對(duì)象A的構(gòu)造函數(shù)中,用new B(this)把對(duì)象A自己作為參數(shù)傳遞給了對(duì)象B的構(gòu)造函數(shù)。3. 注意匿名類和內(nèi)部類中的中的this。 有時(shí)候,我們會(huì)用到一些內(nèi)部類和匿名類。當(dāng)在匿名類中用this時(shí),這個(gè)this則指的是匿名類或內(nèi)部類本身。這時(shí)如果我們要使用外部類的方法和變量的話,則應(yīng)該加上外部類的類名。如下面這個(gè)例子:public class A { int i = 1; public A() { Thread thread = new Thread() { public void run() { for(;;) { A.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 A(); }} 在上面這個(gè)例子中, thread 是一個(gè)匿名類對(duì)象,在它的定義中,它的 run 函數(shù)里用到了外部類的 run 函數(shù)。這時(shí)由于函數(shù)同名,直接調(diào)用就不行了。這時(shí)有兩種辦法,一種就是把外部的 run 函數(shù)換一個(gè)名字,但這種辦法對(duì)于一個(gè)開發(fā)到中途的應(yīng)用來(lái)說(shuō)是不可取的。那么就可以用這個(gè)例子中的辦法用外部類的類名加上 this 引用來(lái)說(shuō)明要調(diào)用的是外部類的方法 run。 from:javaidea Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽:
Java
相關(guān)文章:
1. Python如何實(shí)現(xiàn)感知器的邏輯電路2. JS實(shí)現(xiàn)表單中點(diǎn)擊小眼睛顯示隱藏密碼框中的密碼3. JS錯(cuò)誤處理與調(diào)試操作實(shí)例分析4. asp讀取xml文件和記數(shù)5. python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡(jiǎn)單處理和分析6. 原生js實(shí)現(xiàn)的觀察者和訂閱者模式簡(jiǎn)單示例7. Python ellipsis 的用法詳解8. 在終端啟動(dòng)Python時(shí)報(bào)錯(cuò)的解決方案9. vue 驗(yàn)證兩次輸入的密碼是否一致的方法示例10. xml中的空格之完全解說(shuō)
排行榜
