黑马程序员 Java高新技术---反射

来源:互联网 发布:java collection 编辑:程序博客网 时间:2024/04/29 11:10
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

什么叫反射?
 一般情况,如果已经存在一个类,那么可以通过这个类进行对象的实例化操作,
如果现在需要通过一个对象取得类的完整信息,此时就需要反射。

package com.itheima.classdemo.demo1;

class Person{

}

public class ClassInfoDemo1 {
public static void main(String[] args){
  Person p  = new Person();
  System.out.println(p.getClass().getName());
}
}
getClass()方法可以返回Class类型的实例。getName()方法可以返回Class类型实例的名称。
通过这两个方法可以取得一个完整的对象所属于的包.类名称,也就是说通过反射机制取得了反向的信息。

Class类:
Class类是一切的反射根源,该类被final修饰 是一个最终类。该类的构造方法是私有的。

Class类实例化三种方式:
package com.itheima.classdemo.demo2;

public class ClassInstanceDemo1 {

/**
 * @param args
 * @throws ClassNotFoundException 
 */
public static void main(String[] args) throws ClassNotFoundException {
  // TODO Auto-generated method stub
  String str = "hello";
  Class<?> cls = str.getClass();   //第一种形式:Object的中的getClass()方法。
  System.out.println(cls.getName());
  Class<String> cls2 = String.class;  //第二种形式:类.class
  System.out.println(cls2.getName());
  Class<?> cls3 = Class.forName("java.lang.String");  //第三种形式:Class类中的静态方法forName(String s);
  System.out.println(cls3.getName());
 
}

}

使用Class类进行对象的实例化操作:

package com.itheima.classdemo.demo3;

public class ClassIntanceObjectDemo3 {

/**
 * @param args
 * @throws ClassNotFoundException 
 * @throws IllegalAccessException 
 * @throws InstantiationException 
 */
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
  // TODO Auto-generated method stub
  Class<?> cls = Class.forName("com.itheima.classdemo.demo3.Person"); //通过forName()取得Person类
  Person per = (Person)cls.newInstance(); //通过newInstance() 取得Person类的实例
  per.setAge(15);
  per.setName("zhangyang");
  System.out.println(per.toString());

}

}

class Person{
private String name;
private int age;
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 String toString(){
  return "姓名:"+this.name+",年龄:"+this.age;
}
}


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

0 0
原创粉丝点击