通过一个对象找到其所在的类,在Object类中存在以下的一个方法:

public final Class<?> getClass()所有类的对象都可以使用getClass()方法完成操作,那么这个方法返回的是一个Class,通过这个方法可以实现反射操作。


class Person
{
}
public class PersonClassDemo {
 public static void main(String args[])
 {
  Person p1=new Person();
  System.out.println(p1.getClass().getName());
 }
}
在反射机制中Class类是一个操作的源头,所有的反射操作从此类展开,但是如果要想实例化此类对象可以通过以下的三个途径完成:

1,通过Object类中的getClass()方法:public final Class<?>getClass()

2,通过类.class的形式

3,通过Class类的静态方法:

public static Class<?> forName(String className)



class Person
{
}
public class PersonClassDemo {
 public static void main(String args[])
 {
  Person per=new Person();
  Class<?> c=per.getClass();
  System.out.println(c.getName());
  Class<?> c1=Person.class;
  System.out.println(c1.getName());
  try {
   Class<?> c2=Class.forName("Person");
      System.out.println(c2.getName());
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 }
}

通过Class类实例化对象

如果一个类中存在一个无参构造方法,那么可以直接通过Class类进行实例化的操作。

步骤:

1,根据包.类名称实例化Class对象

2,通过Class类中的newInstance()方法来实例化对象。

class Person
{
 public String getString()
 {
  return "hello world";
 }
}
public class PersonClassDemo {
 public static void main(String args[])
 {
  Class<?> c1=null;
  try {
   c1=Class.forName("Person");
    
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  try {
   Person p1=(Person)c1.newInstance();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  }
 }
}
要在像主函数那样调用,那么类必须有是无参构造,否则就要调用指定的构造方法,并向其传递指定的参数才可以进行实例化操作。

如果要想得到一个类的构造方法,则可以使用以下的方法:

public Constructor<?>[] getConstructors()

这个方法得到全部的构造方法,因为一个类中存在多个构造方法,所有会以Constructor对象数组的形式返回,Constructor类的定义在java.lang.reflect包中,所以属性反射的操作包。

取得一个构造方法之后,可以通过Constructor类以下的方法进行实例化:

public T newInstance(Object...initargs)

 

import java.lang.reflect.Constructor;

class Person
{
 private String name;
 private int age;
 Person(String name,int age)
 {
  this.name=name;
  this.age=age;
 }
 public String getString()
 {
  return "hello world";
 }
}
public class PersonClassDemo {
 public static void main(String args[]) throws Exception
 {
  Class<?> c1=null;
  Person per=null; 
     c1=Class.forName("Person");
  //得到构造方法数组
     Constructor cons[]=c1.getConstructors();
     //参数最多的作为第一个构造
     per=(Person)cons[0].newInstance("jin",22);
     System.out.println(per);
 }
}

 

posted on 2011-02-02 15:41  魔战  阅读(195)  评论(0)    收藏  举报