反射
Java程序三阶段

反射入门小demo
package com.jt.reflectionTest;
import com.sun.org.apache.xpath.internal.SourceTree;
import java.io.FileInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Properties;
public class Reflection {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.load(new FileInputStream("src\\Name.properties"));
//得到类路径
String classfullpath = properties.get("classfullpath").toString();
//得到要操作的方法
String method = properties.get("method").toString();
//根据路径,创建Cat 对象,类型为Class
Class<?> cls = Class.forName(classfullpath);
System.out.println("cls="+cls);
//创建cat对象,类型为Cat , 就相当于根据类创建对象
Object o = cls.newInstance();
System.out.println("o的运行类型="+o.getClass());
//根据路径 得到想要执行的方法对象。是类里的方法 用 Class类型的 cls点
Method method1 = cls.getMethod(method);
//执行方法
System.out.println("******执行方法*********");
method1.invoke(o); //o对象的方法 就相当于 o.hi()
System.out.println("******获得属性**********");
//getField 不能得到私有属性
Field nameField = cls.getField("name");
System.out.println(nameField.get(o));//传统:对象.属性名 反射:成员变量对象.get(对象)
//得到构造方法
System.out.println("*******无参构造*********");
Constructor<?> constructor = cls.getConstructor();//返回无参构造
System.out.println(constructor);
System.out.println("*******有参构造**********");
Constructor<?> constructor1 = cls.getConstructor(String.class);
System.out.println(constructor1);
}
}

输出结果:

class类



获取Class类对象





输出结果:

补充:

哪些类有Class对象?

案例:

输出结果;

类的加载过程:

出结果;
[外链图片转存中…(img-aDBF9dQK-1646703872468)]
类的加载过程:
[外链图片转存中…(img-GTSW4Dhh-1646703872468)]

本文介绍了Java反射机制的基本概念和使用,通过一个简单的Demo展示了如何利用反射创建对象、调用方法、访问字段及获取构造器。详细阐述了类的加载过程,并探讨了哪些类拥有Class对象。
2268

被折叠的 条评论
为什么被折叠?



