Java最全完全搞定,Java中反射的应用(取得类的结构)(1),2024年Java程序员职业规划

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

public class Root{

public static void main(String[] args) {

Class<?> c1 = null;//声明 Class对象

try{

c1 = Class.forName(“Person”);

}catch (ClassNotFoundException e){

e.printStackTrace();

}

Class<?> c[] = c1.getInterfaces();//取得实现的全部接口

for (int i=0;i<c.length;i++){

System.out.println(“实现的接口名称:” + c[i].getName());//输出接口名称

}

}

}

因为接口是类的特殊形式,而且一个类可以实现多个接口,所以此时以 Class 数组的形式将全部的接口对象返回,并利用循环的方式将内容依次输出

三、取得父类

======

一个类可以实现多个接口,但是只能继承一个父类,所以要想取得一个类的父类,可以直接使用 Class 类中的 getSuperclass() 方法,该方法定义:

public Class<? super T> getSuperclass()

getSuperclass() 方法返回的是 Class 实例,和之前得到的接口一样,可以通过 getName() 方法取得名称。

public class Test{

public static void main(String[] args) {

Class<?> c1 = null;

try {

c1 = Class.forName(“Person”);

}catch (ClassNotFoundException e){

e.printStackTrace();

}

Class<?> c2 = c1.getSuperclass();//取得父类信息

System.out.println(“父类名称:” + c2.getName());

}

}

完全搞定,Java中反射的应用(取得类的结构)

Person 类在编写时没有明确地继承一个父类,所以默认继承 Object 类

四、取得全部构造方法

==========

要取得一个类中的全部构造方法,必须使用 Class 类中的 getConstructors() 方法。

1.取得 Person 类的全部构造方法

import java.lang.reflect.Constructor;

public class Test{

public static void main(String[] args) {

Class<?> c1 = null;

try {

c1 = Class.forName(“Person”);

}catch (ClassNotFoundException e){

e.printStackTrace();

}

Constructor<?> con[] = c1.getConstructors();//得到全部构造方法

for (int i=0;i<con.length;i++){

System.out.println(“构造方法:” + con[i]);

}

}

}

2.取得一个类的全部构造方法

import java.lang.reflect.Constructor;

import java.lang.reflect.Modifier;

public class Test{

public static void main(String[] args) {

Class<?> c1 = null;

try {

c1 = Class.forName(“Person”);

}catch (ClassNotFoundException e){

e.printStackTrace();

}

Constructor<?> con[] = c1.getConstructors();//得到全部构造方法

for (int i=0;i<con.length;i++){

Class<?> p[] = con[i].getParameterTypes();//列出构造中的参数类型

System.out.print(“构造方法:”);

int mo = con[i].getModifiers();//取出权限

System.out.print(Modifier.toString(mo) + " ");//还原权限

System.out.print(con[i].getName());//输出构造方法名称

System.out.print(“(”);

for (int j=0;j<p.length;j++){

System.out.print(p[j].getName() + " arg" + i);

if (j<p.length-1){//打印参数类型,判断是否要输出“,”

System.out.print(“,”);

}

}

System.out.println(“){}”);

}

}

}

完全搞定,Java中反射的应用(取得类的结构)

五、取得全部方法

========

要取得一个类中的全部方法,可以使用 Class 类中的 getMethods() 方法,该方法返回一个 Method 类的对象数组。该方法的常用方法:

完全搞定,Java中反射的应用(取得类的结构)

完全搞定,Java中反射的应用(取得类的结构)

取得一个类的全部方法定义:

import java.lang.reflect.Method;

import java.lang.reflect.Modifier;

public class Test{

public static void main(String[] args) {

Class<?> c1 = null;

try {

c1 = Class.forName(“Person”);

}catch (ClassNotFoundException e){

e.printStackTrace();

}

Method m[] = c1.getMethods();//取得全部的方法

for (int i=0;i<m.length;i++){

Class<?> r = m[i].getReturnType();//取出方法的返回值类型

Class<?> p[] = m[i].getParameterTypes();//得到全部的参数类型

int xx = m[i].getModifiers();//得到方法的修饰符

System.out.print(Modifier.toString(xx) + " ");//还原修饰符

System.out.print(r.getName() + " ");//得到方法名称

System.out.print(m[i].getName());//取得方法名称

System.out.print(“(”);

for (int x=0;x<p.length;x++){

System.out.print(p[x].getName() + " " + “arg” + x);//输出参数

if (x<p.length-1){

System.out.print(“,”);//判断是否输出","

}

}

Class<?> ex[] = m[i].getExceptionTypes();//得到全部的异常抛出

if (ex.length>0){

System.out.print(") throws ");//输出“) throws”

}else {

System.out.print(“)”);

}

for (int j=0;j<ex.length;j++){

System.out.print(ex[j].getName());//输出异常信息

if (j<ex.length-1){

System.out.print(“,”);

}

}

System.out.println();

}

}

}

开发工具就是利用了反射的原理

六、取得全部属性

========

在反射操作中也同样可以取得一个类中的全部属性,有两种不同的操作:

得到实现的接口或父类中的公共属性:public Field[] getFields() throws SecurityException

得到本类中的全部属性:public Field[] getDeclareDeclaredFields() throws SecurityException

上述方法返回的都是 Field 的数组,每一个 Field 对象表示类中的一个属性,而要想取得属性的进一步信息,需要使用:

完全搞定,Java中反射的应用(取得类的结构)

取得 Person 类中的属性

最后总结

ActiveMQ+Kafka+RabbitMQ学习笔记PDF

image.png

  • RabbitMQ实战指南

image.png

  • 手写RocketMQ笔记

image.png

  • 手写“Kafka笔记”

image

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

45202009)]

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值