其他博文:
类名.class 类名.this 详解
结论:
- 当在一个类的内部类中,如果需要访问外部类的方法或者成员域的时候,如果使用 this.成员域(与 内部类.this.成员域 没有分别) 调用的显然是内部类的域 , 如果我们想要访问外部类的域的时候,就要必须使用 外部类.this.成员域。
- 传递 new 类名() 或 类名.this 效果等同。
类名.class 类名.this 测试:
package com.company.test; import java.lang.reflect.Method; public class TestA { public void tn() { System.out.println("外部类tn"); } String str = "123"; Thread thread = new Thread() { public void tn() { System.out.println("inner tn"); } public void run() { System.out.println("内部类run"); // 调用外部类的tn方法 TestA.this.tn(); // 调用内部类的tn方法 this.tn(); // 传递 new TestA() 或 TestA.this 效果等同 test1(new TestA()); test2(TestA.this); try { test3(TestA.class); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } // 反射测试 try { Class calss = Class.forName("com.jiuqi.test.TestA"); TestA q = (TestA) calss.newInstance(); System.out.println(" 反射测试 ==> " + q.str); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }; public static void main(String aaa[]) { new TestA().thread.start(); } protected void test3(Class<TestA> class1) throws InstantiationException, IllegalAccessException { TestA a = class1.newInstance(); System.out.println("测试传参: 类.calss ==> " + a.str); Method[] methods = class1.getMethods(); System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); if (null != methods) { for (Method method : methods) { // System.out.println(method.getName()); } System.out.println("测试反射"); } System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); } protected void test1(TestA testA) { System.out.println("测试传参: new TestA() ==> " + testA.str); } protected void test2(TestA testA) { System.out.println("测试传参: TestA.this ==> " + testA.str); } }
打印结果:
内部类run 外部类tn inner tn 测试传参: new TestA() ==> 123 测试传参: TestA.this ==> 123 测试传参: 类.calss ==> 123 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 测试反射 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 反射测试 ==> 123
类名.class 类名.this
最新推荐文章于 2022-05-11 09:29:46 发布