학습 노트의 반사
리플렉스
클래스 로더
클래스 로드
프로그램이 특정한 클래스를 사용할 때 만약에 이 클래스가 메모리에 불러오지 않으면 시스템은 클래스 불러오기, 클래스 연결, 클래스 초기화 등 세 가지 절차를 통해 클래스를 초기화한다. 만약에 의외의 상황이 발생하지 않으면 JVM은 이 세 가지 절차를 연속적으로 완성할 것이다. 그래서 때때로 이 세 가지 절차를 클래스 불러오기 또는 클래스 초기화라고 부른다.
두 번째 단계를 수행할 때 시스템이 직접 부류에 대한 초기화 단계도 초기화 단계 1-3에 따른다
클래스 로더
역할:
ClassLoader:클래스를 로드하는 객체
java가 실행될 때 다음과 같은 내장 클래스 마운트가 있습니다
클래스 로더의 상속 관계: System의 부모 로더는 Platform이고 Platform의 부모 로더는 Bootstrap이다
ClassLoader의 두 가지 방법
public class Demo {
public static void main(String[] args) {
//
ClassLoader c = ClassLoader.getSystemClassLoader();
System.out.println(c); //AppClassLoader
//
ClassLoader c2 = c.getParent();
System.out.println(c2);//PlatformClassLoader
ClassLoader c3 = c2.getParent();
System.out.println(c3);//null Bootstrap null
}
}
리플렉스
java 반사 메커니즘: 실행할 때 클래스 변수와 방법 정보를 얻는 것을 말합니다.그리고 얻은 정보를 얻어 대상을 만들고 호출하는 메커니즘이 필요합니다.이런 동적성 때문에 프로그램의 유연성을 크게 강화할 수 있고 프로그램은 컴파일링 기간에 확정을 완성하지 않아도 되고 운행 기간에도 확장할 수 있다.
Class 클래스의 객체 가져오기
클래스를 반사해서 사용하려면 먼저 클래스의 바이트 코드 파일 대상, 즉 클래스 형식의 대상을 가져와야 한다.
Calss 유형 객체를 가져오는 세 가지 방법
public class Student {
// : , ,
private String name;
int age;
public String address;
// : , ,
public Student() {
}
private Student(String name) {
this.name = name;
}
Student(int age, String address) {
this.age = age;
this.address = address;
}
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// : ,
private void function() {
System.out.println("function");
}
public void method1() {
System.out.println("method");
}
public void method2(String s) {
System.out.println("method" + s);
}
public String method3(String s, int i){
return s + "," + i;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
public class Demo {
public static void main(String[] args) throws ClassNotFoundException {
// class Class 。
Class c1 = Student.class;
System.out.println(c1);
Class c2 = Student.class;
System.out.println(c1 == c2);
System.out.println("--------------");
// getClass() , Class
Student s = new Student();
Class extends Student> c3 = s.getClass();
System.out.println(c1 == c3);
System.out.println("--------------");
// Class forName(String className)
Class> c4 = Class.forName(" . Class .Student");//package . Class ;//
System.out.println(c1 == c4);
}
}
반사 획득 구조 방법 및 사용
public class Student {
// : , ,
private String name;
int age;
public String address;
// : , ,
public Student() {
}
private Student(String name) {
this.name = name;
}
Student(int age, String address) {
this.age = age;
this.address = address;
}
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// : ,
private void function() {
System.out.println("function");
}
public void method1() {
System.out.println("method");
}
public void method2(String s) {
System.out.println("method" + s);
}
public String method3(String s, int i){
return s + "," + i;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
Class 클래스에서 구성 방법을 가져오는 방법
import java.lang.reflect.Constructor;
public class Demo2 {
public static void main(String[] args) throws ClassNotFoundException {
Class> c = Class.forName(" . Class .Student");
Constructor>[] cons = c.getConstructors();
for (Constructor con : cons){
System.out.println(con);
}
}
}
import java.lang.reflect.Constructor;
public class Demo2 {
public static void main(String[] args) throws ClassNotFoundException {
Class> c = Class.forName(" . Class .Student");
Constructor>[] cons = c.getDeclaredConstructors();
for (Constructor con : cons){
System.out.println(con);
}
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Demo3 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
System.out.println(obj);
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Demo4 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
Constructor> con = c.getDeclaredConstructor();
Object obj = con.newInstance();
System.out.println(obj);
}
}
연습
반사에 의한 구현
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
//public Student(String name, int age, String address)
Constructor> con = c.getConstructor(String.class, int.class, String.class);// .class
Object obj = con.newInstance(" ", 18, " ");
System.out.println(obj);
}
}
연습
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
// private Student(String name)
Constructor> con = c.getDeclaredConstructor(String.class);
//
//public void setAccessible (boolean flag): true,
con.setAccessible(true);
Object obj = con.newInstance(" ");
System.out.println(obj);
}
}
구성원 변수 반사 및 사용
구성원 변수를 가져오는 네 가지 방법
import java.lang.reflect.Field;
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException {
Class> c = Class.forName(" . Class .Student");
Field[] fields = c.getFields();
for (Field field : fields) {
System.out.println(field);
}
}
}
import java.lang.reflect.Field;
public class Demo2 {
public static void main(String[] args) throws ClassNotFoundException {
Class> c = Class.forName(" . Class .Student");
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
}
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class Demo3 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
Field field = c.getField("address");
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
field.set(obj, " ");// obj addressfield
System.out.println(obj);
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class Demo4 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
Field field = c.getDeclaredField("address");
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
field.set(obj," ");// obj addressfield
System.out.println(obj);
}
}
연습
반사하다
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class> c = Class.forName(" . Class .Student");
//* Student s = new Student()
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
// * s.name = " "
Field nameField = c.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(obj," ");
// * s.age = "18"
Field ageField = c.getDeclaredField("age");
ageField.setAccessible(true);
ageField.set(obj,18);
//* s.address = " "
Field addressField = c.getDeclaredField("address");
addressField.set(obj," ");
System.out.println(obj);
}
}
반사 구성원 획득 방법 및 사용
구성원 접근법
import java.lang.reflect.Method;
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException {
Class> c = Class.forName(" . Class .Student");
Method[] methods = c.getMethods();
for (Method method : methods) {
System.out.println(method);
}
}
}
import java.lang.reflect.Method;
public class Demo2 {
public static void main(String[] args) throws ClassNotFoundException {
Class> c = Class.forName(" . Class .Student");
Method[] methods = c.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo3 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
// Class
Class> c = Class.forName(" . Class .Student");
//
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
Method m = c.getMethod("method1");
m.invoke(obj);
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo4 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
// Class
Class> c = Class.forName(" . Class .Student");
//
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
Method m = c.getDeclaredMethod("function");
m.setAccessible(true);
m.invoke(obj);
}
}
연습하다
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class> c = Class.forName(" . Class .Student");
//Student s = new Student();
Constructor> con = c.getConstructor();
Object obj = con.newInstance();
//s.method1()
Method m1 = c.getMethod("method1");
m1.invoke(obj);
System.out.println("--------------");
//s.method2(" ")
Method m2 = c.getMethod("method2", String.class);
m2.invoke(obj," ");
System.out.println("--------------");
//String ss = s.method3(" ",20)
Method m3 = c.getMethod("method3", String.class, int.class);
Object ss = m3.invoke(obj, " ", 20);
//System.out.print(ss)
System.out.println(ss);
System.out.println("--------------");
//s.function()
Method m4 = c.getDeclaredMethod("function");
m4.setAccessible(true);
m4.invoke(obj);
}
}
반사 연습
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
ArrayList array = new ArrayList();
Class extends ArrayList> c = array.getClass();
Method m = c.getDeclaredMethod("add", Object.class);
m.invoke(array, "hello");
m.invoke(array, "world");
m.setAccessible(true);
array.add(10);
System.out.println(array);
}
}
className = . .Student
methodName = study
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class Demo {
public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//
// Student s = new Student();
// s.study();
//
// Teacher t = new Teacher();
// t.teach();
//
/*
class.txt
className = xxx
methodName = xxx
*/
//
Properties prop = new Properties();
FileReader fr = new FileReader(" \\class.txt");
prop.load(fr);
fr.close();
/*
className = . .Student
methodName = study
*/
String className = prop.getProperty("className");
String methodName = prop.getProperty("methodName");
Class> c = Class.forName(className);
Object obj = c.getConstructor().newInstance();
Method m = c.getMethod(methodName);
m.invoke(obj);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.