java常用反射方法用法总结
java常用反射方法以及用法总结
package reflect;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface D{
}
interface C{
public int c();
}
@D
class B{
private int b;
public void b() {
System.out.println("b");
}
public void b2(int a) {
System.out.println("b2"+a);
}
}
public class A extends B implements C{
public A() {
}
public A(int a) {
}
@Override
public int c() {
// TODO Auto-generated method stub
return 0;
}
private int a;
public int a2;
public static void main(String[] args) throws NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
//获取class对象 1.Class.forName(),2.类名.class,3.对象.getClass()
Class<?> a=A.class;
String name=a.getName();//获取类名
A obj=(A) a.newInstance();//反射创建对象
{
Method m=a.getMethod("b",null);//获取方法
Method m2=a.getMethod("b2",int.class);//获取方法
String mname=m.getName();//获取方法名
System.out.println(mname);
mname=m2.getName();//获取方法名
System.out.println(mname);
m.invoke(obj,null);//反射执行方法
m2.invoke(obj,1);
m.getAnnotation(D.class);//获取上面方法的注解
m.getAnnotations();//获取方法上的所有注解(数组)
m.getReturnType();//获取方法的返回值类型
Class<?>[] mcs=m2.getParameterTypes();//获取该方法所有参数类型(数组)
Method[] ms=a.getDeclaredMethods();//获取类的所有方法数组
}
{
Field af=a.getField("a2");//获取共有属性
Field pf=a.getDeclaredField("a");//获取私有属性
Field afs[]=a.getDeclaredFields();//获取所有属性(数组)
af.set(obj,1);//给对象属性赋值
pf.setAccessible(true);//设置可以访问私有属性
pf.set(obj,2);//给对象的私有属性赋值
int val=(int) pf.get(obj);//获取对象中属性的值
af.getType();//获取属性类型
af.getAnnotation(D.class);//获取属性上的注解
af.getAnnotations();//获取属性上的所有注解
}
Class<?> sc=a.getSuperclass();//获取父类class对象
a.getAnnotation(D.class);//获取类上的注解
a.getClasses();
//返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class
//对象所表示的类的成员的所有公共类和接口。
a.getClassLoader();//获取该类的类加载器
a.getConstructor(int.class);
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法
a.getConstructors();
//返回一个包含某些 Constructor 对象的数组,
//这些对象反映此 Class 对象所表示的类的所有公共构造方法。
a.getDeclaredConstructor(int.class);
// 返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
a.isInstance(obj);//判定指定的 Object 是否与此 Class 所表示的对象赋值兼容
a.isPrimitive();//判定指定的 Class 对象是否表示一个基本类型
}
}
评论区
请写下您的评论...
猜你喜欢
blog
有关线程的常用方法总结
java基础
5972
构造方法1.Thread(Runnabletarget)。参数为实现了Runnable接口的类。2.Thread(Stringname)。参数为线程的名字。3.Thread
blog
java反射判断类、方法、字段的修饰符
算法基础
2872
Java的反射机制可以让我们获取某个类的所有信息,本文要聊的是如何获取某个类,某个类的属性,某个类的方法的修饰符。或判断某类、属性、方法上是否有某个修饰符。在Class、Field、Method这三
blog
java io File类常用方法
java基础
3632
javaioFile类常用方法一个File类的对象,表示了磁盘上的文件或目录(注意其并不是文件本身)。1.构造方法2.文件的创建删除//如果文件存在返回false,否则返回true并且创建文件
java基础
3981
1.hashCode方法的作用:对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括
blog
java使用欧几里得算法计算比例的方法
数据结构与算法
1727
java使用欧几里得算法计算比例的方法 publicstaticvoidmain(String[]args){ System.out.println(bili(2,6
blog
Docker的常用命令总结
算法基础
1542
关系图基本命令`uname-r`:查看内核`systemctlstartdocker`:启动docker镜像`dockerversion`:查看docker版本`dockerinfo`:查看docker详细信息`docker--help`:查看docker命令操作docker镜像命令查看镜像列表:dockerimages拉取镜像到本地:dockerpull镜像名称或ID上传镜像到仓库:doc
java基础
3630
使用wait和notify的条件wait()与notify/notifyAll方法必须在同步代码块中使用,如果不是在同步方法或同步代码块中使用则会报异常Exceptioninthread"main
blog
mybatis入参处理的几种方法总结
框架
3795
mybatis使用接口的时候注意方法不能重载1.单个参数publicUsersselectUser(intid);selectid="selectUser"resultType
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。