黑马程序员技术交流社区

标题: 反射的基本步骤:1、获得Class对象 [打印本页]

作者: 星辉祝愿    时间: 2015-5-25 13:25
标题: 反射的基本步骤:1、获得Class对象
本帖最后由 星辉祝愿 于 2015-5-25 13:28 编辑

1、获得Class对象,就是获取到指定的名称的字节码文件对象。
获取这个Class对象,有三种方式:
1:通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。
2:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类。
前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。
3:使用的Class类中的方法,静态的forName方法。
指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。

  1. import java.lang.reflect.Method;

  2. public class test1 {

  3.         public static void main(String[] args) throws Exception {
  4.                 System.out.println(test1.class);
  5.                
  6.                 method_1();
  7.         }

  8.         public static void method_1() throws ClassNotFoundException{
  9.                 // 1. 根据给定的类名来获得  用于类加载
  10.                 Class c1 = Class.forName("fanshe.Student");
  11.                
  12.                 // 2. 如果拿到了对象,不知道是什么类型   用于获得对象的类型
  13.                 Object obj = new Student();
  14.                 Class c2 = obj.getClass();// 获得对象具体的类型

  15.                 // 3. 如果是明确地获得某个类的Class对象  主要用于传参
  16.                 Class c3 = Student.class;
  17.                
  18.                 System.out.println(c1.getName());
  19.         }

  20. }

  21. class Student{
  22.         private int age;
  23.         private String name;
  24.         /**
  25.          * @return age
  26.          */
  27.         public int getAge() {
  28.                 return age;
  29.         }
  30.         /**
  31.          * @param age 要设置的 age
  32.          */
  33.         public void setAge(int age) {
  34.                 this.age = age;
  35.         }
  36.         /**
  37.          * @return name
  38.          */
  39.         public String getName() {
  40.                 return name;
  41.         }
  42.         /**
  43.          * @param name 要设置的 name
  44.          */
  45.         public void setName(String name) {
  46.                 this.name = name;
  47.         }
  48. }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2