일례 로 JAVA 반사 엿 보기
이 글 은 8 개의 데모()방법 을 통 해 반사 에 자주 사용 되 는 몇 가지 방법 을 보 여 준다.
class Person {
private int age;
private String name;
public Person() {
}
public Person(int age,String name) {
this.age = age;
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
인터페이스 Action 인터페이스 성명
interface ActionInterface {
public void walk(int m);
}
슈퍼 맨 클래스,Person 을 계승 하여 Action Interface 인 터 페 이 스 를 실현 하 는 walk(int m)방법.
class SuperMan extends Person implements ActionInterface{
private boolean BlueBriefs;
public void fly() {
System.out.println(" ~");
}
public void setBlueBriefs(boolean blueBriefs) {
this.BlueBriefs = blueBriefs;
}
public boolean isBlueBriefs() {
return BlueBriefs;
}
@Override
public void walk(int m) {
System.out.println(" ~~ " + m + " !");
}
}
테스트 클래스:8 개의 데모()방법
package reflectLearning;
import java.lang.reflect.*;
/**
* Created by Nanguoyu on 2016/4/21.
*/
public class ReflectLearning {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException {
demo1();
System.out.println("==============================================");
demo2();
System.out.println("==============================================");
demo3();
System.out.println("==============================================");
demo4();
System.out.println("==============================================");
demo5();
System.out.println("==============================================");
demo6();
System.out.println("==============================================");
demo7();
System.out.println("==============================================");
demo8();
System.out.println("==============================================");
}
//Demo1. java
public static void demo1() {
Person person = new Person();
System.out.println("Demo1: :" + person.getClass().getPackage().getName() + "," + " :" + person.getClass().getName());
}
//Demo2. Class forName() Class
public static void demo2() throws ClassNotFoundException {
// Class, null, Person
Class> class1 = null;
Class> class2 = null;
// 1, ClassNotFoundException
class1 = Class.forName("reflectLearning.Person");
System.out.println("Demo2:( 1) :" + class1.getPackage().getName() + ","
+ " :" + class1.getName());
// 2
class2 = Person.class;
System.out.println("Demo2:( 2) :" + class2.getPackage().getName() + ","
+ " :" + class2.getName());
}
/**
* demo3: java , class 【 】
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void demo3() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class> class1 = null;
class1 = Class.forName("reflectLearning.Person");
// , Person,
Person person = (Person) class1.newInstance();
person.setAge(20);
person.setName("SmileDay");
System.out.println("Demo3:" + person.getName() + ":" + person.getAge());
}
/**
* demo4: java ,
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws InstantiationException
*/
public static void demo4() throws ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> class1 = null;
Person person1 = null;
Person person2 = null;
class1 = Class.forName("reflectLearning.Person");
//
Constructor>[] constructors = class1.getConstructors();
//
person1 = (Person) constructors[0].newInstance();
person1.setName("I'm the none param Body");
person1.setAge(18);
//
person2 = (Person) constructors[1].newInstance(20,"I'm the second param Body");
System.out.println("Demo4:" + person1.getName() + ":" + person1.getAge());
System.out.println("Demo4:" + person2.getName() + ":" + person2.getAge());
}
/**
* Demo5: Java , set get
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchFieldException
*/
public static void demo5() throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {
Class> class1 = null;
class1 = Class.forName("reflectLearning.Person");
Object obj = class1.newInstance();
Field personNameField = class1.getDeclaredField("name");
// name private, true, 。
personNameField.setAccessible(true);
personNameField.set(obj," ");
System.out.println("Demo5: :" + personNameField.get(obj));
// Class getDeclaredFields()
Field[] fields = class1.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
fields[i].set(obj," ");
System.out.println(" :" + fields[i].get(obj));
}
}
/**
* Java : , , , ,
* @throws ClassNotFoundException
*/
public static void demo6() throws ClassNotFoundException {
Class> class1 = null;
class1 = Class.forName("reflectLearning.SuperMan");
//
Class> superClass = class1.getSuperclass();
System.out.println("Demo6:SuperMan :" + superClass.getName());
System.out.println("=========================================");
// Class getDeclaredFields()
Field[] fields = class1.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
System.out.println(" :" + fields[i]);
}
System.out.println("=========================================");
// Class getMethods()
Method[] methods = class1.getMethods();
for (int i = 0; i < methods.length; i++) {
System.out.println("Demo6: SuperMan :");
System.out.println(" :" + methods[i].getName());
System.out.println(" :" + methods[i].getReturnType());
System.out.println(" :" + Modifier.toString(methods[i].getModifiers()));
}
System.out.println("=========================================");
// , Class,
Class> interfaces[] = class1.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
System.out.println(" :" + interfaces[i].getName());
}
}
/**
* Demo7: Java
* @throws ClassNotFoundException
* @throws NoSuchMethodException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws InvocationTargetException
*/
public static void demo7() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
Class> class1 = null;
class1 = Class.forName("reflectLearning.SuperMan");
System.out.println("Demo7:
fly():");
Method method = class1.getMethod("fly");
method.invoke(class1.newInstance());
/*
* Class getMethod(String methodName,Class> class)
* walk(int m) 。
*/
System.out.println(" walk(int m):");
method = class1.getMethod("walk",int.class);
method.invoke(class1.newInstance(),100);
}
/**
* Java
* @throws ClassNotFoundException
*
* Bootstrap ClassLoader c++ , 。
* Extension ClassLoader , jre\lib\ext
* AppClassLoader classpath , 。 java 。
*/
public static void demo8() throws ClassNotFoundException {
Class> class1 = null;
class1 = Class.forName("reflectLearning.SuperMan");
String nameString = class1.getClassLoader().getClass().getName();
System.out.println("Demo8: :" + nameString);
}
}
요약:Class.forName()방법 은 반 사 된 입구 입 니 다.이 방법 을 실행 하면 class 대상 을 얻 을 수 있 습 니 다.그 다음 에 해당 하 는 클래스,대상 의 각종 데 이 터 를 얻 을 수 있 습 니 다.구조 기 배열,방법 배열,속성 숫자,부모 배열,인터페이스,클래스 로 더 등 정 보 를 얻 을 수 있 습 니 다.
참고 글:http://blog.csdn.net/ljphhj/article/details/12858767
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.