类的执行过程

类加载步骤


什么是反射




反射api


Class


//1.通过Class.forName()(对于编译器并不知道对象类型,在运行期对未知类型进行操作时)
try {
Class c=Class.forName("preview.Person");
System.out.println(c.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2.通过对象实例的getClass()方法
Person p=new Person();
Class c2=p.getClass();
System.out.println(c2.getName());
//3.通过类的class属性获取
Class c3=Person.class;
System.out.println(c3.getName());
基于反射获取类信息


基于反射生成类的实例

Constructor constructor = c.getConstructor(new Class[]{int.class,String.class,String.class});
Object o = constructor.newInstance(new Object[]{18,"战三","朝阳"});
Method method=c.getMethod("show",null);
method.invoke(o,null);

反射实现应用
public class test {
public void promote(String id,String className){
try {
//获得相应类的Class对象
Class c=Class.forName(className);
//根据Class获取构造方法
Constructor constructor = c.getConstructor();
//根据构造方法对象实例化
Object o = constructor.newInstance();
//调用相应的对象的商品打折方法
Method method = c.getMethod("promote", String.class);
double d= (double) method.invoke(o,id);
System.out.println(d);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
test t=new test();
t.promote("01","preview.work.Children");
}
}


反射获取类对象的三种方式:
- 1.类型.class
Class<Student> stu = Student.class;
- 2.Class.forName(“类型的全路径名”)
Class<?> ss = Class.forName("demo.Student");//第三种
- 3.对象.getClass()
TestStudent s=new TestStudent();
//获取类对象的另一种方法
// Class<? extends TestStudent> aClass = s.getClass();
本文深入解析Java反射机制,介绍Class类及其使用方法,包括通过不同途径获取Class对象、利用反射生成类实例及调用方法的过程。同时,提供了一个具体的应用案例,展示如何利用反射动态加载类、获取构造方法并实例化对象,以及调用特定方法。
1306

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



