В этой статье описывается использование механизма отражения программирования Java. Поделитесь этим для вашей ссылки, следующим образом:
ПРЕДИСЛОВИЕ: Отражение: Динамически получить класс (файл Bytecode, такой как Person.class в этой статье) и запустите его участники. Отражение может быть немного менее встречается при разработке уровня приложения Android, но для тех, кто хочет пройти через базовый уровень, они должны быть опытными в его использовании.
Класс сущности
Человек. Ява
пакет com.sunwenou.reflect; // имя пакета открытого класса Person {private String name; частный int возраст; public person () {// no parameter} public perform (string name, int age) {// с параметрами super (); this.name = name; this.age = возраст; } public String getName () {return name; } public void setName (string name) {this.name = name; } public int getage () {return Age; } public void setage (int age) {this.age = age; } @Override public String toString () {return name+","+age; } public void show () {// Пустое параметры System.out.println ("show"); } public void Fun (String ss) {// с параметром System.out.println (ss); } public static void function () {// static system.out.println ("static"); }}Методы для динамического получения файлов байт -кодов
Чтобы сделать сообщение в блоге выглядеть кратким, исключение брошено, и импорт опущен, то же самое ниже.
пакет com.sunwenou.reflect; открытый класс demo1 { /*** Для динамического получения файлов Bytecode* 1: Используйте метод класса getClass (), предоставленный классом объекта* Этот метод требует объектов* 2: каждый тип данных имеет статический атрибут класса, а тип данных, возвращаемый этим атрибутом, принадлежит к классу. Необходима строка, которая состоит из имени пакета + имя класса*/public static void main (string [] args), бросает исключение {// getClaz (); // getCalz2 (); getClaz3 (); } // Использование метода forName (), предоставленного классом public static void getClaz3 () Throws Exception {class <?> Claz = class.forname ("com.sunwenou.reflect.person"); Класс <?> Claz2 = class.forname ("com.sunwenou.reflect.person"); System.out.println (claz == claz2); } // Каждый тип данных имеет статический атрибут класса public static void getCalz2 () {class <Person> p1 = person.class; Класс <Derson> p2 = person.class; System.out.println (P1 == P2); } // Использование метода класса getClass (), предоставленный объектным классом public static void getClaz () {Person Person1 = new Person (); Класс <? Extends Person> claz = person1.getClass (); // Person.class Person2 = new Person (); Класс <? Extends Person> claz2 = person2.getClass (); // person.class System.out.println (claz == claz2); }}Динамически получить класс и создать объект
пакет com.sunwenou.reflect; открытый класс demo2 {public static void main (string [] args) выбрасывает исключение {// createObj (); createObj2 (); } public static void createObj2 () бросает исключение {// Person Person = new Person ("lisi", 23); // Получить класс объекта File ByteCode <?> Claz = class.forname ("com.sunwenou.reflect.person"); //Person.class // Получить объект конструктора типа, к которому относится метод конструктора с параметрами. Конструктор конструктор = claz.getConstructor (String.class, int.class); // Создать объект, используя метод создания объекта, предоставляемого классом конструктора Person Person = (person) Constructor.newinstance ("lisi", 23); System.out.println (человек); } public static void createObj () бросает исключение {// Person Person = new Person (); // Получить класс объекта File ByteCode <?> Claz = class.forname ("com.sunwenou.reflect.person"); Object obj = claz.newinStance (); // По умолчанию используйте конструктор пустых параметров для создания объекта System.out.println (obj); }}Динамически получить класс и присвоить значения переменным членам
пакет com.sunwenou.reflect; открытый класс demo3 {public static void main (string [] args) бросает исключение {// person p = new Person (); //p.name = "lisi"; // Получить класс объекта File ByteCode <?> claz = class.forname ("com.sunwenou.reflect.person"); // Получить объект поля типа, к которому принадлежит переменная элемента // полевое поле = claz.getfield ("name"); // Получить участника с поля общественного разрешения поля = claz.getDeclaredfield ("name"); // Получить все объявленные Fields System.out.println (Field); // Нестатические переменные элемента зависят от объекта от объекта obj = claz.newinstance (); Field.SetAccessible (true); // грубое растрескивание силы, установлено для доступного Field.Set (obj, "Zhang San"); System.out.println (obj); }}Динамически получить класс и выполнить метод
пакет com.sunwenou.reflect; открытый класс demo4 {public static void main (string [] args) выбрасывает исключение {// method1 (); Метод2 (); Метод3 (); } public static void method3 () Throws Exception {// Получить объект объекта ByteCode <?> claz = class.forname ("com.sunwenou.reflect.person"); Метод m = claz.getMethod ("function", null); M.Invoke (NULL, NULL); } ///// Заполнить метод с параметрами public static void method2 () выбрасывает exception {// Получить объект объекта bytecode <?> Claz = class.forname ("com.sunwenou.reflect.person"); Метод m = claz.getMethod ("fun", string.class); Объект obj = claz.newinstance (); M.Invoke (obj, «Привет»); } // Выполнить метод без параметров public static void method1 () выбрасывает exection {// Person Person = new Person (); Person.show (); // Получить класс объекта File ByteCode <?> Claz = class.forname ("com.sunwenou.reflect.person"); // Получить объект файла ByteCode, которому принадлежит выполненный метод. Метод m = claz.getMethod ("show", null); // Нестатические методы зависят от объекта от объекта obj = claz.newinstance (); // выполнить метод m.invoke (obj, null); }}Это основное использование отражения. Мы можем создавать объекты через файл Bytecode объекта, когда мы не можем нормально создавать объекты и выполнять их. Вы узнали, как это сделать? ?
Для получения дополнительной информации о контенте, связанном с Java, пожалуйста, ознакомьтесь с темами этого сайта: «Введение и расширенное учебник по объектно-ориентированному программированию Java», «Учебное пособие по структуре данных и алгоритм Java», «Сводка навыков операции Java Dom Node», «Сводка навыков операции Java File и каталога» и «Сводные навыки операции Java Cage».
Я надеюсь, что эта статья будет полезна для всех Java Programming.