使用Java反射机制获取对象

本文由广州疯狂软件教育java培训分享:

构造接口Person,所有Person都会问好,但具体讲什么语言就不知道了!

package interf;

public interface Person {

       public void sayHello();

}

构造一个Person的实现类American,问好的时候讲英语

package interf;

public class American implements Person {

    @Override

    public void sayHello() {

        System.out.println("Hello,I'm American!");

    }

}

构造一个Person的实现类Chinese,问好的时候讲中文

package interf;

public class Chinese implements Person {

       public void sayHello() {

              System.out.println("你好,我是中国人!");

       }

 //重写sayHello方法

 public void sayHello(String language) {

  this.language=language;

  System.out.println("你好,我用"+language+"问好!");

 }

}

package interf;

import org.junit.*;

public class PersonTest {

 public void Test() throws ClassNotFoundException, InstantiationException,

IllegalAccessException {

  //第一种方式,直接new

  Person p = new Chinese();

  p.sayHello();

//第二种方式,采用反射机制获取对象

  //Class<?> c = Class.forName("interf.Chinese");

  Class<?> c = Class.forName("interf.American");

  System.out.println("Chinese类全名:"+Chinese.class.getSimpleName());

  System.out.println("Chinese类名:"+Chinese.class.getName());

  Person p3 = (Person)c.newInstance();

  p3.sayHello();

  try {

   Constructor<?> constructor = Chinese.class.getConstructor(); //获取构造方法

   Chinese chineseReflect = (Chinese) constructor.newInstance(); //创建对象

   Method method = Chinese.class.getMethod("sayHello",String.class); //获取方法

   method.invoke(chineseReflect, "中文"); //调用方法

   Field field = Chinese.class.getField("language"); //获取域

   System.out.println("Reflect -> " + field.get(chineseReflect)); //获取域的值

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

}

test结果如下:

你好,我是中国人,我用中文

Chinese类全名:Chinese

Chinese类名:interf.Chinese

Hello,I'm American!

你好,我用中文问好!

Reflect -> 中文

疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼

原文地址:https://www.cnblogs.com/gojava/p/3635966.html