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());
 }
 

}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值