Java反射机制创建对象

       java删除文件夹下所有文件由广州疯狂软件教育java培训分享:

  package lxf;

  import java.lang.reflect.Constructor;

  import java.lang.reflect.Field;

  import java.lang.reflect.Method;

  class Person {

  private String name;

  private int age;

  public Person(String name, int age) {

  this.name = name;

  this.age = age;

  }

  public Person() {

  // TODO Auto-generated constructor stub

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  }

  /**

  * 使用反射机制来创建对象

  *

  */

  public class CreateObject {

  /**

  * Java的反射机制是指:反射就是把Java类中的各种成分映射成相应相应的Java类,

  然后就可以获取这个类的所有信息

  *

  * @throws Exception

  */

  public static void createObj1() throws Exception {

  // 返回与带有给定字符串名的类或接口相关联的 Class 对象。

  // Class classType = Person.class;

  Class classType = Class.forName("lxf.Person");

  Object obj = classType.newInstance();

  System.out.println("使用反射反射机制创建出来的对象是否是Person类的

  对象:"

  + (obj instanceof Person));

  }

  public static void createObj2() throws Exception {

  @SuppressWarnings("rawtypes")

  Class classType = Person.class;

  @SuppressWarnings("unchecked")

  Constructor con = classType.getConstructor(String.class,

  int.class);

  Object obj = con.newInstance("lxf", 23);

  System.out.println("使用constructor对象的newInstance方法创建对象的信息:"

  + ((Person) obj).getName());

  }

  public static void methodDo() throws Exception {

  Person p = new Person();

  Class classType = Person.class;

  Method method = classType.getMethod("setName", String.class);

  method.invoke(p, "ckl");

  System.out.println("使用反射操作SetName方法后,Person对象的name值是:" + p.getName());

  Method method2 = classType.getDeclaredMethod("test");

  method2.setAccessible(true);

  method2.invoke(p);

  }

  /**

  * 操作字段

  *

  * @throws Exception

  */

  public static void FieldDo() throws Exception {

  Person p = new Person();

  Class classType = Person.class;

  Field field = classType.getDeclaredField("name");

  Field field2 = classType.getDeclaredField("age");

  field.setAccessible(true);

  field2.setAccessible(true);

  field.set(p, "lxf");

  field2.set(p, 23);

  System.out.println("使用反射机制操作被private修饰的对象字段后得到的属性值是:" + p.getName());

  System.out.println("使用反射机制操作被private修饰的对象字段后得到的属性值是:" + p.getAge());

  }

  public static void main(String[] args) throws Exception {

  new CreateObject().FieldDo();

  }

  }

  根据以上代码:.使用反射机制创建对象的步骤如下:

  1、先声明你要创建的对象的类全称;使用Class类的静态方法forName(String.className)加载这个类的字节码(注意,加载字节码不等于实例化对象) ,返回 一个Class对象,这个对象代表的是一个字节码文件。

  2、调用这个类对象(字节码)的方法newInstance()方法(注意:这里的这个newInstance方法默认调用默认的构造方法即调用无参的构造方法, 一旦构造方法有参数时,此方法行不通,需要使用构造方法的对象的相关方法来 实例化)实例化类Person,返回的是Object类型

  3、强制转换成Person类型即你所需类型

  而获得Class对象的方法还有:

  Class c = Class.forName("java.lang.String");这条语句得到一个 String 类的类对象。还有另一种方法,如下面的语句:Class c = int.class; 或者 Class c = Integer.TYPE;它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。

  到此反射基本操作就结束了,详细方法可参看API

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

  疯狂Java在前几年的培训过程中,凭借自身强悍的师资、一流的课程、真实的项目、超高的就业率已经让广大南方学子成功走上软件工程师职业道路。大量毕业即失业的学子已通过疯狂Java实现了就业。

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