Java中反射的三种常用方式
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中反射的三种常用方式相关推荐
- Java中反射的实现方式
Java中的发射机制 所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Metho ...
- Java中创建对象的几种方式
Java中创建对象的几种方式 1.使用new创建对象,在堆上创建. 2.克隆 3.反序列化 4.反射创建对象 5.NIO中可以使用本地方法直接分配堆外内存. 转载于:https://www.cnblo ...
- Java中创建对象的四种方式
为什么80%的码农都做不了架构师?>>> Java中创建对象的四种方式 (1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.l ...
- java中几种创建对象的方式
java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式: ● 用new语句创建对象 ● 运用反射手段,调用java.la ...
- 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...
作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...
- Java中多线程访问冲突的解决方式
Java中多线程访问冲突的解决方式 当时用多线程访问同一个资源时,非常容易出现线程安全的问题,例如当多个线程同时对一个数据进行修改时,会导致某些线程对数据的修改丢失.因此需要采用同步机制来解决这种问题 ...
- Java中测试异常的多种方式
Java中测试异常的多种方式 参考文章: (1)Java中测试异常的多种方式 (2)https://www.cnblogs.com/huang0925/p/3663074.html 备忘一下.
- java 中的多种判空方式
前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^. 而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! java 中的多种判空方式 1 ...
- 请说明一下JAVA中反射的实现过程和作用分别是什么?
请说明一下JAVA中反射的实现过程和作用分别是什么? Java语言编译后形成.class文件,反射就是通过字节码文件找到一个类,类中的方法及属性等.反射的实现主要通过四个类 Class 类的对象 Co ...
最新文章
- 屌丝逆袭高富帅之JAVA之路
- RESTClient 用法
- 使用sqlite3创建数据库表的时候须要注意
- ftpclient读取服务器文件能获得文件名文件大小0_Spring WEB工程整合使用FTP,ftp文本文件解析入库,文件上传下载
- Spring MVC__自定义日期类型转换器
- 我想说进厂打工怎么就丢人了
- java 对象深度复制_Java深度复制– Java复制对象
- 关于null,undefined,空字符串的判断
- Vue:router的beforeEach与afterEach钩子函数
- java 清空文件夹_java 删除文件夹中的所有文件及文件夹
- linux 文件名 序列号,在Linux中应如何查看系统硬件制造商、型号和序列号
- SIFT算法流程介绍
- 分页查询PageHelper.startPage()无法实现分页
- day18私有化、关联、继承
- Pascal词法分析器用java实现
- mac环境下cocos2dx引擎3.x版本的创建工程步骤
- 绝了,SpringBoot引入 Dataway,无需开发任何代码配置一个满足需求的接口!
- NLP(三十四)使用keras-bert实现序列标注任务
- IP公有地址和私有地址划分
- python a股行情_用Python,tushare做一个A股每日收盘行情监测分析(含源代码)