Java中反射的三种常用方式

package com.xiaohao.test;

public class Test{
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
// Class<?> clazz=Class.forName("com.xiaohao.test.User"); //1方法一
// User user=(User) clazz.newInstance();

// User user=User.class.newInstance(); //2 方法二

User user2=new User(); //3 方法三
User user=user2.getClass().newInstance();
user.setId(10);
user.setUserName("小浩");
user.setPassword("123456");
System.out.println(user);

}
}

package com.xiaohao.test;

import java.util.ArrayList;
import java.util.List;

public class User {
private Integer id;
private String userName;
private String password;
List<String> books=new ArrayList<String>();

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}

public User() {
super();
}

public List<String> getBooks() {
return books;
}

public void setBooks(List<String> books) {
this.books = books;
}

@Override
public String toString(){
return this.id+" "+this.userName+" "+this.password+" ";
}

}

package com.xiaohao.test;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test{
public static void main(String[] args) throws Exception {
// Class<?> clazz=Class.forName("com.xiaohao.test.User"); //1方法一
// User user=(User) clazz.newInstance();

// User user=User.class.newInstance(); //2 方法二

User user2=new User(); //3 方法三
User user=user2.getClass().newInstance();
System.out.println("user2对象的值为:"+user2);
System.out.println("类的名字为:"+user2.getClass().getName());
// Field field=user2.getClass().getDeclaredField("number");
// Field field=User.class.getDeclaredField("number");
Field field=Class.forName("com.xiaohao.test.User").getDeclaredField("number");
field.setAccessible(true);
field.set(user2,"1000");
System.out.println("user2对象的值为:"+user2);
Method method=User.class.getDeclaredMethod("setUserName",String.class);
method.invoke(user2,"小浩爷爷");
System.out.println("user2对象的值为:"+user2);
Class<?> component=Class.forName("com.xiaohao.test.User").getDeclaredField("address").get(user2).getClass().getComponentType();
User.class.getDeclaredField("address").setAccessible(true);
int length=((String[])User.class.getDeclaredField("address").get(user2)).length;
System.out.println("user2中原始的数组的长度为:"+length);
Object [] array=(Object[]) Array.newInstance(component, length+75);
System.out.println("user2中修改后的数组的长度为:"+array.length);
user.setId(10);
user.setUserName("小浩");
user.setPassword("123456");
System.out.println(user);

}
}

package com.jd.singleton;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/***** Created by zhanghao10 on 2016/5/9.*/
public class Reflect {/***  测试反射生成对应的方法*/public static void main (String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException {//        Class<?> clazz= Class.forName("com.jd.singleton.User");
//        User user= (User) clazz.newInstance();
//        User user2= (User) clazz.newInstance();
//        System.out.println(user==user2);
//        user.setName("Hello World");
//        System.out.println(user.equals(user2));
//        System.out.println(user.getName());
//        System.out.println(user2.getName());//        Class<User> clazz2=User.class;
//        User user=clazz2.newInstance();
//        user.setName("Hello World");
//        System.out.println(user.getName());//        User user=new User();
//        User user1=user.getClass().newInstance();
//        user1.setName("Hello World");
//        System.out.println(user.getName());//        Integer n1 = new Integer(47);
//        Integer n2 = new Integer(47);
//
//        System.out.println(n1 == n2);
//        System.out.println(n1.equals(n2));//        Class<?> clazz= Class.forName("com.jd.singleton.User");
//        Constructor<?>[] cons=clazz.getConstructors();
//        System.out.println(cons.length);//           Class<?> clazz=Class.forName("com.jd.singleton.User");
//           Constructor<?> [] cons= clazz.getDeclaredConstructors();
//           cons[0].setAccessible(true);//对于私有方法,需要设置可见性为false
//           User user= (User) cons[0].newInstance();
//           user.setName("123456");
//           System.out.println(user.getName());//           Class<?> clazz=Class.forName("com.jd.singleton.User");
//           Constructor<?> [] cons= clazz.getDeclaredConstructors();
//           cons[0].setAccessible(true);//对于私有方法,需要设置可见性为false
//           User user= (User) cons[0].newInstance();
//           user.setName("123456");
//           System.out.println(user.getName());//              Class<?> clazz=Class.forName("com.jd.singleton.User");
//              User user= (User) clazz.newInstance();
//              Field filedName=clazz.getDeclaredField("name");
//              filedName.setAccessible(true);
//              filedName.set(user,"我是小浩也");
//              System.out.println(user.getName());//                 Class<?> clazz=Class.forName("com.jd.singleton.User");
//                 User user= (User) clazz.newInstance();
//                 Method method=clazz.getDeclaredMethod("setName",String.class);
//                 method.invoke(user,"天下太平");
//                System.out.println(user.getName());Class<?> clazz=Class.forName("com.jd.singleton.User");User user= (User) clazz.newInstance();Method method=clazz.getDeclaredMethod("setName",String.class,int.class);method.invoke(user,"天下太平",123456);System.out.println(user.getValue());}}

  

package com.jd.singleton;/*** Created by zhanghao10 on 2016/5/9.*/
public class User {//    private User(){}private String name;//用户名称private int value;public String getName() {return name;}public int getValue(){return value;}public void setName(String name,int value) {this.name = name;this.value=value;}@Overridepublic int hashCode() {return (int) (Math.random()*100);
//        return super.hashCode();}@Overridepublic boolean equals(Object obj) {return true;
//        return super.equals(obj);}
}

  

Java中反射的三种常用方式相关推荐

  1. Java中反射的实现方式

    Java中的发射机制 所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Metho ...

  2. Java中创建对象的几种方式

    Java中创建对象的几种方式 1.使用new创建对象,在堆上创建. 2.克隆 3.反序列化 4.反射创建对象 5.NIO中可以使用本地方法直接分配堆外内存. 转载于:https://www.cnblo ...

  3. Java中创建对象的四种方式

    为什么80%的码农都做不了架构师?>>>    Java中创建对象的四种方式 (1) 用new语句创建对象,这是最常见的创建对象的方法.    (2) 运用反射手段,调用java.l ...

  4. java中几种创建对象的方式

    java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式:     ●  用new语句创建对象     ●  运用反射手段,调用java.la ...

  5. 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  6. Java中多线程访问冲突的解决方式

    Java中多线程访问冲突的解决方式 当时用多线程访问同一个资源时,非常容易出现线程安全的问题,例如当多个线程同时对一个数据进行修改时,会导致某些线程对数据的修改丢失.因此需要采用同步机制来解决这种问题 ...

  7. Java中测试异常的多种方式

    Java中测试异常的多种方式 参考文章: (1)Java中测试异常的多种方式 (2)https://www.cnblogs.com/huang0925/p/3663074.html 备忘一下.

  8. java 中的多种判空方式

    前言   如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^.   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! java 中的多种判空方式 1 ...

  9. 请说明一下JAVA中反射的实现过程和作用分别是什么?

    请说明一下JAVA中反射的实现过程和作用分别是什么? Java语言编译后形成.class文件,反射就是通过字节码文件找到一个类,类中的方法及属性等.反射的实现主要通过四个类 Class 类的对象 Co ...

最新文章

  1. 屌丝逆袭高富帅之JAVA之路
  2. RESTClient 用法
  3. 使用sqlite3创建数据库表的时候须要注意
  4. ftpclient读取服务器文件能获得文件名文件大小0_Spring WEB工程整合使用FTP,ftp文本文件解析入库,文件上传下载
  5. Spring MVC__自定义日期类型转换器
  6. 我想说进厂打工怎么就丢人了
  7. java 对象深度复制_Java深度复制– Java复制对象
  8. 关于null,undefined,空字符串的判断
  9. Vue:router的beforeEach与afterEach钩子函数
  10. java 清空文件夹_java 删除文件夹中的所有文件及文件夹
  11. linux 文件名 序列号,在Linux中应如何查看系统硬件制造商、型号和序列号
  12. SIFT算法流程介绍
  13. 分页查询PageHelper.startPage()无法实现分页
  14. day18私有化、关联、继承
  15. Pascal词法分析器用java实现
  16. mac环境下cocos2dx引擎3.x版本的创建工程步骤
  17. 绝了,SpringBoot引入 Dataway,无需开发任何代码配置一个满足需求的接口!
  18. NLP(三十四)使用keras-bert实现序列标注任务
  19. IP公有地址和私有地址划分
  20. python a股行情_用Python,tushare做一个A股每日收盘行情监测分析(含源代码)

热门文章

  1. c++ 通过 myodbc连接到 远程linux 上的mysql server
  2. 出租房的网络环境研究
  3. pandas官方文档_电影数据轻松学习 Pandas
  4. STL MAP(key,value)
  5. Redis高级客户端Lettuce详解
  6. Java集合(一)、什么是Java集合?
  7. vue组件库(二):基于verdaccio工具npm私服搭建
  8. 解决spark中遇到的数据倾斜问题
  9. [Android]生成heap dump文件(.hprof)
  10. Java--图片浏览器