一.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的更多相关文章

  1. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  2. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  5. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  6. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  7. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

  8. java反射 之 反射基础

    一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  9. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

  10. 超详细的java反射教程

    看技术博客时,看到关于java反射的博文,写的非常好.猛击下面的地址,开始java反射之旅 中文翻译地址:http://ifeve.com/java-reflection/ 英文原版地址:http:/ ...

随机推荐

  1. Win7+VS2010环境下CEGUI 0.8.4编译过程详解

    转载▼   1. 在http://cegui.org.uk/download 下载CEGUI源码包 cegui-0.8.4 以及CEGUI依赖库(Windows / Apple OS X only) ...

  2. ViewPager动态加载、删除页面

    很多人在网上说ViewPager的PagerAdapter.notifyDataSetChanged()无效.刚开始我也这样认为,甚至被误导以为是真理.   后来,找了一下,在PagerAdatpar ...

  3. centos7通过yum安装mysql,并授权远程连接

    安装: CentOS 7的yum源中没有正常安装MySQL的mysql-sever文件,需要去官网上下载(通过安装mysql的yum容器,再通过yum安装mysql) 注:安装前,需要卸载所有的mar ...

  4. json字符串转map

    <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</ar ...

  5. 数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java

    package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...

  6. 使用CAJViewer 提取PDF文件中的文字

    使用 CAJViewer 7.2 软件,把pdf格式的文件提取出文字. 操作步骤参考:http://jingyan.baidu.com/article/d45ad148cd06e469552b800f ...

  7. CentOS下的网络配置文件说明

    CentOS网络配置主要涉及到以下四个文件: 1./etc/sysconfig/network 在CentOS官方网站上给出了如下说明: The/etc/sysconfig/networkfile i ...

  8. 【shell】 for循环

    #!/bin/bash for i in 1,3,4,6 ##有几个数就循环几次 do echo $i done for m in $( cat /root/num.log) ## /root/num ...

  9. 理解Javascript参数中的arguments对象

    ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载. Javascript中arguments的存在可以弥补javascript中函数没有重载的不足. Javascri ...

  10. Redis容灾部署(哨兵Sentinel)

    Redis容灾部署(哨兵Sentinel) 哨兵的作用 1. 监控:监控主从是否正常2. 通知:出现问题时,可以通知相关人员3. 故障迁移:自动主从切换4. 统一的配置管理:连接者询问sentinel ...