JAVA高级特性反射和注解
反射:



getSimpleName()获取类名
getName()获取完整的“包,类”名称;
Class 类的使用
无参构造实例化对象
public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
IllegalAccessException {
//通过类路径获取类Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//调用newInstance()方法, 调用无参构造创建类对象
Person person = (Person) clazz.newInstance();
//操作对象
person.setAge(12);
person.setName("张三");
System.out.println(person);
}
有参构造实例化对象
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
//获取类的Class对象
Class<?> clazz =clazz.forName("com.project.enmutestdemo.fanshe.Person");
//通过参数类型获取类的具体的某一个构造器
Constructor<?> c = clazz.getConstructor(String.class,int.class);
Person person = null;
// 传入实参, 通过构造器创建类对象
person = (Person) c.newInstance("张三", 20);
System.out.println(person);


getmodified 获取访问修饰符(public private 。。。)
取得类中属性
public static void main(String[] args) throws ClassNotFoundException {
Class<?> clazz = null;
//通过类路径获取类Class对象
clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//取得本类的属性
Field[] f = clazz.getDeclaredFields();
//循环操作类的属性
for(int i = 0; i < f.length; i++){
//取得该属性的类型
Class<?> t = f[i].getType();
//取得该属性的修饰符数字
int mo = f[i].getModifiers();
//通过修饰符数字取得属性的修饰符
String priv = Modifier.toString(mo);
System.out.print("本类属性: ");
System.out.print(“ 修饰符为: ”+priv+" ");
System.out.print(“类型为: ”+t.getName()+" ");
System.out.print(“名称为: ”+f[i].getName()+”\n”); 通过反射 操作属性
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//调用无参构造器创建类对象
Object obj = clazz.newInstance();
//通过属性名称获取属性的Field对象
Field nameFiled = clazz.getDeclaredField("name");
//通过set方法对对象的属性进行赋值
nameFiled.set(obj, "张三");
//通过get方法获取对象的属性值
System.out.println(" 姓名: "+nameFiled.get(obj)); 操作类中的属性
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//调用无参构造器创建类对象
Person obj = clazz.newInstance();
//通过属性名称获取属性的Field对象
Field nameFiled = clazz.getDeclaredField("name");
//设置该属性的访问权限为可访问
nameFiled.setAccessible(true);
//通过set方法对对象的属性进行赋值
nameFiled.set(obj, "张三");
//通过get方法获取对象的属性值
System.out.println(" 姓名: "+nameFiled.get(obj));

取得类的全部方法
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
Method[] method = clazz.getDeclaredMethods();//获取本类所有方法
for(int i = 0; i < method.length;i++){//循环操作方法
Class<?> r = method[i].getReturnType();//获取方法的返回值类型
Class<?> p[] =method[i].getParameterTypes();//获取方法的参数类型
int xx = method[i].getModifiers();//获取方法的修饰符数字
System.out.print(Modifier.toString(xx)+" ");//获取修饰符
System.out.print(r.getSimpleName()+" ");//获取方法返回值类型名称;
System.out.print(method[i].getName());//获取方法名称
System.out.print("(");
for(int x = 0; x < p.length;x++){//循环操作参数类型
System.out.print(p[x].getSimpleName() +" "+ "arg"+x);//输出参数
if(x < p.length -1){//判断是否输出“ , ”
System.out.print(",");//输出“ , ”
}
}S
ystem.out.println();//换行
}
调用类中的方法
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, InstantiationException {
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//通过方法名称获取无参Method对象
Method me = clazz.getMethod("speak");
//调用无参构造器创建类对象
Object obj = clazz.newInstance()
me.invoke(obj);

注解:


JAVA高级特性反射和注解的更多相关文章
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...
- Java高级特性——反射机制(第三篇)
获取类运行时的结构 通过反射获取运行时类的完整结构 Field.Method.Constructor.Superclass.Interface.Annotation >实现的全部接口 >所 ...
- Java高级特性——反射
感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ...
- Java高级特性——反射机制(第一篇)
——何为动态语言,何为静态语言?(学习反射知识前,需要了解动态语言和静态语言) 动态语言 >是一类在运行时可以改变其结构的语言,例如新的函数.对象.甚至是代码可以被引进,已有的函数可以被删除或者 ...
- Java高级篇反射和注解
反射是什么? 反射的作用?能带来什么好处? 反射的使用? 注解的使用? 注解和反射配合实战...
- Java高级特性—反射和动态代理
1).反射 通过反射的方式可以获取class对象中的属性.方法.构造函数等,一下是实例: 2).动态代理 使用场景: 在之前的代码调用阶段,我们用action调用service的方法实现业务即可. 由 ...
- Java 高级基础——反射
Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...
- java高级特性增强
第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...
随机推荐
- BestCoder Round #2 1001 TIANKENG’s restaurant
不得不说,bastcoder是个hack游戏啊.!. 题意:求最少要多少张椅子才干让全部来的客人有地方坐!! 就是一个区间的处理吧!!!和HDU 1556 我待水似流年.流年待我似水神似! ..! ...
- 两个喜欢的"新"C#语法
现在C#比较新的语法,我都十分喜欢. 比如属性可设默认值: public string Name { get; set; } = "张三"; 还有一个就是拼接字符串. 以往,通常都 ...
- CSS的两个class选择器紧挨在一起
有一段HTML代码: <a class="glyphicons white no-js cogwheel" href="#" target="_ ...
- windows 目录空格
Window下安装Scala出现:此时不应有 \scala\bin\..\lib\jline-2.14.5.jar 原因很简单,scala默认安装到了Program Files (x86)文件夹下,目 ...
- Delphi的goto语法
今天第一次主要到Delphi也有goto语法,特别是其奇怪的label声明.估计主要是用来跳出多重循环,而且还真有人使用这种方式.记个笔记: procedure TForm1.btn3Click(Se ...
- 常用的Sublime Text插件及安装方法
Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/installatio ...
- 基于TCP的字符串传输程序
---恢复内容开始--- LINUX中的网络编程是通过SOCKET接口来进行的. Socket(套接字) Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接 ...
- 并不对劲的bzoj4652:loj2085:uoj221:p1587:[NOI2016]循环之美
题目大意 对于已知的十进制数\(n\)和\(m\),在\(k\)进制下,有多少个数值上互不相等的纯循环小数,可以用\(x/y\)表示,其中 \(1\leq x\leq n,1\leq y\leq m\ ...
- 【HDU 1561】 The More,The better
[题目链接] 点击打开链接 [算法] 树形背包 注意是一棵森林 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN ...
- os.path.dirname(__file__)和os.path.abspath(__file__)区别
枚举反射泛型注解.html