博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本反射了解
阅读量:5318 次
发布时间:2019-06-14

本文共 6604 字,大约阅读时间需要 22 分钟。

1 package cn.wh; 2 /** 3  * java.lang.Class 4  * @author 王恒 5  * @time 2016年11月2日 上午10:39:25 6  */ 7 public class RedlectTest { 8     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 9         Cat cat=new Cat();System.out.println("--------------------------");10         11         Class c1=Class.forName("cn.wh.Cat");12         Class c2=Cat.class;13         Class c3=cat.getClass();14         15         System.out.println(c1.getName());16         System.out.println(c1.getSimpleName());17         //返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口。18         System.out.println(c1.getClasses());19         System.out.println(c1.getPackage());20         System.out.println(c1.getModifiers());21         System.out.println(c1.getInterfaces());22         System.out.println("接口数量 "+c1.getInterfaces().length);23         System.out.println(c1.getSuperclass().getName());24         System.out.println("实例化  "+c1.newInstance());25     }26 }
RedlectTest
1 package cn.constructor; 2  3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.InvocationTargetException; 5  6 public class TestConstructor { 7  8     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 9         Class claxx=Class.forName("cn.wh.Cat");10         //查看有几个构造方法11         Constructor[] cs=claxx.getConstructors();12         System.out.println("有public几个构造方法   "+cs.length);13         Constructor[] cs2=claxx.getDeclaredConstructors();14         System.out.println("总共有几个构造方法   "+cs2.length);15         //暴力反射,即没有public修饰的构造方法,使其能够创建构造方法16         //c.setAccessible(true);17         //一个参数18         Constructor c=claxx.getDeclaredConstructor(String.class);19         System.out.println(c.getName()+"---"+c.getModifiers());20         //两个参数21         Constructor c2=claxx.getDeclaredConstructor(String.class,String.class);22         System.out.println(c.getName()+"---"+c.getModifiers());23         //实例化24         Object obj=c.newInstance("");25         System.out.println(obj+"---"+obj.getClass().getSimpleName());26         //Class
... parameterTypes 表示任意类型的可变参数27 }28 }
TestConstructor
1 package cn.Field; 2  3 import java.lang.reflect.Field; 4  5 import cn.wh.Cat; 6  7 public class TestField { 8  9     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException {10         Class claxx=Class.forName("cn.wh.Cat");11         Cat cat=(Cat) claxx.newInstance();12         System.out.println("---------------------");13         //获取声明字段数组14         Field[] fs=claxx.getDeclaredFields();15         System.out.println("数组长度为   "+fs.length);16         17         for(Field f:fs){ 18             f.setAccessible(true);19             System.out.println(f.getName()+"--"+f.getModifiers()+"---"+f.get(cat));20         }21         22         //获取单个声明字段23         System.out.println("---------------------获取单个声明字段");24         Field f2=claxx.getDeclaredField("master");25         f2.setAccessible(true);26         System.out.println(f2.getName()+"--"+f2.getModifiers()+"---"+f2.get(cat));27         System.out.println(f2.getName()+"--"+f2.getModifiers()+"---"+f2.get(null));28         //若声明的字段是static 类型,则可以为f2.get(null),否则一律加对象29     }30 }
TestField
1 package cn.wh; 2  3 public class Cat extends Animal{
//,Maoke{ 4 //protected int age=50; 5 protected String age="我的年龄50"; 6 public static String master="周老师"; 7 8 public Cat(){ 9 System.out.println("Cat.Cat(111)");10 }11 public Cat(String age,String sname){12 13 }14 15 Cat(String master,String sname,String age1){16 17 };18 19 public Cat(String sname){20 //super(); 写与不写 都存在! 如果写super()必须放在第一行21 super(sname);22 this.sname=sname;23 //super.eat();24 //System.out.println("Cat.Cat(222)"+super.age);25 //System.out.println("Cat.Cat(222)"+age);26 }27 // public float walk(String road){28 // System.out.println("Cat.walk()");29 // return 60f;30 // }31 // 32 float walk(){33 System.out.println("Cat.walk()");34 m1();35 return 60f;36 }37 38 39 public void eat(){40 System.out.println("Cat.eat(111)");41 }42 void m1(){43 44 }45 46 }
Cat
1 package cn.wh; 2  3  4  5 public  class Animal { 6      7     protected  String  sname=""; 8     protected  int age=80; 9     public static String master="杨老师";10     public Animal(){11         //System.out.println("Animal.Animal(111)");12         sname="";13     }14     15     public Animal(String sname){16         //System.out.println("Animal.Animal(222)");17     }18     19     public  void eat(){20         System.out.println("Animal.eat(111)");21     }22     23     public void eat(String foodName){24         System.out.println("Animal.eat(222)"+foodName);25     }26     27      String  eat(String foodName,int num){28         System.out.println("Animal.eat(333)"+foodName);29         return "好";30     }31     32     33     public void sleep(){34         35     }36      float walk(){37         System.out.println("Animal.walk()");38         return 30.5f;39     }40     41     42     43 }
Animal
1 package cn.method; 2  3 import java.lang.reflect.InvocationTargetException; 4  5 import java.lang.reflect.Method; 6  7 import cn.wh.Cat; 8  9 public class TestMethod {10     11     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {12         Cat cat=new Cat();13         14         Class claxx=Class.forName("cn.wh.Cat");15         //获取所有方法         包括实例方法,即对象方法    类名.getInstanll();16         Method[] ms=claxx.getDeclaredMethods();17         for(Method m:ms){18             System.out.println(m.getModifiers()+"--"+m.getName()+"--"+m.getParameterCount()+"--"+m.getReturnType());19         }20         21         Method me=claxx.getDeclaredMethod("walk",String.class);22         me.setAccessible(true);23         me.invoke(cat,"貓");24         25         Method me2=claxx.getDeclaredMethod("eat");26         me.setAccessible(true);27         me2.invoke(cat);28         29         claxx.getDeclaredMethod("m1").invoke(null);30     }31 }
TestMethod

 

转载于:https://www.cnblogs.com/1020182600HENG/p/6022589.html

你可能感兴趣的文章
node js 安装.node-gyp/8.9.4 权限 无法访问
查看>>
windows基本命令
查看>>
VMware中CentOS设置静态IP
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
Hover功能
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>
MongoDB-CRUD
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>