public class ReflectTest01 { public static void main(String[] args) throws ClassNotFoundException { //第一种方式 Class c1 = Class.forName("Employee");//c1引用保存地址指向堆中的对象,该对象代表的是Employee整个类 //第二种方式 //Java中每个类都有class属性 Class c2 = Employee.class; //第三种方式 //java语言中任何一个java对象都有getClass 方法 Employee e = new 获得类的加载.Employee();睿共享 Class c3 = e.getClass(); //因为Employee这个类在jvm中只有一个,,所以c1,c2,c3 的内存地址是相同的,指向堆中唯一的一个对象 System.out.println(c1==c2);//双等号两边如果是跟引用数据类型 ---->比较的是内存地址 System.out.println(c2==c3); //c4,c5,c6 都代表 date这个类 Class c4 = Date.class; //c4代表 Date这个类 Class c5 = Class.forName("java.lang.Date"); // 必须写类全名,类全名带有包名 Date d = new Date(0); Class c6 = d.getClass(); } } class Employee { //Field 字段 private String name; //无参 public Employee() {} //Constructor 构造函数 public Employee(String name) { this.name = name; } //方法 public睿共享 void work() { System.out.println(name + "在工作"); } }
--------------------------------------------------------------------------------------------------------------------------------
新建一个实体类
//实体类
public class User {
private Integer id;//id
private String userCode;//用户编码
private String userName;//用户名称
private String userPassword;//用户密码
private int gerder;//性别
private Date birthday;//出生日期
private St睿共享 ring phone;//电话
private String address;//地址
private Integer age;//年龄
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public int getGerder() {
return gerder;
}
public void setGerder(int gerder) {
this.gerder = gerder;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
睿共享 public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userCode='" + userCode + ''' +
", userName='" + userName + ''' +
", userPassword='" + userPassword + ''' +
", gerder=" + gerder +
", birthday=" + birthday +
", phone='" + phone + ''' +
", address='" + address + ''' +
", age=" + age +
'}';
}
public User(Integer id, String userCode, String userName) {
this.id = id;
this.userCode = userCode;
this.userName = userName;
}
public User() {
}
}
User user = new User();
//1反射创建对象第一种方法
Object o = c.newInstance();
//複製上去
User user1 = (User)o;
user1.setId(1);
user1.setUserCode("admin");
user1.setUserName("李四");
System.out.println(user1);
Constructor[] constructors = c.getConstructors();
for (Constructor constructor : constructors){
System.out.println("constructor"+constructor);
}
//2反射创建对象第二种方法 //通过构造方法 通过class对象获取构造器 然后newInstance
Constructor constructor = c.getConstructor(Integer.class,String.class,String.class);
Object o1 = constructor.newInstance(1, "刘思", "admin");
if(o1 instanceof User){
User user2 = (User) o1;
System.out.println(user2);
}
------------------------------------------------------------------------------------------------------------------------------------
练习反射
public class ArticleTypeBean {
private int id = -1;
private String typeName = "";
private String typeInfo = "";
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTypeInfo() {
return typeInfo;
}
public void setTypeInfo(String typeInfo) {
this.typeInfo = typeInfo;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
@Test
public void test() throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
Class c = Class.forName("com.rzk.valuebean.ArticleTypeBean");
//获得类的名字
System.out.println(c.getName());//获得包名和类名
System.out.println(c.getSimpleName());//获得类名
//获得类的属性
Field[] fields = c.getFields();//获得类的公开属性
fields = c.getDeclaredFields();//获得该类的全部属性
for (Field fs : fields){
System.out.println(fs);
}
//获得指定属性的值
System.out.println("----------华丽的分割线----------");
Field name = c.getDeclaredField("typeName");
System.out.println(name);
System.out.println("-------有是一条华丽的分割线-------");
//获得类的方法
Method[] methods = c.getMethods();//获得本类及其父类的全部public方法
for (Method m : methods){
System.out.println(m);
}
methods = c.getDeclaredMethods();//获得本类的所有方法
for (Method method : methods){
System.out.println("getDeclareMethods "+method);
}
//获得指定的方法 要赋值
Method typeName = c.getMethod("getTypeName");
Method setTypeName = c.getMethod("setTypeName",String.class);
System.out.println(typeName);睿共享
System.out.println(setTypeName);
System.out.println("-------有是一条华丽的分割线-------");
//获得指定的构造器
Constructor[] constructors = c.getConstructors();
for (Constructor constructor:constructors){
System.out.println(c);
}
constructors = c.getDeclaredConstructors();
for (Constructor constructor : constructors){
System.out.println(constructor);
}
System.out.println("-------有是一条华丽的分割线-------");
Constructor declaredConstructor = c.getDeclaredConstructor();
System.out.println("指定的构造器 = "+declaredConstructor);
}