отражение
Отражение: сопоставьте свойства и методы класса в соответствующие классы.
Основное использование отражения
Есть три способа получить класс класса:
Просто напишите в соответствии с API, общий процесс:
Используйте тип параметра метода, чтобы уникально идентифицировать метод на основе: перегрузки метода
Отражение массивов
Следующий пример в основном иллюстрирует несколько моментов:
public class RefertTest {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 (). a3.getClass (). getSuperClass ()); // true System.out.println (a2.getClass (). getSuperClass ()); // класс java.lang.object // Следующее предложение не компилируется: ошибка: (15, 42) Java: несоблюдение типов: java.lang.class <Capture#, № 1, Тоталь? Extends int []> и java.lang.class <захват#2, общее? extends int [] []> //system.out.println (a1.getClass () == a3.getClass ()); Object [] b3 = a3; // Скомпилируется // Следующее предложение не проходит ошибку: (17, 24) Java: несовместимый тип: int [] не может быть преобразован в java.lang.object [] // object [] b1 = a1; Строка S1 = "ABC"; System.out.println (arrays.aslist (a1)); // [[i@1540e19d] System.out.println (Arrays.aslist (s1)); // [abc]}}Выход:
TrueClass [iClass [[itrueclass java.lang.object [[i@1540e19d] [ABC]
Ввод: задача утечки с хэшкодом и утечкой памяти. См. Java API:
Если переменная элемента, участвующая в изменениях расчета HASCOD
Загрузка файла конфигурации
Class Loader загружает файл файла только для чтения, имя класса класса.
Name.class.getresourceasstream (str), по сути, вызывает загрузчик класса. Перехват исходного кода (class.java в рамках пакета java.lang):
public inputStream getResourCeasStream (String name) {name = Resolvename (name); ClassLoader CL = getClassLoader0 (); if (cl == null) {// системный класс. return classloader.getSystemresourceasStream (имя); } return cl.getresourceasstream (name);}Что касается пути Str, метод написания немного особенный.
В прошлом, при составлении кода Java, некоторые папки/ папки должны были быть добавлены в зависимости или помечены как исходные папки. Очевидно, что это были XML -файлы, но не было исходного кода Java. Отсюда я теперь знаю, что это из -за использования отражения для загрузки файла конфигурации
Инспектор и Javabean
Процесс чтения Javabean Значение атрибута X: капитализация, префикс и методы получения.
"x"-> "x"-> "getx"-> "methodgetx"
Я не использовал его, чтобы в настоящее время управлять этим с самоанализом, поэтому я больше не буду вставлять код, прикреплен только основной класс
Простая реализация: используйте Java.beans.propertydescriptor Class
Проблема реализация: используйте класс java.beans.introspector, чтобы пройти обратную стоимость метода GetBeanInfo
Javabean должен иметь конструктор без параметров
Использование инструментария Banuatils