package classdemo;
import java.io.Serializable;
/** 提供JavaBean,用于之后反射操作
* JavaBean规范
* 1.提供私有字段,例如:private String id;
* 2.必须提供getter或setter方法
* 3.提供无参构造方法
* 4.必须实现序列化接口
* java.io.Serializable
*
*/
public class Bean implements Serializable {
private String id;
private String className;
public String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Bean(String id, String className, String description) {
super();
this.id = id;
this.className = className;
this.description = description;
}
public Bean() {
super();
// TODO Auto-generated constructor stub
}
}
package classdemo;
import org.junit.Test;
public class ClassDemo {
/* Java提供3种方式获得Class对象
* * 不同应用场景,需要不同的方式获得Class对象
*
* 方式:
* 1.通过字符串(全限定类名)获得
* 格式:Class clazz = Class.forName("字符串");
* 全限定类名:包名 + 类名
* classdemo.Bean
* 2.通过Java类型获得
* 格式:Class clazz = 类型.class;
* 3.通过实例对象(变量名)获得
* 格式:Class clazz = obj.getClass();
*
* 应用场景:
* 方式1:之后开发中,从配置文件中,获得“全限定类名”,并通过反射进行所有操作。
* 方式2:确定构造方法、普通方法形参列表时,需要通过类型获得。
* 例如:public void init(String s , Integer i){}
* 内存需要通过类型对应Class进行标记,init(String.class , Integer.class)
* 方式3:方法内部通过变量名获得
* pubilc void init (Object s){
* s.getClass();
* }
*
*/
@Test
public void demo01() throws Exception{
// 通过字符串获得
Class clazz = Class.forName("classdemo.Bean");
System.out.println(clazz);
}
@Test
public void demo02() throws Exception{
// 通过Java类型获得
Class clazz = Bean.class;
System.out.println(clazz);
}
@Test
public void demo03() throws Exception{
// 通过实例对象获得
Bean bean = new Bean();
Class clazz = bean.getClass();
System.out.println(clazz);
}
}