package com.refect.demo; import java.io.Serializable; public class Product implements Serializable{ public String productName; protected String productNo; private double price; public Product(){} public Product(String productName,String productNo,double price){ this.productName = productName; this.productNo = productNo; this.price = price; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getProductNo() { return productNo; } public void setProductNo(String productNo) { this.productNo = productNo; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String toString(){ return productName+":"+productNo+":"+price; } } **************************************************************************************************** package com.refect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Test { public static void main(String[] args) { //1.基本数据类型 //Class cls1 = int.class; //2.引用数据类型 //Class cls2 = Product.class; Class cls2 = null; try { cls2 = Class.forName("com.refect.demo.Product"); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } // Product p = new Product("杯具","bj0010",20.8); // Object p = null; // try { // 调用该类型中的无参的构造函数 // p = cls2.newInstance(); // } catch (InstantiationException e1) { // e1.printStackTrace(); // } catch (IllegalAccessException e1) { // e1.printStackTrace(); // } //Product p = new Product(); //Class cls = p.getClass(); //类名 System.out.println("类路径:"+cls2.getName()); System.out.println("类名:"+cls2.getSimpleName()); //本类定义的所有的属性,但是不包含父类属性 Field[] fs = cls2.getDeclaredFields(); //返回本类以及父类所有的公共的属性 //Field[] fs = cls2.getFields(); //指定获取本类定义的属性 //Field f = cls2.getDeclaredField("productName"); //指定获取本类及父类公有的属性 //Field f = cls2.getField("productName"); for(Field f : fs){ System.out.println("属性访问修饰符:"+Modifier.toString(f.getModifiers())); System.out.println("属性数据类型:"+f.getType()); System.out.println("属性名:"+f.getName()); // f.setAccessible(true); // try{ // if(f.getName().equals("price")){ // f.set(p,26.8); // } // System.out.println("属性值:"+f.get(p)); // } catch (IllegalArgumentException e) { // e.printStackTrace(); // } catch (IllegalAccessException e) { // e.printStackTrace(); // } } //本类定义的所有的方法,但是不包含父类方法 Method[] ms = cls2.getDeclaredMethods(); //Method[] ms = cls2.getMethods(); for(Method m : ms){ System.out.println("方法的访问修饰符:"+Modifier.toString(m.getModifiers())); System.out.println("方法的返回值类型:"+m.getReturnType()); System.out.println("方法名称:"+m.getName()); System.out.println("参数类型:"+m.getParameterTypes()); } // try { // Method m1 = cls2.getDeclaredMethod("setPrice", new Class[]{double.class}); // m1.invoke(p, new Object[]{38.2}); // Method m2 = cls2.getDeclaredMethod("getPrice", null); // Object res = m2.invoke(p, null); // System.out.println(res); // } catch (NoSuchMethodException e) { // e.printStackTrace(); // } catch (SecurityException e) { // e.printStackTrace(); // } catch (IllegalAccessException e) { // e.printStackTrace(); // } catch (IllegalArgumentException e) { // e.printStackTrace(); // } catch (InvocationTargetException e) { // e.printStackTrace(); // } Constructor[] cons = cls2.getConstructors(); for(Constructor c : cons){ System.out.println("构造函数的访问修饰符:"+Modifier.toString(c.getModifiers())); System.out.println("构造函数的方法名:"+c.getName()); for(Class pc : c.getParameterTypes()){ System.out.println("构造函数的参数:"+ pc); } } try { Constructor c = cls2.getConstructor(new Class[]{String.class,String.class,double.class}); Object o = c.newInstance(new Object[]{"洗具","盆",5.00}); System.out.println(o); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } //获取父类信息 Class sc = cls2.getSuperclass(); System.out.println("父类名称:"+sc.getName()); //实现接口的信息 Class[] ic = cls2.getInterfaces(); for(Class i : ic){ System.out.println("接口名称:"+i.getName()); } //包信息 Package p = cls2.getPackage(); System.out.println("包名称:"+p.getName()); } }