博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[新手学Java]反射学习笔记
阅读量:6672 次
发布时间:2019-06-25

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

示例类

@SuppressWarnings("unused")public class Person {    public String Name;    private int Age;    public Gender Gender;    private static String Species = "人类";    public Person(){        Name="佚名";        Age=-1;    }    public Person(String name){        Name=name;    }    private Person(String name,int age){        Name=name;        Age=age;    }        private Person(Gender g){        Gender=g;    }    public void Run(){        System.out.println(Name+" 跑!");    }    public void Attack(){        System.out.println(Name+" 打!");    }    public void Attack(String name){        System.out.println(Name+" 打 "+name+"!");    }    private void Eat(String food){        System.out.println(Name+" 吃 "+food);    }    public void Introduce()    {        System.out.println("我叫"+Name+",我今年"+Age+"岁了。");    }    public static void PlayGame(String gameName){        System.out.println("玩 "+gameName+" 游戏");    }    public static void main(String[] args){        System.out.println("main");        for(String s:args)            System.out.println(s);    }}enum Gender{    Male,Female}

反射类的无参构造函数:

@Test//反射类的无参构造函数public void constructor1() throws Exception{    Class clazz = Class.forName("pro.shaowei.reflect.Person");    Constructor c=clazz.getConstructor();    Person p = (Person) c.newInstance();    Person p1 = (Person) clazz.newInstance();    p.Introduce();    p.Run();    p1.Introduce();    p1.Run();}

反射类的有参构造函数:

@Test//反射类的有参构造函数public void constructor2() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Constructor c=clazz.getConstructor(String.class);    Person p=((Person) c.newInstance("张三"));    p.Introduce();    p.Run();}

反射类的私有构造函数:

@Test//反射类的私有构造函数public void constructor3() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    //反射私有构造函数时必须从使用 getDeclaredConstructor 方法    Constructor c=clazz.getDeclaredConstructor(String.class,int.class);    c.setAccessible(true);//暴力反射    Person p=((Person) c.newInstance("张三",25));    p.Introduce();    p.Run();}

反射类的公有无参方法:

@Test//反射类的公有无参方法public void method1() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Method method=clazz.getMethod("Run");    method.invoke(p);}

反射类的公有有参方法:

@Test//反射类的公有有参方法public void method2() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Method method=clazz.getMethod("Attack",String.class);    method.invoke(p,"李四");}

反射类的私有有参方法:

@Test//反射类的私有有参方法public void method3() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Method method=clazz.getDeclaredMethod("Eat",String.class);    method.setAccessible(true);    method.invoke(p,"香蕉");}

反射类的静态有参方法:

@Test//反射类的静态有参方法public void method4() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Method method=clazz.getDeclaredMethod("PlayGame",String.class);    method.setAccessible(true);    method.invoke(p,"扫雷");}

反射类的main方法:

@Test//反射类的main方法public void method5() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Method method=clazz.getDeclaredMethod("main",String[].class);    method.setAccessible(true);    method.invoke(p,(Object)new String[]{"1","2"});}

反射类公有的字段:

@Test//反射类公有的字段public void field1() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Field field=clazz.getField("Name");    System.out.println(field.get(p));    field.set(p, "王五");    p.Introduce();}

反射类私有的字段:

@Test//反射类私有的字段public void field2() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Field field=clazz.getDeclaredField("Age");    field.setAccessible(true);    System.out.println(field.get(p));    field.set(p, 7);    p.Introduce();}

反射类私有静态的字段:

@Test//反射类私有静态的字段public void field3() throws Exception{    Class clazz=Class.forName("pro.shaowei.reflect.Person");    Person p=(Person) clazz.newInstance();    Field field=clazz.getDeclaredField("Species");    field.setAccessible(true);    System.out.println(field.get(p));    field.set(p, "不死族");    System.out.println(field.get(p));}

转载于:https://www.cnblogs.com/WayneShao/p/5929509.html

你可能感兴趣的文章
dev 小问题列表
查看>>
PHP常用MySql操作
查看>>
UT源码+105032014018
查看>>
extjs grid 列顺序紊乱问题
查看>>
狗扑论坛 自动刷取VIP狗粮
查看>>
上传图片保存到MySql数据库并显示--经验证有效
查看>>
Linux wget auto login and backup database
查看>>
你所能用到的数据结构(四)
查看>>
forEach--list简单学习
查看>>
背包问题(贪心策略)
查看>>
图的遍历——DFS
查看>>
Linked List 的sample codes
查看>>
ORM-数据库命令操作包装实例对象学习
查看>>
UVA 1452 Jump 约瑟夫环
查看>>
DOM(DHTML)
查看>>
Sublime Text 3 安装插件管理 Package Control
查看>>
移动web图片加载完获取img宽高
查看>>
线段树入门
查看>>
AngularJs的UI组件ui-Bootstrap分享(七)——Buttons和Dropdown
查看>>
牛客小白月赛14 -G (筛法)
查看>>