자바 기초 반사 와 범 형 및 주해

6050 단어 자바반사범 형
자바 기초 반사 와 범 형 및 주해
범용 지우 기
범 형 지우 기:범 형 은 컴 파일 시기 에 만 유효 하 며 컴 파일 된 바이트 파일 에는 범 형 정보 가 존재 하지 않 습 니 다.
일반 집합 을 설명 하고,집합 양 끝 유형 은 일치 해 야 합 니 다.유형 도 포장 유형 을 사용 할 수 있 고 일반적인 유형 은 인용 유형 이 어야 하 며 기본 유형 이 될 수 없습니다.
공용 의 유형 과 방법 을 실현 하여 공용 업 무 를 추출 하 다.
범 형 방법/범 형 류/범 형 인터페이스

public class GenericTest 
{ 
  /** 
   *     ,       
   * @param <T> 
   * @param <K> 
   * @param t 
   * @param k 
   */ 
  public <T, K> K save(T t, K k) 
  { 
    return null; 
  } 
  @Test 
  public void testMethod() throws Exception 
  { 
    //      :           ,        
    save("hello", 1); 
  } 
} 
   : 
public class GenericTest<T> 
@Test 
  public void testMethod() throws Exception 
  { 
    //      :           ,        
    //save("hello", 1); 
    //       :            
    GenericTest<String> demo = new GenericTest<String>(); 
    demo.save("hello", 1);  
} 

범 형 중의 extends 와 슈퍼 의 의미:
Extends:정의 목록;들 어 오 는 인자?String 형식의 하위 클래스 여야 합 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
Super:정의 List;들 어 오 는 매개 변 수 는 String 형식의 부모 클래스 여야 합 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
Type:인터페이스,모든 종류의 기본 인터페이스!
반사
반 사 는 실행 시기 에 동적 으로 대상 을 만 들 고 대상 의 속성,방법 을 얻 을 수 있 습 니 다.

/**  
 * @ClassName: App  
 * @Description:       
 * @author lqw  
 * @date 2016-5-13   01:33:55  
 *  
 */ 
public class App 
{ 
  @Test 
  public void testInfo() throws Exception 
  { 
    //    
    String sql = "com.hbmy.reflect.demo2.Admin"; 
    //        
    Class<?> clazz = Class.forName(sql); 
    /** 
     *     1:           (  ) 
     */ 
    Admin admin = (Admin) clazz.newInstance(); 
    /** 
     *     2:             
     */ 
    Constructor<?> constructors = clazz.getDeclaredConstructor(); 
    constructors.newInstance(); 
    /** 
     *     3:            
     */ 
    Constructor<?> constructor = clazz.getDeclaredConstructor(String.class); 
    Admin admin2 = (Admin) constructor.newInstance("zhangsan"); 
    //   System.out.println(admin); 
  } 
   
  /** 
   *       、  
   * getDeclaredFields:                
   * getFields:    public    
   */ 
  @Test 
  public void testNameAndValue() throws Exception 
  { 
    //    
    String sql = "com.hbmy.reflect.demo2.Admin"; 
    //        
    Class<?> clazz = Class.forName(sql); 
     
    Admin admin = (Admin) clazz.newInstance(); 
//   Method[] methods = clazz.getMethods(); 
//   for (Method method : methods) 
//   { 
//     //       
//     method.setAccessible(true); 
//     //   
//     String name = method.getName(); 
//     System.out.println(name); 
//      
//   } 
//   Field[] fields = clazz.getFields();//         money 
    Field[] fields = clazz.getDeclaredFields(); 
    for (Field field : fields) 
    { 
      //       
      field.setAccessible(true); 
      //   
      String name = field.getName(); 
      Object value = field.get(admin); 
      System.out.println(name + value); 
    } 
  } 
 
  /** 
   *        
   */ 
  @Test 
  public void testGetMethods() throws Exception 
  { 
    //    
    String sql = "com.hbmy.reflect.demo2.Admin"; 
    //        
    Class<?> clazz = Class.forName(sql); 
 
    Admin admin = (Admin) clazz.newInstance(); 
    /* 
     *        
     */ 
    Method declaredMethod = clazz.getDeclaredMethod("getId"); 
    /** 
     *      
     */ 
    Object return_value = declaredMethod.invoke(admin); 
    System.out.println(return_value); 
    Method[] methods = clazz.getDeclaredMethods(); 
     
    for (Method method : methods) 
    { 
      method.setAccessible(true); 
      String name = method.getName(); 
      System.out.println(name); 
    } 
  } 
주해
주해 적 역할
1.컴 파일 러 가 어떻게 작 동 하 는 지 알려 준다.
2.프로필 간소화(대체)

public class App 
{ 
  @Override 
  public String toString() 
  { 
    return super.toString(); 
  } 
  @SuppressWarnings({"unused","unchecked"}) 
  public void save() 
  { 
    List list = null; 
  } 
   
  @Deprecated 
  public void save1() 
  { 
 
  } 
} 
사용자 정의 주석:사용자 정의 주석 을 통 해 클래스,필드,방법 에 설명 정 보 를 추가 할 수 있 습 니 다.

public @interface Author 
{ 
  /** 
   *      
   * 1.        public 
   * 2.      
   * 3.        value,           ,     
   */ 
  String name() default "lqw"; 
  //        
  int age() default 23; 
  String remark(); 
} 
원 주해
원 주 해 는 바로 주해 의 주해 이다.

          
@Target({ 
TYPE, 
FIELD,  
METHOD,  
PARAMETER,  
CONSTRUCTOR,  
LOCAL_VARIABLE}) 
        
/** 
 *    2:           
 * RetentionPolicy.SOURCE          
 * RetentionPolicy.CLASS                 
 * RetentionPolicy.RUNTIME          
 */ 
@Retention(RetentionPolicy.SOURCE) 
 마지막 으로 한 마디 를 요약 한다.주해 와 반 사 는 어렵 지 않다.두 렵 지 않 으 면 주 해 는 소스 코드 를 보면 그렇다.반사 까지 는.이렇게 말 하면 반사 가 없 으 면 틀 이 없고 거의 모든 틀 이 반 사 를 통 해 이 루어 진다.말하자면 반사 란 로 딩 류 의 바이트 코드 를 통 해 클래스 안의 방법 과 속성 을 얻 는 것 이 고 사실은 구조 도 이렇게 이 루어 진 것 이다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기