首页 > 编程语言 >java反射 -2025/1/3

java反射 -2025/1/3

时间:2025-01-03 22:55:58浏览次数:1  
标签:反射 java 获取 car Object 2025 方法 public 构造函数

以下是 java.lang.reflect 包中的主要类和接口的详细介绍:

  1. Class 类
    功能:表示类的对象,提供了获取类信息的方法,如字段、方法、构造函数等。
    主要方法:
    getFields():获取所有公共字段。
    getDeclaredFields():获取所有声明的字段,包括私有字段。
    getMethods():获取所有公共方法。
    getDeclaredMethods():获取所有声明的方法,包括私有方法。
    getConstructors():获取所有公共构造函数。
    getDeclaredConstructors():获取所有声明的构造函数,包括私有构造函数。
    getSuperclass():获取类的父类。
    getInterfaces():获取类实现的所有接口。
  2. Field 类
    功能:表示类的字段(属性),提供了访问和修改字段值的方法。
    主要方法:
    get(Object obj):获取指定对象的字段值。
    set(Object obj, Object value):设置指定对象的字段值。
    getType():获取字段的数据类型。
    getModifiers():获取字段的修饰符(如 public、private)。
  3. Method 类
    功能:表示类的方法,提供了调用方法的能力。
    主要方法:
    invoke(Object obj, Object... args):调用指定对象的方法。
    getReturnType():获取方法的返回类型。
    getParameterTypes():获取方法的参数类型。
    getModifiers():获取方法的修饰符(如 public、private)。
  4. Constructor 类
    功能:表示类的构造函数,提供了创建对象的能力。
    主要方法:
    newInstance(Object... initargs):创建一个新实例,使用指定的构造函数参数。
    getParameterTypes():获取构造函数的参数类型。
    getModifiers():获取构造函数的修饰符(如 public、private)。
package Java反射;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;

public class ReflectionExample {

    public static void main(String[] args) throws Exception {
        // 获取 Class 对象
        Class<?> clazz = Car.class;

        // 创建 Car 对象
        Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
        Object car = constructor.newInstance("Toyota", 2020);

        // 访问和修改字段
        Field modelField = clazz.getDeclaredField("model");
        Field yearField = clazz.getDeclaredField("year");
        
        // 设置字段为可访问(如果字段是私有的)
        modelField.setAccessible(true);
        yearField.setAccessible(true);
        
        // 打印原始字段值
        System.out.println("Original Model: " + modelField.get(car));
        System.out.println("Original Year: " + yearField.get(car));
        
        // 修改字段值
        modelField.set(car, "Honda");
        yearField.set(car, 2024);
        
        // 打印修改后的字段值
        System.out.println("Updated Model: " + modelField.get(car));
        System.out.println("Updated Year: " + yearField.get(car));
        
        // 调用方法
        Method startMethod = clazz.getMethod("start");
        startMethod.invoke(car);
    }
}

class Car {
    private String model;
    private int year;

    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    public void start() {
        System.out.println("The " + model + " car of year " + year + " is starting.");
    }
}

标签:反射,java,获取,car,Object,2025,方法,public,构造函数
From: https://www.cnblogs.com/XYu1230/p/18650919

相关文章

  • 2024年回顾与2025年展望
    本来打算元旦来做一下本人的年度总结的,但是元旦那天只有一天假,并且那天带孩子出去玩了,总结就耽搁了。这篇总结是自己断断续续靠晚上下班回来,老婆孩子睡着之后以及上班摸鱼时间写出来的2024年回顾本年度总结我继续从生活、学习以及工作上来进行回顾。首先是生活上,今天孩子开始在......
  • 2025 01 做题笔记
    0102MX省选模拟赛Day8,\(63+100+0\),rk5,T1想到了几乎所有转化,还是死在了最后一步找支配对,我以为这没啥性质的。T上了,P呢?P4482[BJWC2018]Border的四种求法:学习了一种很厉害的单logborderseries做法,但是太难写了,还是用SAM吧,我们要做的就是对r对应的节点找一......
  • Java 面向对象-封装
    何为封装(Encapsulation)面向对象的开发原则为“高内聚,低耦合”,即类的内部数据操作细节自己完成,不允许外部干涉,仅暴露少量方法给外部调用使用。例如,开车,我们无需懂得油门、离合、变速箱也可以驾驶。封装性本质是解耦(decouple)的表现在JAVA中,实现封装就是控制类或成员的可见范......
  • Diary - 2025.01.03
    今天简直是唐完了,糖糖。晚上想啥啥不会,看了题解还写不出来。我去我是不是没救了???今天的事没有办法,就鸽到明天去吧(。whk结束啦!!!看来pku还是挺良心的,有优异的还能直接打,太感动了!!!比较意外的是我居然去年pkusc也是优异,毕竟我觉得那场打的还是有点差的(。明天看起来是没有模......
  • Java毕业设计基于SpringBoot+Vue甜品店管理系统
    一、项目介绍开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven————————————————二、功能介绍1.高效的用户界面开发1.Vue是一个渐进式JavaScript框架,用于构......
  • 使用 Selenium IDE 生成 Java 自动化测试代码
    首先使用SeleniumIDE录制操作。导出为JavaJUnit测试文件。创建Maven项目,并编辑pom.xml添加依赖:我使用的SeleniumIDE版本为3.17.2,其对应的JUnit版本为4.x.x。<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/200......
  • 【职业规划】2025职业规划:行动力
    原创职场智汇堂......
  • 【华为OD-E卷 - 组合出合法最小数 100分(python、java、c++、js、c)】
    【华为OD-E卷-组合出合法最小数100分(python、java、c++、js、c)】题目给一个数组,数组里面哦都是代表非负整数的字符串,将数组里所有的数值排列组合拼接起来组成一个数字,输出拼接成的最小的数字输入描述一个数组,数组不为空,数组里面都是代表非负整数的字符串,可以是0开头,......
  • Java面试题(八股文+场景题)及答案最全总结(2025版)
    抽空给大家整理了一份非常全面的Java面试题+场景提及答案!还有最新涉及的内容非常全面,包含:Redis、多线程、JVM、Spring、MySQL、Dubbo…等35个知识内容,希望对找工作的同学有所帮助。完整版si我,666,不收米!Redis面试题1、什么是Redis?2、Redis的数据类型?3、使用Redis......
  • Java 集合 Collection、List、Set
    一.Collection单列集合    1. Collection代表单列集合,每个元素(数据)只包含一个值    2.Collection集合特点        ①List系列集合:添加的元素是有序、可重复、有索引。            ArrayList、LinekdList:有......