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());
}
}
分享到:
相关推荐
java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射
通过学习后,保证初学者对反射有一个很好的理解,有助于之后对反射的进一步...其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。
Java中的反射
java学习例子 java java例子 java反射
Java中的反射机制Java中的反射机制Java中的反射机制
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
java 反射中操作数组 java 反射中操作数组 java 反射中操作数组
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
java之反射优化(缓存思路)源码 编程中,抽象是一个重要思想。一个无状态(业务less)的抽象化工具方法,往往可以起到减少代码量的作用,使得程序员能更加focus更加重要的业务逻辑中去
Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
java反射java反射java反射java反射java反射
JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码
Java反射机制是1.5新增的功能,希望大家能学习愉快!
java中反射知识总结 1.Chp16 2.类对象 3.反射包 4.反射的作用
java反射机制源码java反射机制源码java反射机制源码
反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...