课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 【昆明Java培训班】Java中的反射
  • 【昆明Java培训班】Java中的反射

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-07

  • 昆明Java培训班的老师今天给同学们分享Java中的反射

    示例类

    @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));

    }

    学Java开发就到昆明达内Java培训班!了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:【昆明达内Java培训】JavaEE的web part1

下一篇:java程序员:SpringIOC使用扩展

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56