클래스 객체를 만드는 방법은 무엇인가요? 두 가지 방법이 있습니다.
class.forName("class name");
Class a = a.class;
두 방법의 차이점은 다음과 같습니다. forName()은 Class a = a.class를 초기화하는 데 도움이 됩니다. 반사, 동적 프록시를 직접 초기화해야 합니다. 즉, 객체의 메소드를 사용하여 클래스를 객체로 변경할 수 있습니다. 특정 클래스는 다른 클래스에 속합니다. 하향 변환 중 판단에 사용되는 클래스
클래스 객체를 통해 특정 클래스의 생성자, 멤버 변수, 멤버 메서드 및 액세스 멤버를 얻을 수 있습니다. 생성자:
class.getConstructors(); 모든 생성자를 가져옵니다. class.getConstructor(null); 이 메소드는 생성자를 반환합니다. 객체는 con.newInstance("parameters");를 통해 생성될 수 있습니다.
class.getFields(); 모든 공개 필드를 가져옵니다. ;
class.getField("name"); 특정 공개 필드(이름) 가져오기
class.getDeclaredField("phoneNum"); 특정 비공개 필드 가져오기
Return Field; f.set(obj, "Andy Lau"); 그 중 obj는 클래스에서 생성된 객체입니다.
class.getMethods(); (); 모든 메소드를 가져옵니다. class.getMethod("Method name", String.class); 다음 String.class는 메소드 매개변수를 참조합니다. do는 Field와 같습니다. 먼저 객체를 생성합니다. 여기서는 메소드 실행 함수인 Invoke()를 사용하고, 20은 매개변수입니다. () 메소드; class.getMethod("main", Stirng[].class); 리플렉션을 통해 원래 기반으로 구현할 수 있습니다. 리플렉션을 구현하고 새 클래스를 생성하고 리플렉션을 사용하여 메서드를 실행할 수 있습니다. 검사: 특정 컨테이너의 클래스 파일을 호출한 다음 일반적인 검사 문제를 피하기 위해 해당 메서드를 호출할 수도 있습니다.
또한 리플렉션을 통해 동적 프록시 모드를 구현할 수도 있습니다.
interface Subject{ public void doSomething(); } class RealSubject implements Subject{ public void doSomething(){ System.out.println("call doSomething()"); } } class ProxyHandler implements InvocationHandler{ private Object tar; public Object bind(Object tar){ this.tar = tar; return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method ,Object[] args) throws Throwable{ Object result = null; result = method.invoke(tar,args); return result; } } public class Test { public static void main(String[] args[]){ ProxyHandler proxy = new ProxyHandler(); Subject sub = (Subject) proxy.bind(new RealSubject()); sub.doSomething(); } }
위 내용은 Java 기반 리플렉션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!