Class name.class class name.this

Outras postagens do blog:

Class name.class class name.this detalhado

 

para concluir: 

  • Quando estiver na classe interna de uma classe, se você precisar acessar os métodos ou campos de membro da classe externa, se usar o campo this. Member (não há diferença da classe interna.este campo de membro), o domínio da classe interna é obviamente chamado, se Quando queremos acessar o domínio de uma classe externa, devemos usar a classe externa.este domínio de membro.
  • Passar um novo nome de classe () ou nome de classe. Isso tem o mesmo efeito.

 

Nome da classe.classe Nome da classe.este teste:

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 impressão:

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

 

Acho que você gosta

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