다크호스 프로그래머 - 자바 기초 지식 편 -> 반사

4711 단어
안 드 로 이 드 교육, 자바 교육, 자바 학습 형 기술 블 로그, 당신 과 의 교 류 를 기대 합 니 다! 
제1 부분
java 클래스:  한 가지 사물 의 공통성 을 묘사 하 는데 이런 사물 은 어떤 속성 이 있 고 속성 이 없 으 며 속성 이 무엇 인지 에 대해 서 는  이러한 인 스 턴 스 대상 이 있 습 니 다.  자바 프로그램의 각 자바 클래스 는 같은 종류의 사물 에 속 합 니 다. 이러한 사물 을 묘사 하 는 자바 클래스 는 Class 입 니 다.   Person p1 = new Person();Person p2 = new Person();Class cls 1 = 바이트 코드 1;Class cls2 = Person.class;//바이트 코드 2Person 클래스 를 대표 하 는 바이트 코드, 예 를 들 어 현재 Person Date Math 세 가지 종 류 를 사용 하려 면 메모리 에 세 개의 바이트 코드 가 있 습 니 다. 모든 바이트 코드 는 하나의 Class 의 인 스 턴 스 대상 p1 대표 바이트 코드 를 통 해 만 든 대상 은 p1. getClass () 를 통 해 만 들 수 있 습 니 다.방법 은 대응 하 는 바이트 코드 Class. forName ("java. lang. String") 에서 String 의 바이트 코드 를 얻 습 니 다. - - - | - 그 역할 은 바이트 코드 를 되 돌려 주 는 것 입 니 다.방식 1: 로 딩 되 었 습 니 다. 직접 되 돌아 오 는 방식 2: 클래스 로 딩 기 를 사용 하여 바이트 코드 를 불 러 오 는 세 가지 방식 입 니 다. 1. 클래스 이름. class  예 를 들 어 System. class 2. 대상. getclass ()  예 를 들 어 new Date (). getClass () 3. Class. forName ("클래스 이름"), 예 를 들 어 Class. forName ("java. lang. String") Class 류 의 인 스 턴 스 대상 은 메모리 에 있 는 바이트 코드 에 대응 하여 메모리 에 불 러 오고 저장 공간 을 차지 합 니 다. 이 공간 안의 내용 은 바이트 코드 가 다른 바이트 코드 가 다 르 기 때문에 메모리 에 있 는 내용 이 다 릅 니 다.이 공간 은 각각 하나의 대상 으로 이 대상 들 이 같은 유형 을 가지 고 있다 는 것 을 나 타 낼 수 있다.
제2 부분
public static void main (String [] args) throws Exception {/string 은 클래스 입 니 다. 기본 형식 이 아 닌 String str 1 = "abc";/str 1 은 문자열 대상 입 니 다. 대상. getClass () 는 String 의 바이트 코드 Class cls 1 = str1. getClass (), Class cls 2 = String. class, Class cls 3 = Class. forName ("java. lang. String"), System. out. println (cls 1 = = cls 2),/true System. out. println (cls 3 = = cls 2) 을 얻 었 습 니 다.;/true//기본 형식 바이트 코드 false: String 은 클래스 이기 때문에 기본 데이터 형식 System. out. println (cls1. isPrimitive ()), System. out. println (int. class. isPrimitive ()),/true/false 는 int 와 Integer 가 각각 각 바이트 코드 System. out. println (int. class = = Integer. class),//TYPE 는 포장 형식 으로 포 장 된 (기본 데이터 형식) 을 대표 합 니 다.Integer 형식의 바이트 코드 System. out. println (int. class = = Integer. TYPE);/true//모든 종 류 는 메모리 에 하나의 바이트 코드 이 며, 모든 종 류 는 class 로 System. out. println (int []. class. isPrimitive ();//false System. out. println (int []. class. isArray ();//true/배열 형식의 Class 인 스 턴 스 대상 Class. isArray (); 배열 형식 입 니까?//아무튼 원본 프로그램 에 나타 나 는 유형 만 있 으 면 각각 Class 인 스 턴 스 대상 이 있 습 니 다. 예 를 들 어 int [], void}
제3 부분
//반 사 는 자바 류 의 여러 성분 을 해당 하 는 자바 류 로 비 추 는 것 입 니 다./constructor 류: 특정한 유형의 구조 방법 을 얻 는 Public class FanShe {public static void main (String [] args) throws Exception {//특정한 유형의 모든 구조 방법 을 얻 는 Constructor [] constructors = Class. forName ("java. lang. String"). getConstructors ();//String 클래스 의 String (StringBuffer buffer) 을 얻 는 구조 방법의 구조 방법 Constructor constructor =/이 반 문장 코드 는 컴 파일 할 때 실 행 됩 니 다. 구조 방법 만 알 고 있 습 니 다. 만 든 대상 이 무엇 인지//후반 문장 코드 가 실 행 될 때 만 String 형식 임 을 알 수 있 습 니 다. 실 행 될 때 만 후반 문장 결 과 를 constructor Class. forName ("java. lang. String"). getConstructor (StringBuffer. class) 에 게 보 냅 니 다.;//인 스 턴 스 대상 을 만 듭 니 다. - - - 구조 방법 을 선택 하 는 것 을 표시 합 니 다./일반적인 방식 String str = new String (new String Buffer ("abc");/반사 방식 즉, 인 스 턴 스 대상 String str 1 = (String) constructor. new Instance (new StringBuffer ("abc") 를 구성 하 는 것 입 니 다.;//컴 파일 할 때 틀 렸 습 니 다. 실행 이 틀 렸 습 니 다. constructor 는 수신//stringBuffer 형식 에 대응 하기 때 문 입 니 다. StringSystem. out. println (str1. charAt (2) 을 전 달 했 습 니 다.}}
제4 부분
//멤버 방법의 반사 Method public class FanShe {public static void main (String [] args) throws Exception {String str = "abcd";되 돌아 오 는 met 는 대상 을 표시 하 는 방법 입 니 다. 이 방법 으로 문자열 str 와 각 표 1 에 작용 합 니 다. "charAt"은 방법의 이름 입 니 다. int. class 는 각 표 가 숫자 이기 때문에 int. class 의 바이트 코드 를 사용 합 니 다. invoke 는 Method 방법 대상 의 방법 입 니 다 */method met = String. class. getMethod ("charat", int. class);/* Method 대상 에 게 전달 되 는 invoke ()방법의 첫 번 째 매개 변 수 는 null 입 니 다. 이 Method 대상 에 대응 하 는 정적 방법 입 니 다. met 호출 은 대상 str 를 통 해 이 루어 집 니 다. (null, 1) 대상 을 통과 하지 않 고 호출 되 었 다 면 대상 을 사용 하지 않 고 호출 할 수 있 는 방법 은 정적 방법 입 니 다. */System. out. println (met. invoke (str, 1);/bSystem. out. println (met. invoke (str, new Object [] {3});/d}}
제5 부분
예제: 사용자 가 제공 하 는 클래스 이름 에 따라 프로그램 을 작성 하여 이 클래스 의 main 방법 을 실행 할 수 있 습 니 다.
class method {
	public static void main(String[] args) throws Exception {
	/*	动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到:
		String str = “用户输入的字符串” ;
		Class t = Class.forName(str);*/
		String start = args[0];
		Method mainMethod = Class.forName(start).getMethod("main",
				String[].class);
		mainMethod.invoke(null, (Object) new String[] { "111", "222", "333" });
	//	mainMethod.invoke(null, new Object[] {new String[] { "111", "222", "333" }});
	}
}

public class FanShe6 {
	public static void main(String[] args) {
		for (String arg : args) {
			System.out.println(arg);
		}
	}
}

좋은 웹페이지 즐겨찾기