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;
} @Override
public int hashCode() {
return (int) (Math.random()*100);
// return super.hashCode(); } @Override
public boolean equals(Object obj) {
return true;
// return super.equals(obj);
}
}
Java中反射的三种常用方式的更多相关文章
- Java中反射的实现方式
所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Method)以及调用其中的方法 ...
- Java中创建对象的几种方式
Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...
- java中反射学习整理
转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序能够訪问.检測和改动它本身的状态或行为的一种能力. jav ...
- Java中创建对象的五种方式
我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...
- 【转】Java中创建对象的5种方式
Java中创建对象的5种方式 作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
- Java中的静态代理实现方式
1.编写一个接口类 如:Subject package com.neusoft.pattern.staticProxy; /** * <p>Title:</p> * <p ...
- JAVA中循环遍历list有三种方式
转自:https://blog.csdn.net/changjizhi1212/article/details/81036509JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常 ...
- Java中正负数的存储方式-正码 反码和补码
Java中正负数的存储方式-正码 反码和补码 正码 我们以int 为例,一个int占用4个byte,32bits 0 存在内存上为 00000000 00000000 00000000 0000000 ...
随机推荐
- H.264学习笔记之一(层次结构,NAL,SPS)
一 H.264句法 1.1元素分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描述各个层次的信息. 图1 H.264分层结构由五层组成,分 ...
- Darwin Streaming Server 6.0.3安装、订制、插件或模块
How to setup Darwin Streaming Server 6.0.3 on 32 or 64 bit Linux platforms, add custom functionality ...
- 实现推送功能APP端需要完成的工作
推送功能简介 实现推送的流程如下: 从APP注册推送功能,到APNS服务器发送推送消息给设备,有五个步骤. 一旦推送注册完成,应用自身的服务器以provider的身份提供推送. APP端实现 在代码方 ...
- 【转】Android之NetworkOnMainThreadException异常
看名字就应该知道,是网络请求在MainThread中产生的异常 先来看一下官网的解释: Class Overview The exception that is thrown when an appl ...
- ASP.NET CORE Web浏览器和Web服务器
//web浏览器 //浏览器本质的原理:浏览器向服务器发请求,服务器把请求的内容返回给浏览器,然后浏览器把返回的内容绘制成一个图形化的界面 //Socket一种通讯交流的技术 //qq用户把信息通过s ...
- table_open_cache
当 MySQL 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存:如果还没有被缓存,但是在MySQL表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区:如果表缓存满了,则会按照一定的规则 ...
- Docker管理面板Crane开源了!
导读 数人云容器管理面板 Crane 开源啦!Crane 包含着数人云工程师对 Docker 最新技术的热爱和实践.希望借助开源社区的力量,让 Crane 完善自身,更好地成长起来,让更多的国内用户体 ...
- MySQL数据库分布式事务XA优缺点与改进方案
1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...
- 将string转化为char*的方法
在构造文件流变量时候发现,fstream的第一个参数,即文件路径必须是const char * 如: string s = "/home/user/1.txt"; fstream ...
- HDU 5311
把anniversary分成三个区间,分别枚举每个区间在给定模板中的长度.每次枚举完一个区间,记录下区间长度和起始坐标,下次从剩下长度开始枚举,避免重复. #include<iostream&g ...