Механизм размышлений Java находится в состоянии управления. Объектный метод называется механизмом отражения языка Java. Концепция рефлексии была впервые предложена Смитом в 1982 году, в основном ссылаясь на способность, чтобы программа сможет получить доступ, обнаруживать и изменять свое собственное состояние или поведение. Предложение этой концепции быстро вызвало исследование прикладной отражательной способности в области информатики. Впервые он был принят в области дизайна языка программирования и достигнутых достижений в LISP и объектно-ориентированном. Конечно, размышление не является новой концепцией.
Механизм отражения Java в основном обеспечивает следующее использование:
Определите класс, к которому принадлежит любой объект во время выполнения
Построить объекты любого класса во время выполнения
Определите переменные члена и методы любого класса во время выполнения.
Вызов методов любого объекта во время выполнения
Во -первых, давайте посмотрим на простой пример и используем этот пример, чтобы понять, как работает механизм отражения Java.
Пакет com.wanggc.reflection; импортировать java.lang.reflect.method;/*** Упражнения для размышлений Java. * * @author wanggc * /public class fornametest { /** * Функция записи. * * @param args * Параметры * @Throws Exception * Сообщение об ошибке */ public static void main (string [] args) бросает исключение {// получить класс класса <?> cls = class.fornam e (args [0]); / / Получить соответствующий объект через метод класса [] method = cls.getmethods ();При пропущенном параметре java.lang.string, будет выведен следующий результат
Публичный логический java.lang.string.equals (java.lang.object) public java.lang.string java.lang.string.tostring () public int java.lang.string.hashcode () pu blic int java.lang.string CompareTo (java.lang.lang.string) int) public int java.lang.string.indexof (java.lang.string) public int java.lang.string.indexof (java.lang.string, int) public static java.lang.string java.lang .string.valueof (int) public static java.lang.string java.lang.string.valueof (char) public static java.lang.string java.lang.string java.lang.string.valueof (boolean) public static java.lang.st кольцо java.lang.string.valueof (float) public static java.lang.string java.lang.string.valueof (char [], int, int) public static java.lang.string java.lang.string.valueof (Double) Public Static Java.Lang.String Java .lang.string.valueof (char []) Public Static Java.lang.string java.lang.string.valueof (java.lang.object) Public Static Java.Lang.String Java. Lang.string. String.codepointcount (int, int) public int java.lang.string.comparetoignorecase (java.lang.string) public java.lang.string java.lang.string.concat (java.lang.string) public boolean java.lang. .String .contains (java.lang.ChareSequence) Public Boolean Java.lang.string.contentequals (java.lang.chareSecence) Общественный логический java.lang.string.contentequals (java.lang.stringbuffer) Публичный статей. String java.lang.string.copyvalueof (char []) public static java.lang.string java.lang.string.copyvalueof (char [], int, int) public boolean java.lang.string.endswith (java.lang. Строка) Общественный логический java.lang.string.equalsignorecase (java.lang.string) Public Static java.lang.string java.lang.string.format (java.lang.string, java.lang.object []) .lang.String java.lang.St ring.format (java.util.Locale,java.lang.String,java.lang.Object[])public byte[] java.lang.String.getBytes(java.lang.String ) бросает java.io.unsupportedence addexceptionpublic void java.lang. Getbytes (java.nio.charset.char Set) public void java .lang.string.getchars (int, int, char [], int) .lang.string.isempty () public int j ava.lang. ) public int java.lan g.string.lastindexof (java.lang. String, int) public int java.lang.string.length () Public Boolean java.lang.string.matches (java.lang.string) Public int java .lang.string.offsetbycodepoin ts (int, int) public boolean java.lang .string.regionmatches (boolean, int, java.lang.string, int, int, int) public boolean java.lang.string.regionmatches (int, int) java.lang.string, int, int) public java.lan g.string java.lang .string.replace (java.lang.charing sequence, java.lang.charing sequence) public java.lang.string java.lang.string.replace) (char, char) public java.lang.string java .lang.string.replaceall (java .lang.string, java.lang.string) public java.lang.string java.lang.string.replacefirst (java.lang.string , java.lang.string) Public java.lang.string [] java.lan G.string .split (java.lang.string) Public java.lang.string [] java.lang.string.split (java.lang. Строка, int) public boolean java.lang.string.startswith (java.lang.st ring) .subsepence (int, int) public java.lang.string j ava.lang.string.substring (int) public java.lang.string java.lang.string.substring (int, int) public char [] java.lang. String.thararray () public java.lang.string java.lang.string.tolow ercase () Public Java. .String java.lang.string.touppercase () public java.lang.string java.lang.string ing.touppercase (java.util. Locale) Public java.lang.string java.lang.string.trim () void java.lang.object.wait (long) бросает java.lang.terruptexceptionpub lic final void java.lang.object.wait () Throws Java .lang.TerruptExtexceptionPublic final void java.lang.object.wait (long, int) java.lang.ErengeTexceptionPublic Финал родной java.lang.cla ss java.lang.object.getclass () Публичный финальный родной void java.lang.object.
В этом перечислены все названия методов, их ограничивающие символы, типы возврата и брошенные исключения из класса java.lang.string. Эта программа использует метод ForName класса класса для загрузки указанного класса, а затем вызывает метод GetMethods, чтобы вернуть список методов указанного класса. java.lang.reflect.method используется для выражения одного метода в определенном классе.
Использование механизма отражения Java обычно требует трех шагов:
Получите объект класса, который вы хотите управлять классом через объект класса, полученный на первом шаге, чтобы получить метод класса или метод или атрибут, полученный на втором этапе работы имени класса.
Когда Java работает, независимо от того, сколько объектов генерирует определенный класс, они будут соответствовать тому же объекту класса, который представляет класс и интерфейс в программе работает. Существует три общих способа получения классовых объектов класса операции:
Статический метод вызова статического метода, как показано в приведенном выше примере;
Используйте синтаксис .class класса, например: class <?> Cls = string.class;
Вызовите метод GetClass объекта, например: string str = "abc";
Следующий будет использовать пример, чтобы описать, как выполнить определенный метод объекта через три шага, упомянутые выше:
Пакет com.wanggc.Reflection; * * @author wanggc */ public class Reflectiontest {public static void main (string [] args). Получить метод отображения класса через метод класса = cls.getmethod ("show", string.class); void show (string name) {System.out.println ("hello:" + name);Как упоминалось ранее, в каждом классе программы Java будет соответствующий объект класса. Первым шагом в Java Reflection является получение этого объекта класса, например, 14 строк кода. Конечно, метод каждого класса также должен иметь объект метода, соответствующий ему. Чтобы вызвать этот метод посредством отражения, вы должны сначала получить объект метода этого метода, такой как строка 16 кода, а затем использовать объект метода, чтобы вызвать этот метод в свою очередь, такой как строка 18 кода. Обратите внимание, что первый параметр метода getMethod в строке 16 - это имя метода, а второй - тип параметра этого метода. Выполните метод вызова 18 строк кода, который на самом деле является методом шоу Параметр должен передать его параметрам. Тип и номер должны соответствовать методу getMethod 16 строк.
Приведенный выше пример показывает, как вызвать метод определенного класса посредством отражения.
Пакет com.wanggc.Reflection; * * @author wanggc */ public class ReflectionTest {public static void main (string [] args) выбрасывает исключение {// Создание студента Студента Студента = Новый Студент (); ; ) + ":" + deststudent.getStuage ()); * * @param from * Скопировать объект Source * @param dest * Копировать целевой объект * @throhs Exception * Exception */ private static void copybean (Object from, Object dest) Throws Exception {// Получить объект класса копии Исходный объект класс <?> fromClass = from.getClass (); > destclass = dest.getClass (); Имя Целевого объекта Destfield = destc Lass.getDeclaredfield (имя); объект соответствующего атрибута целевого объекта копии Destfield.set (dest, fromField .:::::::: ::::::::::::::::: :::::::::::::::::::::::: ; * / Class Clound { / ** Имя* / Private String Stuname; ** @return Student Имя*/ public String getStuname () {return Stuname; } / *** Получить возраст студента** @return Студенческий возраст* / public int getStuage () {return stuage; ) {this.stuage = stuage;В механизме запуска Java класс соответствует классу, методы класса соответствуют методу, и, конечно, свойства также соответствуют поле. Комментарии в коде были подробно прокомментированы и не будут повторяться здесь. Но имейте в виду, что поле обеспечивает методы получения и установки для получения и установки значений атрибутов, но, поскольку атрибут является частным типом, доступность атрибута должна быть установлена на TRUE, например, строки 50 ~ 51 из код. Вы также можете установить доступность для всех полей и использовать статический метод доступного доклада, подлежащего установке по 40 линиям, такими как: abesebleObject.setAccessible (FromFields, true);
Предыдущее описание показывает, как использовать механизм отражения Java, чтобы управлять методами и свойствами класса.
Пакет com.wanggc.Reflection; * * @author wanggc */ public class ReflectionTest {public static void main (string [] args) выбрасывает исключение {// Создание студента Студента Студента = Новый Студент (); ; ()); * * * @param from * Скопировать объект Source * @param dest * Копировать объект Target * @Throws Exception * Exception */ Private Static CopyBean (Object OF) Throws Exception {// Получить объект копирования класса класса исходного объекта < ?> fromClass = from.getClass (); (); set (ints, fromfield.get (from)); * / Class Clound { / ** Имя* / Private String Stuname; ** @return Student Имя*/ public String getStuname () {return Stuname; } / *** Получить возраст студента** @return Студенческий возраст* / public int getStuage () {return stuage; ) {this.stuage = stuage;Результат этого примера и предыдущий пример одинаково. Тем не менее, объект, возвращаемый методом копирования, больше не передается снаружи, а генерируется внутри методом, как показано в коде в строке 40. Примечание. Метод NewInstance Class может создавать только классы, которые содержат конструкторы без параметров. wanggc ");
На этом этапе были введены общие функции механизма отражения Java (метод вызова объектов во время выполнения, использование атрибутов класса и создание объектов класса).
Дополнение: При получении методов, свойств и конструкторов класса есть два соответствующих метода: getxxx и getgetdeclaredxxx. Разница состоит в том, что первые методы возврата и свойства с правами доступа, в том числе в родительском классе;
Приведенный выше контент - это механизм запуска Java, введенный вам, я надеюсь, что вам понравится.