Nombre de clase.nombre de clase de clase.este

Otras publicaciones del blog:

Nombre de clase.nombre de clase de clase.esta detallada

 

En conclusión: 

  • Cuando está en la clase interna de una clase, si necesita acceder a los métodos o campos miembros de la clase externa, si usa el campo this. Member (no hay diferencia con el campo interno class.this. Member), el dominio de la clase interna obviamente se llama, si cuando queremos acceder al dominio de una clase externa, debemos usar la clase externa, este dominio miembro.
  • Pasar un nuevo nombre de clase () o nombre de clase, esto tiene el mismo efecto.

 

Class name.class Nombre de clase.esta prueba:

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);
	}
}

Resultado de la impresión:

内部类run
外部类tn
inner tn
测试传参: new TestA() ==> 123
测试传参: TestA.this  ==> 123
测试传参: 类.calss ==> 123
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
测试反射
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 反射测试 ==> 123

 

Supongo que te gusta

Origin blog.csdn.net/xiangwang2016/article/details/96439553
Recomendado
Clasificación