java基础-反射

高速DAC设计与实现--AD9122 目录 芯片简介: 功能配置设计 高速DAC软件驱动设计 芯片简介: AD9122 是一款双通道16位高性能数模转换器(DAC),在800MSPS工作条件下其无杂散动态范围(SFDR)高达72dBc,最高可提供1200 MSPS采样速率。 高速DAC--AD9122电路原理图 硬件设计的电路原理图如上图所示,AD9122具备针对直接变频传输应用进行优化的特性,包括复数数字调制以及增益与失调补偿。DAC输出经过优化后可直接与模拟正交调制器无缝接口,便于后期使... 阅读详情

前言

JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性, 方法, 注解, 继承实现的信息,也就你想要的这里都有. 对于任意一个对象, 都能够调用它的任意方法和属性, 这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制.

反射是学习框架源码之前必须掌握的知识!
本篇主要是介绍api的使用

在线文档.

示例代码github.

反射相关类简介

类描述
Class类信息
Field类的属性
Method类的方法
Constructor类的构造器

准备

先建要用到的类

一个父类

public abstract class AbstractClassDemo {
    abstract public void absMethod();
}

一个接口

public interface InterfaceDemo {
    void interfaceMethod();
}

一个类

public class ClassDemo extends AbstractClassDemo implements InterfaceDemo {

    private static String staticField ;

    private final String FINAL_FIELD = "final_field";

    private static final  String STATIC_FINAL_FIELD = "static_final_field";

    private int id;

    private String privateString;

    protected Integer protectedInteger;

    public String publicString;

    public ClassDemo(){

    }

    public String thisPublicMethod(String str) throws ClassCastException,Exception{
        System.out.println("thisPublicMethod " +str);
        return str;
    }

    private static void staticPrivateMethod(String str,String str2){
        System.out.println("staticPrivateMethod " + str +" " +str2);
    }

    @Override
    public void absMethod() {
        System.out.println("absMethod");
    }

    @Override
    public void interfaceMethod() {
        System.out.println("interfaceMethod");
    }

    public void testGetDeclaredClasses(){
        new ClassDemo2().instance().pr();
    }


    public class ClassDemo2{
        public void pr(){

        }

        public ClassDemo2 instance() {
            //匿名内部类
            return new ClassDemo2() {
                @Override
                public void pr(){
                    System.out.println("getDeclaredClasses: " + this.getClass().getDeclaringClass());
                    System.out.println("getEnclosingClass " + this.getClass().getEnclosingClass());
                }
            };
        }

    }

    private class ClassDemo3{

    }

    private static class ClassDemo4{

    }

    public interface InterFace2{

    }
}

Class

	@Test
    void testClass() throws Exception{
		//三种获取类对象的方法 
        //通过Class.forName
        Class clazz = Class.forName("com.xc.java.reflect.ClassDemo");
        System.out.println("通过Class.forName: " + clazz);
        
        //通过 类.class
        Class clazz1 = ClassDemo.class;
        System.out.println("通过 类.class: " + clazz1);

        //通过对象getClass
        Class clazz2 = new ClassDemo().getClass();
        System.out.println("通过对象getClass: " + clazz2);

        //获取类加载器
        ClassLoader classLoader = clazz.getClassLoader();
        System.out.println("类加载器classLoader: " +classLoader);

        //获取内部所有public类,接口
        Class[] classes = clazz.getClasses();
        System.out.println("公共的内部类,接口 getClasses: " + classes);

        //获取内部所有类,接口
        Class[] declaredClasses = clazz.getDeclaredClasses();
        System.out.println("所有的内部类,接口 declaredClasses: " + classes);

        //获取该类实现的接口
        Class[] interfaces = clazz.getInterfaces();
        System.out.println("所有实现的接口getInterfaces: " + classes);

        //获取类的限定类名
        String name = clazz.getName();
        System.out.println("限定类名 getName: " + name);

        //获取类的非限定类名
        String simpleName = clazz.getSimpleName();
        System.out.println("非限定类名 getSimpleName: " + simpleName);

        //获取类所在的包
        Package aPackage = clazz.getPackage();
        System.out.println("获取包 getPackage: " + aPackage);

        //获取直接父类
        Class superclass = clazz.getSuperclass();
        System.out.println("获取父类对象 getSuperclass: " + superclass);

        //父类(或解耦)转换子类
        Class subClazz = clazz.asSubclass(AbstractClassDemo.class);
        System.out.println("父类转子类 subClazz" +subClazz);

        //创建一个对象
        ClassDemo classDemo = (ClassDemo)clazz.newInstance();
        System.out.println("新建一个对象:newInstance " + classDemo);
		
        //getEnclosingClass(支撑匿名内部类) 和 getDeclaringClass(不支持匿名内部类) 都是内部类获取外部类.
        classDemo.testGetDeclaredClasses();
    }

输出结果

通过Class.forName: class com.xc.java.reflect.ClassDemo
通过 类.class: class com.xc.java.reflect.ClassDemo
通过对象getClass: class com.xc.java.reflect.ClassDemo
类加载器classLoader: sun.misc.Launcher$AppClassLoader@18b4aac2
公共的内部类,接口 getClasses: [Ljava.lang.Class;@479d31f3
所有的内部类,接口 declaredClasses: [Ljava.lang.Class;@479d31f3
所有实现的接口getInterfaces: [Ljava.lang.Class;@479d31f3
限定类名 getName: com.xc.java.reflect.ClassDemo
非限定类名 getSimpleName: ClassDemo
获取包 getPackage: package com.xc.java.reflect
获取父类对象 getSuperclass: class com.xc.java.reflect.AbstractClassDemo
父类转子类 subClazzclass com.xc.java.reflect.ClassDemo
新建一个对象:newInstance com.xc.java.reflect.ClassDemo@40ef3420
getDeclaredClasses: null
getEnclosingClass class com.xc.java.reflect.ClassDemo$ClassDemo2

Field

	@Test
    void testField() throws Exception {
        Class clazz = ClassDemo.class;
        Object obj = clazz.newInstance();

        //获取单个属性 public
        clazz.getField("publicString");
        //获取单个属性 private
        clazz.getDeclaredField("publicString");

        //获取类的所有public属性
        Field[] fields = clazz.getFields();
        System.out.println("获取所有public 属性: ");
        for(Field field : fields){
            System.out.println(field.getModifiers() + " " + field.getType().getSimpleName() + " " +field.getName() + " " +field.get(obj));
        }

        //获取所有属性
        Field[] declaredFields = clazz.getDeclaredFields();
        System.out.println("获取所有属性: ");
        for(Field field : declaredFields){

            //设置可访问
            field.setAccessible(true);

            if("publicString".equals(field.getName())){
                //修改公共属性
                field.set(obj,"修改公共属性success");
            }else if("privateString".equals(field.getName())){
                //修改私有属性
                field.set(obj,"修改私有属性success");
            }else if("FINAL_FIELD".equals(field.getName())){
                //修改私有非静态常量
                //modifiers使修饰符的值
                Field modifiers = Field.class.getDeclaredField("modifiers");
                modifiers.setAccessible(true);
                modifiers.setInt(field, field.getModifiers()&~Modifier.FINAL);
                field.set(obj,"修改私有非静态常量success");
            }else if("STATIC_FINAL_FIELD".equals(field.getName())){
                //修改私有静态常量
                Field modifiers = Field.class.getDeclaredField("modifiers");
                modifiers.setAccessible(true);
                modifiers.setInt(field, field.getModifiers()&~Modifier.FINAL);
                field.set(obj,"修改私有静态常量success");
            }
            System.out.println(field.getModifiers() + " "
                    + field.getType().getSimpleName() + " "
                    + field.getName() + " "
                    + field.get(obj));
        }
    }
       /**
     * JAVA 反射机制中,Field的getModifiers()方法返回int类型值表示该字段的修饰符。
     * 对应表如下:
     * PUBLIC: 1
     * PRIVATE: 2
     * PROTECTED: 4
     * STATIC: 8
     * FINAL: 16
     * SYNCHRONIZED: 32
     * VOLATILE: 64
     * TRANSIENT: 128
     * NATIVE: 256
     * INTERFACE: 512
     * ABSTRACT: 1024
     * STRICT: 2048
     */
获取所有public 属性: 
1 String publicString null
获取所有属性: 
10 String staticField null
2 String FINAL_FIELD 修改私有非静态常量success
10 String STATIC_FINAL_FIELD 修改私有静态常量success
2 int id 0
2 String privateString 修改私有属性success
4 Integer protectedInteger null
1 String publicString 修改公共属性success

Method

@Test
    void testMethod() throws Exception{
        Class clazz = ClassDemo.class;
        ClassDemo classDemo = (ClassDemo) (clazz.newInstance());

        //获取所有共有方法
        Method[] methods = clazz.getMethods();
        //获取方法: 通过方法名称 和 ...所有参数类型
        Method thisPublicMethod = clazz.getMethod("thisPublicMethod", String.class);

        //获取方法所有throws异常
        Class[] exceptionTypes = thisPublicMethod.getExceptionTypes();

        //方法所在类
        Class<?> declaringClass = thisPublicMethod.getDeclaringClass();

        //方法参数个数
        int parameterCount = thisPublicMethod.getParameterCount();

        //返回方法所有参数类型
        Class<?>[] parameterTypes = thisPublicMethod.getParameterTypes();

        //返回结果类型
        Class<?> returnType = thisPublicMethod.getReturnType();

        //返回所有Parameter
        Parameter[] parameters = thisPublicMethod.getParameters();

        //获取所有方法
        Method[] declaredMethods = clazz.getDeclaredMethods();

        for (Method declaredMethod : declaredMethods) {
            //设置访问权限
            declaredMethod.setAccessible(true);
            //执行方法
            declaredMethod.invoke(classDemo ,new Object[declaredMethod.getParameterCount()]);
        }
    }

Constructor

@Test
    public void testConstructor() throws Exception{
        Class clazz = ClassDemo.class;

        //获取所有共有构造器
        Constructor[] constructors = clazz.getConstructors();
        System.out.println("获取所有共有构造器 " + constructors);
        //获取所有构造器
        Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
        System.out.println("获取所有构造器 " + declaredConstructors);

        //根据参数类型和个数获取构造器  public
        Constructor constructor = clazz.getConstructor();
        System.out.println("根据参数类型和个数获取public的构造器  " + constructor);

        //根据参数类型和个数获取构造器
        Constructor declaredConstructor = clazz.getDeclaredConstructor();
        System.out.println("根据参数类型和个数获取构造器 " + declaredConstructor);

        //通过构造器创建一个对象
        Object object = declaredConstructor.newInstance();
        System.out.println("通过构造器创建一个对象 " + object);
    }

输出

获取所有共有构造器 [Ljava.lang.reflect.Constructor;@333291e3
获取所有构造器 [Ljava.lang.reflect.Constructor;@479d31f3
根据参数类型和个数获取public的构造器  public com.xc.java.reflect.ClassDemo()
根据参数类型和个数获取构造器 public com.xc.java.reflect.ClassDemo()
通过构造器创建一个对象 com.xc.java.reflect.ClassDemo@40ef3420

总结

你想要的,反射这里都有.

qtcreator使用远程服务器编译代码 我并没有找到很好的windows上可以用的rsync工具,最后是装了wsl来调用rsync同步到代码后,在用ssh调用linux命令来编译的。安装wsl安装ubuntu启动wsl然后把windows里的ssh文件证书和配置复制到wsl里同时config的key目录需要改一下,这样就可以登录服务器了然后在home目录创建build.sh进行远程编译。 阅读详情

相关推荐

LSTM模型股价波动率预测(含Python代码)

源代码文件可在gzh’finance褪黑素'回复【24012203】获取。

celiaweiwei的博客 3774

java 反射初步理解

前言  之前整理了java同步的相关内容,现在开始整理java反射,都属于java相关内容。在查找资料的过程中,找到两篇个人认为很不错的介绍及应用:  Java反射以及在Android中的特殊应用  Java 技术之反射什么是反射?  反射,简单来讲,是一种与类动态交互的机制。为什么是动态交互的?一般来讲,在一个类已经写好且不能再修改的前提下,我们只能调用其暴露出来的方法或属性,而有时候我们又有扩展

yizhan_zjz的博客 472

QT的温湿度显示系统

大家好,这里是石侃侃的博客,欢迎前来讨论这篇文章介绍的是DHT11在2440上的基于Qt5.6的应用基于单片机系统的温湿度监测系统构成框图如图2-1所示。图2-1 系统构成框图该系统采用单片机s3c2440作为了本设计的核心元件。利用LCD作为了显示器件,利用触摸屏作为用户界面输入设备,第一行显示当前实时的温度,湿度,第二行依次显示历史时刻最高的温度值,最高的湿度值。第三行是一个文本框,记录了程...

zxpcus的博客 1万+

反射中的Declared总结

1、declared的方法只获取当前类定义的。 2、非declared只能获取public修饰的。 3、Class、Method、Field如果使用非declared的方法获取都是可以获取父类的public修饰符对应的元素,Constructor只获取当前类。构造方法不能继承。 4、Class使用非declared的方法会获取父类注解,其它只会获取当前元素注解。 ...

debugmyworld 1924

最新Linux CSI Tools安装教程(两台主机,一发一收)(监控模式)

无线感知之CSI Tools工具安装,最新在监控模式下采集CSI数据,

h1998040218的博客 3032

超硬核实操!DeepSeek 全方位赋能嵌入式工程师,干货满满

摘要:本文聚焦 DeepSeek 大语言模型在嵌入式开发中的实操应用。开篇阐述其在开发前期助工程师精准理解需求、规划架构;代码编写阶段,可生成补全代码、助力算法实现与优化;调试测试时,能定位问题、生成测试用例;学习阶段,帮整理资料、规划学习路径。文中借助 Python 实现与模型交互,提供大量实操流程与代码示例。虽存在不足,但实操彰显其巨大潜力,为嵌入式工程师提供高效工作新思路与全面实操指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2001

java反射总结

Class类中Medthod、Filed、Constructor的方法都有Declare,这跟不加declare有什么区别,我们看一下源码定义: 以获取Constructor对象的方法为例看一下: @CallerSensitive public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException {

菜鸟在路上 313

YOLO格式数据集划分

YOLO格式的数据集划分 标题标签格式txt import os import cv2 import random from PIL import Image # os.makedirs('labels_train') # os.makedirs('labels_val') img_train_path ='./img_train/' #图片训练集保存路径 img_val_path = './img_val/' #图片验证集保存路径 labels_train_path = './labels_t

weixin_51154380的博客 3307

反射1——Class类与Java反射

通过Java反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。Java反射机制的功能过十分强大,在java.lang.reflect包中提供了该功能过的支持。 java.lang.reflect包的描述 提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许

LQS的博客 989

《UDS协议从入门到精通(UDS速查手册)》(完结撒花版)

专栏总目录,文中介绍了UDS协议相关的基础知识和一些术语,给出了详细介绍6大类26种服务的跳转目录。

车载系统攻城狮 9万+

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2294

Java 反射机制深度解析:类信息的来源、declared 的区别、赋值操作及暴力反射

为了更好地理解反射机制,我们先来看一下Student// 私有字段// 公共字段// 默认访问权限字段// 受保护字段// 私有方法// 公共方法// 默认访问权限方法// 受保护方法// 构造器类信息的来源:类信息从源码文件经过编译生成字节码文件,再由类加载器加载到内存中,生成Class对象。与get的区别获取当前类中声明的所有成员,包括私有成员;get只获取公共成员,包括父类的公共成员。使用类信息赋值。

2403_87729201的博客 1456

YOLO26优化:特征融合 | 一种新颖的多尺度特征融合iAFF,适配小目标检测

在YOLO26中如何使用:iAFF加入Neck替代Concat;

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 270

Java 基础 - 反射

类的对象:基于某个类 new 出来的对象,也称为实例对象。类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法、包) ,每个类只有一个类对象。反射:把Java类中的各种成分映射成单独的Java对象进行操作。注意:每个类加载到内存都会生成一个唯一的类对象。

哈哈哈哈丶昊的博客 946

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java-反射基础

在Java当中,万物皆对象class中用于获取构造方法的方法1.返回所有公共构造方法对象的数组2.返回所有构造方法对象的数组3.返回单个公共构造方法对象4.返回单个构造方法对象constructor类中用于创建对象的方法根据指定的构造方法创建对象设置为true,表示取消访问控制class类中用于获取成员变量的方法-》返回所有公共成员变量对象的数组-》返回所有成员变量对象的数组-》返回单个公共成员变量对象-》返回单个成员变量对象filed类中用于创建对象的方法-》赋值-》获取值。

luxury的博客 1652

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java基础—反射

Java语言对大小写是敏感的,所以Class和class是不同的,Class类也是类的一种,与class关键字不同.类被编译后会产生一个Class对象,作用是创建保存类的类型信息,并且这个Class对象保存在同名的.class文件中(字节码文件)通过class关键字标识的类,在内存中只有一个与之对应的Class对象来描述其类型信息,即使有多个对象,它们依据的都是同一个Class对象Class类只存在私有构造函数,所以只能被JVM创建和加载。

左灯右行的爱情 1030

Java基础之—反射(一)

Java基础之—反射(一) 概述: 1、介绍什么是反射 2、获得Class类对象的三种方式 一、什么是反射 描述得到数据结构的结构的数据的一种行为。 二、通过反射可以得到什么? 三、获得Class类对象的三种方式 public class ClassDemo { public static void main(String[] args) throws Exce...

Bruce小鬼 975

Java 反射基础

Java反射(Reflection)是Java编程语言的一个特性,它允许在运行时对类、接口、字段和方法进行动态查询和操作。反射提供了一种在运行时查看和修改程序行为的能力,这通常用于实现一些高级功能,如框架、ORM(对象关系映射)工具、IDE(集成开发环境)等。

TGO-Ming 883

java反射基础知识总结

java反射基础知识总结

笔杆__的博客 338

Java 基础之反射

反射快速入门 方向探知,在程序运行过程中动态的获取类的相关属性 这种动态获取类的内容以及动态调用对象的方法和获取属性的机制,就叫做JAVA 的反射机制 创建一个普通的类 public class Car { public String color="red"; public Integer price=10000; public void run () { System.out.println("我是汽车 我会跑!"); } } 简单的应用 /** * 反

m0_46937429的博客 1057

Java反射基础

当我们在使用Java编写代码时,有时候需要在运行时动态地获取类的信息,例如类的构造函数、方法、字段等。这时候,Java反射就成为了一个非常有用的工具。Java反射是指在运行时动态地获取类的信息,并能够在运行时操作对象。Java反射提供了一种机制,可以在运行时获取类的构造函数、方法、字段等信息,并能够在运行时动态地创建对象、调用方法、访问字段等。下面,我们将介绍Java反射的一些基本概念和使用方法。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

Dreamgeek的博客 700

java反射基础

Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。

学习指针路上的小学渣的博客 1945

【Java基础-java反射】Java反射知识点(有这一篇就够了)

【Java基础-java反射】Java反射知识点(有这一篇就够了) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 文章目录【Java基础-java反射】Java反射知识点(有这一篇就够了)1、反射的概述1.1 什么是反射2 查看Class类在java中的api详解(1.7的API)3. Java反射的应用3.1 如...

【程序员不弃】的博客 7660

【Java】基础——反射(Reflection)基础

本篇对反射基础进行了讲解。什么是Java语言的反射机制?反射都提供了什么功能?反射有什么作用?反射如何获取Class对象?反射如何创建类对象?反射如何获取类的成员变量和类的成员方法?

2301_79456272的博客 865

Java基础——反射

反射知识点i总结

qq_52117201的博客 274

Java基础之—反射(四)

Java基础之—反射(四) 一、概述 主要介绍通过反射创建具体类的对象。 二、创建具体类对象方法 import java.lang.reflect.Constructor; class User{ public User(){} private User(String name){} public String toString() { return "User对象";...

Bruce小鬼 948
上一篇: lombok常用注解
下一篇: java基础-jdk动态代理
卷心菜~
博客等级 码龄10年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值