会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 Java反射机制可能是涨薪关键!!

Java反射机制可能是涨薪关键!

时间:2025-11-04 00:10:30 来源:益强数据堂 作者:数据库 阅读:190次

Java核心反射机制

基本反射

反射是反射一种动态类的处理机制,通过 Class类 来实现反射机制;

Class类的机制基本信息:

Module java.base Package java.lang     Class Class<T>         java.lang.Object              java.lang.Class<T> 

以下三种方式获得类的反射,三者都非常重要,涨薪牢牢掌握。关键

一、反射利用Object类中提供getClass()方法获取实例化对象

class Member {} public class JavaReflectDemo {     public static void main(String[] args) throws Exception {         // 【操作特点】需要获取一个类的机制实例化对象之后才可以获取Class类实例         Member member = new Member() ;    // 实例化Member类对象         Class<?> clazz = member.getClass() ;     // 获取Class类实例化对象         System.out.println(clazz);     } } 

二、使用“类.class”形式

class Member {} public class JavaReflectDemo {     public static void main(String[] args) throws Exception {         // 【操作特点】直接通过一个类的涨薪完整名称可以获取Class类实例,需要编写import或编写完整类名称         Class<?关键> clazz = Member.class ;     // 获取Class类实例化对象         System.out.println(clazz);     } } 

三、使用Class类内部提供的反射forName()方法根据类的完整名称获取实例化对象

class Member {} public class JavaReflectDemo {     public static void main(String[] args) throws Exception {         // 【操作特点】通过名称字符串(包.类)可以获取Class类实例,可以不使用import导入         // 获取Class类实例化对象         Class<?机制> clazz = Class.forName("cn.xbhog.demo.Member");             System.out.println(clazz);     } } 

反射获取实例化对象

package com.xbhog.反射机制; class Member{     public Member() {    // 构造方法         System.out.println("【构造方法】实例化Member类对象.");     }     @Override     public String toString() {         return "【toString()覆写】博客地址:http://www.cnblogs.com/xbhog";     } } public class 反射获取对象 {     public static void main(String[] args) throws Exception {         // 获取Class类实例化对象         Class<?> clazz = Class.forName("com.xbhog.反射机制.Member");              // 反射机制可以获取任意类实例化对象(等价于关键字“new”),所以返回的涨薪类型为Object         Object obj = clazz.getDeclaredConstructor().newInstance() ;// 实例化对象         System.out.println(obj);     } } 

反射的机制可以更加方便开发者实现解耦和设计;

反射与类操作

在反射机制下,可以自动获取并调用任意一个类中的关键组成结构(成员属性、方法),b2b信息网反射使得代码的机制编写更加灵活。

反射获取类结构

package com.xbhog.反射机制; interface IMessage{     public void send(); } interface IChannelService{     public Boolean connect(); } abstract class AbstractBase{} public class Mail extends AbstractBase implements IMessage,涨薪IChannelService{     @Override     public void send() {         if(this.connect()){             System.out.println("发送信息成功");         }     }     @Override     public Boolean connect() {         return true;     } }  package com.xbhog.反射机制; public class MailTest {     public static void main(String[] args) {         Class<Mail> aClass = Mail.class;         System.out.println(aClass.getPackage());  //获取类的包名         Class<? super Mail> superclass = aClass.getSuperclass(); //获取父类对象信息         System.out.println(superclass.getName());  //获取父类名字         System.out.println(superclass.getSuperclass().getName());  //获取父类的父类的名字         /*获取接口信息*/         Class<?>[] interfaces = aClass.getInterfaces();         for (Class<?> anInterface : interfaces) {             System.out.println(anInterface.getName());         }     } } 

反射调用构造方法

反射还可以调用构造方法,构造方法是类中的重要组成部分,也是实例化对象时必须调用的方法。

实例:

import java.lang.reflect.Constructor; class Mail {     private String msg ;     public Mail() {}// 无参构造     public Mail(String msg) {// 单参构造         System.out.println("【构造方法】调用Mail类单参构造方法,实例化对象");         this.msg = msg ;     }     @Override     public String toString() {    // 对象信息         return "【toString()覆写】消息内容:" + this.msg;     } } public class JavaReflectDemo {     public static void main(String[] args) throws Exception {         Class<?> cls = Mail.class ; // 获取指定类的Class对象         Constructor<?>[] constructors = cls.getDeclaredConstructors() ; // 获取全部构造         for (Constructor<?> cons : constructors) {             System.out.println(cons);         }         // 获取单参构造并且参数类型为String的构造方法对象实例         Constructor<?> cons = cls.getDeclaredConstructor(String.class) ;         Object obj = cons.newInstance("www.cnblog.cn/xbhog") ;// 调用单参构造实例化对象         System.out.println(obj);     } } 

反射调用方法

反射机制中除了获取类中的方法定义外,最为重要的功能就是可以利用Method类中的invoke()方法并结合实例化对象(Object类型即可)实现放射的调用。

反射调用类中的亿华云setter、getter方法【重点】

package com.xbhog.反射机制.方法; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; class Member{     private String name;     public void setName(String name){         this.name = name;     }     public String getName(){         return this.name;     } } public class getter_Setter {     public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {         Class<?> cls = Member.class;         String value = "xbhog";         //实例化Member对象         Object obj = cls.getDeclaredConstructor().newInstance();         //反射调用方法需要明确的知道方法的名称以及方法中的参数类型         String setMethodName ="setName";         Method setmethod = cls.getDeclaredMethod(setMethodName, String.class);  //获取指定方法         setmethod.invoke(obj,value);  //对象.setName(value)         String getMethodName = "getName";         Method getMethod = cls.getDeclaredMethod(getMethodName);  //get没有参数         System.out.println(getMethod.invoke(obj));//对象.getName();     } } 

通过放射实现的方法调用的最大的特点是可以直接利用Object类型的实例化对象进行调用的,但是在获取对象时需要明确的知道方法名称以及方法的参数类型。

Field类的作用

在实际开发中,Field中的getType()方法使用的较多,可以通过其来确定属性的类型

示例:

import java.lang.reflect.Field; class Member{     private String name;     public void setName(String name){         this.name = name;     }     public String getName(){         return this.name;     } } public class FIeldDemo {     public static void main(String[] args) throws Exception {         //获取Member类         Class<?> cls = Member.class;         //实例化         Object obj = cls.getDeclaredConstructor().newInstance();         //成员属性name的类型         Field name = cls.getDeclaredField("name");         //获取详细信息         System.out.println(name.getType().getName());         //获取简略信息         System.out.println(name.getType().getSimpleName());     } } 

结果:

java.lang.String  String b2b供应网

(责任编辑:数据库)

推荐内容
  • 免费转换PDF为Word的最佳方法(绝对免费的PDF转Word工具推荐)
  • Redis.Conf 7.0 配置和原理全解,生产王者必备
  • 索引是一种让你快速找到数据的数据结构
  • 2023年TOP 5 Kubernetes漏洞
  • 手工制作电脑支架蛋糕教程(用简单材料打造独特创意,将甜点与科技相结合)
  • 全网都在说一个错误的结论,真的错了吗?