欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单写个类回顾类加载、反射

程序员文章站 2022-06-11 17:14:40
...

public class ReflectUtils {
 /**
  * @param args    
  * @return void   
  * @throws ClassNotFoundException
  * @throws SecurityException
  * @throws NoSuchMethodException
  * @throws InvocationTargetException
  * @throws IllegalArgumentException
  * @throws IllegalAccessException
  * @throws InstantiationException
  * @throws
  * @Author:qqulijun@163.com @2014-11-10下午3:22:49
  */
 public static void main(String[] args) throws Exception {
  car c=new car("劳斯莱斯","褐色",10);
  c.toprint();
  /** 通过编程的方式对jvm类信息对象直接进行操作。 **/
  /** 类装载器就是寻找类的字节码文件并构造出类在jvm内部表示对象的组件。 **/
  ClassLoader loader=Thread.currentThread().getContextClassLoader();
  System.out.println("current loader(系统类装载器):"+loader);
  System.out.println("current parent loader(扩展类装载器):"+loader.getParent());
  /** 根装载器在java中找不到,由C++编写,固然返回null **/
  System.out.println("current parent parent loader(根装载器-->负责装载jre的核心类库):"+loader.getParent().getParent());
  /** 通过指定的全限定类com.caishijie.gateway.util.car来装载car类对应的反射实例。 **/
  Class<?> clazz=loader.loadClass("com.caishijie.gateway.util.car");
  Constructor cons=clazz.getDeclaredConstructor((Class[])null);
  c=(car)cons.newInstance();
  
  System.out.println(ClassUtils.getShortName(clazz));
//  Class<?> ccc= (Class<?>) ((ParameterizedType).getGenericSuperclass()).getActualTypeArguments()[0];
  
  Method m1=clazz.getMethod("setBrand", String.class);
  m1.invoke(c, "劳斯莱斯");
  
  Method m2=clazz.getMethod("setColor", String.class);
  m2.invoke(c, "褐色");
  
  Method m3=clazz.getMethod("setSize", int.class);
  m3.invoke(c, 10);
  
  c.toprint();
  
 }

}
class car{
 private String brand;
 private String color;
 private int size;
 
 public car(){}
 
 public car(String brand,String color,int size){
  this.brand=brand;
  this.color=color;
  this.size=size;
 }
 
 
 public void toprint(){
  System.out.println(brand+"  "+color+"  "+size);
 }

 public String getBrand() {
  return brand;
 }

 public void setBrand(String brand) {
  this.brand = brand;
 }

 public String getColor() {
  return color;
 }

 public void setColor(String color) {
  this.color = color;
 }

 public int getSize() {
  return size;
 }

 public void setSize(int size) {
  this.size = size;
 }
}

相关标签: 反射、类加载