자바 반사 메커니즘 초보 인식 획득 멤버 변수

2652 단어 자바 기반
자바 신인 으로서 저 는 자바 반사 체제 에 대한 인식 을 이야기 하고 다른 자바 신인 들 에 게 계몽 역할 을 합 니 다.쉽게 말 하면 자바 의 반 사 는 하나의 클래스 가 불 러 오 면 자바 가상 컴퓨터 가 자동 으로 Class 대상 을 만 드 는 것 이다.이 Class 대상 을 통 해 가상 컴퓨터 에 불 러 오 는 이 Class 대상 에 대응 하 는 방법,구성원 및 구조 방법의 성명 과 정의 등 정 보 를 얻 을 수 있 습 니 다.
그렇다면 이 Class 대상 을 어떻게 얻 습 니까?보통 다음 과 같은 몇 가지 방법 이 있다.
1.하나의 인 스 턴 스 를 얻 었 다 면 다음 과 같은 방식 으로 Class 대상 을 얻 을 수 있 습 니 다.
Class c = 대상 이름.getClass();
          학생  s = new Student();
              Class c = s.getClass();
              Class c2 = s.getSuperclass();
2.컴 파일 기간 에 클래스 의 이름 만 알 고 있다 면 다음 과 같은 방법 을 사용 할 수 있 습 니 다(이것 도 반사 입 니 다.
클래스 를 가 져 올 클래스 대상):
Class c = Student.class;
3.클래스 이름 이 컴 파일 기간 에 모 르 면, 하지만 운행 기간 에 얻 을 수 있 습 니 다. 아래 방법 을 사용 할 수 있 습 니 다:
        Class c = Class.forName(str);//여기 str 는 클래스 의 전체 경로 입 니 다.
다음 과 같은 모든 구성원 변 수 를 어떻게 가 져 오 는 지 살 펴 보 겠 습 니 다.
Student.java:
public class Student {

	/**    */
	public static String id = "20140210102";
	/**    */
	public String name = "  ";
	/**    */
	public int address = 18;
	/**    */
	protected long phone = 18765342152L;
	/**      */
	private boolean ispp = false;

	public Student() {
	}
}

Test.java
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Test {
	public static void main(String[] args) throws Exception {
		Student s = new Student();
		/*
		 *                            ,     
		 * ①.     getFields(),       public      ,          
		 * ②. getDeclaredFields(),                 ,      。
		 */
		Field[] fs = Student.class.getDeclaredFields();
		for (int i = 0; i < fs.length; i++) {
			Field f = fs[i];
			f.setAccessible(true);//                      ,          
			/*
			 *         :
			 * 
			 *           Field        Java     ( public,private,protected
			 * ,default,static,final         )
			 */
			int memberMod = f.getModifiers();
			//                     
			System.out.print(Modifier.toString(memberMod) + "  ");

			//          (      or  ,     ,              )
			String memberType = f.getGenericType().toString().intern();
			System.out.print(memberType + "  ");

			//          
			String memberName = f.getName();
			System.out.print(memberName + "  ");

			//          
			System.out.print(f.get(s) + "
"); } } }
운행 결과:
public static  class java.lang.String  id  20140210102 public  class java.lang.String  name  장삼 int  address  18 protected  long  phone  18765342152 private  boolean  ispp  false 는 이 예 를 통 해 자바 초보 자의 인식 반사 에 어느 정도 도움 이 되 기 를 바 랍 니 다.다음 편 은 반 사 를 통 해 멤버 를 얻 는 방법 을 살 펴 보 겠 습 니 다!

좋은 웹페이지 즐겨찾기