java 기초 학습 노트의 반사

반사
반사: 클래스의 속성과 방법을 상응하는 클래스로 비추다.
반사 기본 사용
Class 클래스를 가져오는 세 가지 방법:
  • class
  • 대상 이름.getClass()
  • Class.forName(로드할 클래스 이름)
  • API에 따라 작성하면 됩니다.
  • 상기 세 가지 방식 중 하나로 특정 클래스의 클래스, 즉 이 클래스에 대응하는 바이트 코드를 얻는다
  • Class 객체의 getConstructor(Class...parameterTypes)를 호출하여 구조 방법 객체를 가져옵니다
  • 호출은 구조 방법 클래스인 Constructor의 newInstance(Object...initargs) 방법으로 새 대상을 만듭니다
  • 클래스 대상의 getMethod(String name, Class...parameterTypes) 가져오기 방법 대상을 호출합니다
  • 호출 방법 대상 클래스 Method의 invoke(Object obj, Object...args) 방법, 호출 대상에 해당하는 방법
  • 방법의 매개 변수 유형으로 유일하게 하나의 방법을 표시합니다. 근거: 방법의 재부팅
    수조의 반사
    다음 예제에서는 몇 가지를 설명합니다.
  • 원소의 같은 유형의 수조, 같은 차원 수조,class와 같다
  • 다른 차원,class는 다르다
  • 서로 다른 차원, 부류는 모두 Object, 같다
  • 기본 유형은 수조가 직접 Object[]로 변환될 수 없다고 여긴다
  • java.util.Arrays의 asList 메소드 API 살펴보기
  • 
    public class ReflectTest {
      public static void main(String[] args) {
        int [] a1 = new int[]{1,2,3};
        int [] a2 = new int[5];
        int [][] a3 = new int[2][3];
        System.out.println(a1.getClass() == a2.getClass());//true
        System.out.println(a1.getClass());//class [I
        System.out.println(a3.getClass());//class [[I
        System.out.println(a1.getClass().getSuperclass() == a3.getClass().getSuperclass());//true
        System.out.println(a2.getClass().getSuperclass());//class java.lang.Object
    
        // :Error:(15, 42) java:  : java.lang.Class<capture#1,   ? extends int[]> java.lang.Class<capture#2,   ? extends int[][]>
        //System.out.println(a1.getClass() == a3.getClass());
    
        Object []b3 = a3;// 
        //   Error:(17, 24) java:  : int[] java.lang.Object[]
        //Object [] b1 = a1;
    
        String s1 = "abc";
        System.out.println(Arrays.asList(a1));//[[I@1540e19d]
        System.out.println(Arrays.asList(s1));//[abc]
      }
    }
    
    
    출력:
    
    true
    class [I
    class [[I
    true
    class java.lang.Object
    [[I@1540e19d]
    [abc]
    
    난입:hashcode와 메모리 유출 문제 참고 자바api:
  • 해시코드가 생성되면 변하지 마세요
  • 대상 equals 방법은true를 되돌려주면hascode는 일치해야 한다
  • 반대로, equals 방법은false를 되돌려주고,hascode가 반드시 서로 다른 것은 아니다
  • 만약hascode 계산에 참여한 구성원 변수가 중간에 변하면 뒤에 리모브가 실패하여 메모리 유출을 초래합니다
    프로필 로드
    클래스 로더 읽기 전용 프로필 로드
    유명class.getClassLoader().getResourceAsStream(str);
    유명class.getResourceAsStream(str), 실질적으로는 클래스 로더를 호출합니다.원본 캡처(java.lang 패키지의 Class.java):
    
     public InputStream getResourceAsStream(String name) {
      name = resolveName(name);
      ClassLoader cl = getClassLoader0();
      if (cl==null) {
        // A system class.
        return ClassLoader.getSystemResourceAsStream(name);
      }
      return cl.getResourceAsStream(name);
    }
    
    경로str에 관해서는 쓰기에 좀 신경을 쓴다.
  • 빗장을 넣지 않고 상대 경로:str ='config.properties'
  • 비스듬한 철봉을 붙여서classpath의 루트 경로에서str="/org/iot/ui/config.properties"를 찾습니다.
  • 이전에 자바 코드를 컴파일할 때, 일부 conf/폴더는 의존하거나 소스 폴더로 표시해야 하는데, 그 안에는 분명히 xml 파일이고 자바 원본이 없습니다.여기서, 나는 이제 알았다. 반사로 프로필을 불러오기 때문이다
    Instropector & JavaBean
    JavaBean이 속성 x의 값을 읽는 절차: 대문자 바꾸기, 접두사 고치기, 가져오기 방법.
    "x"-->"X"-->"getX"-->"MethodGetX"
    스스로 내성으로 조작하다
    나는 현재 사용하지 않아서 코드를 붙이지 않고 핵심류만 붙인다
    단순 구현:java를 사용합니다.beans.PropertyDescriptor 클래스
    번거로움 실현:java를 사용합니다.beans.Introspector 클래스, getBeanInfo 방법의 반환값 반복
    JavaBean에는 매개변수가 없는 구조 함수가 있어야 합니다.
    BeanUtils 키트 사용
  • 문자열 및 정수 변환(PropertyUtils)
  • 속성 등급 연결 조작
  • 조작맵
  • 좋은 웹페이지 즐겨찾기