`
yidongkaifa
  • 浏览: 4073975 次
文章分类
社区版块
存档分类
最新评论

java中的反射问题

 
阅读更多
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反射java反射java反射java反射java反射

    java中反射的概念

    通过学习后,保证初学者对反射有一个很好的理解,有助于之后对反射的进一步...其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

    Java中的反射

    Java中的反射

    java例子 java反射

    java学习例子 java java例子 java反射

    Java中的反射机制

    Java中的反射机制Java中的反射机制Java中的反射机制

    Java方法反射调用demo

    Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    JAVA 反射机制应用

    JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用

    java 反射中操作数组

    java 反射中操作数组 java 反射中操作数组 java 反射中操作数组

    java反射机制.zip

    java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...

    java之反射优化(缓存思路)源码

    java之反射优化(缓存思路)源码 编程中,抽象是一个重要思想。一个无状态(业务less)的抽象化工具方法,往往可以起到减少代码量的作用,使得程序员能更加focus更加重要的业务逻辑中去

    Java反射经典实例

    Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例

    Java反射机制总结

    这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。

    java反射........

    java反射java反射java反射java反射java反射

    JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码

    JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码

    Java 1.5 反射机制

    Java反射机制是1.5新增的功能,希望大家能学习愉快!

    java中反射知识总结

    java中反射知识总结 1.Chp16 2.类对象 3.反射包 4.反射的作用

    java反射机制源码

    java反射机制源码java反射机制源码java反射机制源码

    反射实例-JAVA反射机制.doc

    反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...

Global site tag (gtag.js) - Google Analytics