反射 API基本代码测试
ReflectBean.java
package com.xiaojian.basics.reflect; /**
* 使用反射的测试类
*/ public class ReflectBean { // field
public String name;
private int age;
protected char gender; // constructor
public ReflectBean() {
this.name = "无参";
this.age = 1;
this.gender = '男';
} public ReflectBean(String name,Integer age){
this.name = name;
this.age = age;
} // method
protected String getInfo(){ String info = "这个" + this.gender + "人的名字是" + this.name ;
return info;
} private int getAge(){
return this.age;
} @Override
public String toString() {
return "ReflectBean{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
Test.java
package com.xiaojian.basics.reflect; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* 反射
*/
public class Test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class clazz = Class.forName("com.xiaojian.basics.reflect.ReflectBean"); // getFields()获取属性:只能获取public访问权限的
Field[] fields = clazz.getFields();
// getMethods()获取所有显性方法:只能获取public访问权限的
Method[] methods = clazz.getMethods();
// 获取所有显性构造器
Constructor[] constructors = clazz.getConstructors();
// 创建空构造函数对象
ReflectBean bean1 = (ReflectBean) clazz.newInstance();
System.out.println("***************无参构造函数***********************");
System.out.println(bean1.getInfo()); // 创建有参数构造函数
Constructor constructor = clazz.getConstructor(String.class,Integer.class);
ReflectBean bean2 = (ReflectBean)constructor.newInstance("小华",125);
System.out.println("***************有参构造函数***********************");
System.out.println(bean2.toString()); // 输出所有显性属性名称
System.out.println("***************属性名称***********************");
for(Field field : fields){
System.out.println(field.getName());
}
// 输出所有显性方法名称
System.out.println("***************方法名称************************");
for(Method method : methods){
System.out.println(method.getName());
}
System.out.println("///////////////////////////////////////////////////////////////////////////////////////////////// "); // getDeclaredFields()获取所有属性
Field[] declaredFields = clazz.getDeclaredFields();
// getDeclaredMethods()获取所有方法
Method[] decalredMethods = clazz.getDeclaredMethods(); // 输出所有属性名称
System.out.println("***************所有属性名称***********************");
for(Field field : declaredFields){
System.out.println(field.getName());
}
// 输出所有方法名称
System.out.println("***************所有方法名称************************");
for(Method method : decalredMethods){
System.out.println(method.getName());
} } }
反射 API基本代码测试的更多相关文章
- PHP反射API
近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen,是基于laravel的一个轻量级框架,我看到里面用到了一些反射API机制来帮助动态加载需要的类.判断方法 ...
- 详解PHP反射API
PHP中的反射API就像Java中的java.lang.reflect包一样.它由一系列可以分析属性.方法和类的内置类组成.它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵 ...
- JDK1.7新特性(4):java语言动态性之反射API
直接通过一个代码示例来熟悉java中通过反射来对构造函数/域以及方法处理的相关API: package com.rampage.jdk7.chapter2; import java.lang.refl ...
- PHP反射API (转)
http://www.cnblogs.com/zyf-zhaoyafei/p/4922893.html 近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen, ...
- PHP 高级编程(2/5) - 反射API
PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 此外,反射 API 提供了方法来取出函数.类和方法中的文档注释.通过使用反射API可以分析其他的类.接口.方 ...
- 了解一下OOP的反射API
PHP5的类和对象函数并没有告诉我们类内部的所有一切,而只是报告了它们的公共成员.要充分了解一个类,需要知道其私有成员和保护成员,还要知道其方法所期望的参数 .对此,使用反射API. 1 查看自定义类 ...
- 反射——反射API,使用反射创建数组
反射API Java.lang.Reflect库 ① Class类与Java.lang.Reflect类库一起对反射的概念进行支持. ② java.lang包下: a) Cla ...
- Java学习笔记--反射API
反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换. 按照 一般地面向对象的设计 ...
- 《软件测试自动化之道》读书笔记 之 基于反射的UI测试
<软件测试自动化之道>读书笔记 之 基于反射的UI测试 2014-09-24 测试自动化程序的任务待测程序测试程序 启动待测程序 设置窗体的属性 获取窗体的属性 设置控件的属性 ...
随机推荐
- display:flex; justify-content:space-between; 最后一行显示内容无法靠左显示
给父元素添加同每行展示列数一样(展示列表最多的)的子元素. 子元素设置样式: width:同子元素一样的width : height:0;
- SSM项目整合第一步 注册登陆实现
SSM项目整合第一步 注册: 项目目录: 一.数据库建表: 源码: ; -- ---------------------------- -- Table structure for t_user - ...
- Flex AIR Mobile应用性能解决方案
这个flex mobile开发,一般原生开发也许是最合适的方式,但是涉及到跨平台的问题,有精力的团队一般都会逐个基于移动操作系统进行开发.但是如果追求短小,精悍,快速,希望能够跨平台,基于html5 ...
- Scrap简介
原文:https://blog.csdn.net/ssw_1990/article/details/51254227 提到Python与网络爬虫,可能会想到urllib,urllib2,Beautif ...
- H3C 入站包过滤工作流程
- java 泛型的上限与下限
设置泛型对象的上限使用extends,表示参数类型只能是该类型或该类型的子类: 声明对象:类名<? extends 类> 对象名 定义类:类名<泛型标签 extends 类>{ ...
- Vue.js 学习笔记 第7章 组件详解
本篇目录: 7.1 组件与复用 7.2 使用props传递数据 7.3 组件通讯 7.4 使用slot分发内容 7.5 组件高级用法 7.6 其他 7.7 实战:两个常用组件的开发 组件(Compon ...
- 机器学习——SVM
整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 带核的SVM为什么能分 ...
- linux 运行处理者
如同前面建议的, 当内核收到一个中断, 所有的注册的处理者被调用. 一个共享的处理者 必须能够在它需要的处理的中断和其他设备产生的中断之间区分. 使用 shared=1 选项来加载 short 安装了 ...
- vue element UI el-table 表格调整行高的处理方法
这是我在工作项目中遇到的问题,我想将标记处下方的表格高度调低一点,也就是想实现下面的这个效果: 代码调整如下: 说明: 缩小:行高到一定程度之后便不能缩小. 好像最小35px.各位可以试一下. 升高: ...