java反射1
一.Class部分
加载类的几种方式
// 1.
Class clazz = Class.forName("com.wzh.test.reflect.Person");
// 2.
Class clazz1 = new Person().getClass();
// 3.
Class clazz2 = Person.class;
// 4.
ClassLoader cl = ClassLoader.getSystemClassLoader();
Class clazz3 = cl.loadClass("com.wzh.test.reflect.Person");
获取加载器
ClassLoader cl = ClassLoader.getSystemClassLoader();
Class c = cl.loadClass("com.wzh.test.Student");
System.out.println(c);
System.out.println(c.getName());
// //SSH的配置文件都是放在src(classpath)
// InputStream is= ClassLoader.getSystemResourceAsStream("user.properties");
// System.out.println(is);
//获取类对象
Class myc=Class.forName("com.wzh.test.Student");
System.out.println(myc);
//获取类实例,必须要有无参构造器
Student s= (Student)myc.newInstance();
System.out.println(s);
// 绝对路径
InputStream is = this.getClass().getResourceAsStream("/");
System.out.println(is);
// 相对路径
InputStream is2 = this.getClass().getResourceAsStream("a.xml");
System.out.println(is2);
// 相对路径
InputStream is3 = this.getClass().getResourceAsStream("b.xml");
System.out.println(is3);
//绝对路径 d:/test.xml
InputStream is4=new FileInputStream("d:/test.xml");
System.out.println(is4);
------------------------------------------------------------------------------
二.构造器部分
public static void main(String[] args) {
try {
Class c=Class.forName("com.wzh.test.Student");
//
try {
Constructor cs=c.getDeclaredConstructor(String.class,Integer.class);
Student stu=(Student)cs.newInstance("myname",123);
System.out.println(stu);
//获取所有构造器
Constructor[] css=c.getConstructors();
for (Constructor constructor : css) {
System.out.println(constructor);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
-----------------------------------------------
三.字段
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.wzh.test.Student");
Student stu = (Student) c.newInstance();
Field[] fs = c.getDeclaredFields();
for (Field field : fs) {
System.out.println(field.getName());
if (!field.isAccessible())
field.setAccessible(true);
System.out.println(field.get(stu));
}
Field f = c.getDeclaredField("age");
if (!f.isAccessible())
f.setAccessible(true);
System.out.println("stu:" + f.get(stu));
}
---------------------------------------------------------
四.方法
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.wzh.test.Student");
Student stu=(Student)c.newInstance();
Method m=c.getDeclaredMethod("play");
m.invoke(stu);
Method m2=c.getDeclaredMethod("play", String.class);
m2.invoke(stu, "依琳");
Method[] ms=c.getDeclaredMethods();
for (Method method : ms) {
System.out.println(method.getName());
}
}
java反射1的更多相关文章
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
- java反射 之 反射基础
一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- java反射 cglib asm相关资料
有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...
- 超详细的java反射教程
看技术博客时,看到关于java反射的博文,写的非常好.猛击下面的地址,开始java反射之旅 中文翻译地址:http://ifeve.com/java-reflection/ 英文原版地址:http:/ ...
随机推荐
- /bin/rm: Argument list too long解決方法
rm.cp.mv是unix下面常用到的檔案處理指令,當我們需要刪除大量的log檔案,如果檔案數太多就會出現此訊息[/bin/rm: Argument list too long]解決方式如下: 例如要 ...
- Git-仓库迁移
如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作.1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub. git clone --b ...
- C++中智能指针的设计和使用
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆 ...
- android http 和https请求
private static final int CONNECTION_TIMEOUT = 10000; public static String doHttpGet(String serverURL ...
- nginx 偶发 403原因
观察errorlog 日志 是否存在类似错误 [error] 12788#0: *322 connection is denied by policyframe[return code:8], 观察是 ...
- Java 笔试题集锦
1.Java 不需要使用构造函数来创建对象的方法有哪些? 2.Java 创建多线程有哪些方法?你最喜欢哪一个?为什么? 3.Java
- oracle监控脚本
简单命令 1.显示服务器上的可用实例:ps -ef | grep smon2.显示服务器上的可用监听器:ps -ef | grep -i listener | grep -v grep3.查看Orac ...
- ExtJs学习之Window
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- fetch用法
fetch(REQUEST_URL) .then((response) => response.json()) .then((responseData)=> { console.log(r ...
- [tomcat] tomcat+nginx 负载均衡配置
首先下载,安装tomcat. 修改tomcat端口,修改server.xml: 1.修改tomcat端口(默认8080) <Connector port="8383" pro ...