反射 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 测试自动化程序的任务待测程序测试程序 启动待测程序 设置窗体的属性 获取窗体的属性 设置控件的属性 ...
随机推荐
- html选择题
1.下面关于css样式和html样式的不同之处说法正确的是(A) A.html样式只影响应用它的文本和使用所选html样式创建的文本 B.css样式只可以设置文字字体样式 不仅仅能够设置 ...
- 如何学习Python的一些总结
https://mp.weixin.qq.com/s/w0NoDiYfvtTy8N3BVoIVpw 为什么选择Python 经常会有同学问我为什么选择Python.我很喜欢这门语言,因为它的简洁灵活, ...
- win10 uwp 依赖属性
本文告诉大家如何使用依赖属性,包括在 UWP 和 WPF 如何使用. 本文不会告诉大家依赖属性的好处,只是简单告诉大家如何使用 在 UWP 和 wpf ,如果需要创建自己的依赖属性,可以使用代码片,在 ...
- Vue 父组件往子组件传递方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringBoot集成thymeleaf(自定义)模板中文乱码的解决办法
楼主今天在学习SpringBoot集成thymelaf的时候报了中文乱码的错误,经过网上的搜索,现在得到解决的办法,分享给大家: package com.imooc.config; import or ...
- 【u238】暴力摩托
Time Limit: 1 second Memory Limit: 64 MB [问题描述] 晚会上大家在玩一款"暴力摩托"的游戏,它拥有非常逼真的画面和音响效果! 当然了,车子 ...
- python基础十二之生成器进阶
生成器表达式 (满足条件的元素或其相关的操作 for 元素 in 可迭代对象 if 条件) g = (i for i in range(10)) for i in g: print(i) egg_li ...
- H3C 单路径网络中环路产生过程(1)
- 2018-11-2-win10-uwp-通过-win2d-画出笔迹
title author date CreateTime categories win10 uwp 通过 win2d 画出笔迹 lindexi 2018-11-2 20:11:0 +0800 2018 ...
- Sublime Text 安装中文、英文字体
在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...