Java反射机制小结和实际操作

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

一、什么是反射

1、编译和运行

在了解什么是Java反射机制前,先聊聊Java的编译和运行。

还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文件,生成一个.class文件,再使用java命令运行.class文件。

在编译期,jvm会去检查.java文件中使用的类、类的属性和方法、类的对象等信息,如果都能找到对应的信息,则编译通过,否则会编译报错或抛出异常信息。

在运行期,会根据.class文件信息,处理其中的代码逻辑,如果遇到程序运行错误会抛出异常信息。

下面我们使用一个小例子来说明编译和运行。新建一个Animal类,根据传入的参数不同,创建不同的对象,执行不同的方法。

public class Animal{
    public static void main(String[] args) {
        if("Cat".equals(args[0])){
            Cat cat = new Cat();
            cat.eat();
        }
        if("Dog".equals(args[0])){
            Dog dog = new Dog();
            dog.eat();
        }   
    }
}

使用cmd命令编译时,会报错,找不到Cat类和Dog类。

E:\Java项目实战>javac Animal.java
Animal.java:6: 错误: 找不到符号
                        Cat cat = new Cat();
                        ^
  符号:   类 Cat
  位置: 类 Animal
Animal.java:6: 错误: 找不到符号
                        Cat cat = new Cat();
                                      ^
  符号:   类 Cat
  位置: 类 Animal
Animal.java:11: 错误: 找不到符号
                        Dog dog = new Dog();
                        ^
  符号:   类 Dog
  位置: 类 Animal
Animal.java:11: 错误: 找不到符号
                        Dog dog = new Dog();
                                      ^
  符号:   类 Dog
  位置: 类 Animal
4 个错误

这时我们新建一个Cat类,编译Cat类后,再次编译Animal类,又报了两个错误,找不到Dog类。

Animal.java:11: 错误: 找不到符号
                        Dog dog = new Dog();
                        ^
  符号:   类 Dog
  位置: 类 Animal
Animal.java:11: 错误: 找不到符号
                        Dog dog = new Dog();
                                      ^
  符号:   类 Dog
  位置: 类 Animal

如果我们想要使用猫类,而不管狗类是否存在,那该怎么做?那就是绕过编译期,在运行期动态执行猫类的方法。怎样绕过编译期呢?这就需要使用Java的反射机制了。

2、反射的概念

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

继续上面遗留的问题,在不新建一个Dog.java文件时,怎样调到Cat类的eat方法?

首先,我们要根据传入的参数动态加载类,然后创建类的实例对象,最后执行类的方法。因为你无法确定传入的参数是猫类还是狗类,就需要定义一个超类或接口,让猫类继承超类或实现接口,重载或重写eat()方法,在创建类实例时,只用创建超类或接口的实例即可。

public class AnimalBetter {
    public static void main(String[] args) {
        try {
            Class c1 = Class.forName(args[0]);
            IAnimal animal = (IAnimal)c1.newInstance();
            animal.eat();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这里我们选用的是接口

public interface IAnimal {
    public void eat();  
}

猫类的实现

public class Cat implements IAnimal {
    public void eat() {
        System.out.println("Cat is eatting");
    }
}

二、反射的优缺点

使用反射,可以在代码改动最小的情况下有效扩展功能。就像上面的小例子,如果哪天我们想使用老虎类进行eat动作,我们还需要改动AnimalBetter类的代码吗?答案是不需要,只需要新建一个老虎类,实现IAnimal的接口,重写eat方法,就可以了,对其他既有代码无需做任何改动。

使用反射,可以动态的创建类实例和使用类的方法,可以分析类文件,可以访问类的私有属性或方法,对于一些需要在运行时处理的事情都可以交给反射实现。

既然反射这么好,为什么不在项目中大范围的使用?其实,反射也是有弊端的。反射包括了一些动态类型,jvm无法对这些代码进行优化,实际操作效率低于非反射操作,在那些经常被执行的代码或对性能要求较高的模块尽量少使用反射。反射在程序有安全限制的环境中是无法使用的。反射可以访问私有的属性或方法,可能会破坏封装性,产生意料之外的结果。

三、如何使用反射

1、使用过程

首先要获取操作的类的Class对象,然后通过Class类中的方法获取和查看该类中的方法和属性,最后使用反射API来操作这些信息。

2、获取要操作的类的Class对象

有三种方式获取类的Class对象

(1)已经知道该类的类名

Class c2 = Animal.class;

实际上,任何一个类都有一个隐含的静态成员变量class,并且任何一个类都是Class类的实例对象,这个对象我们称为该类的类类型。

(2)已经知道该类的对象,通过getClass方法获取

Animal animal = new Animal();
Class c3 = animal.getClass();

不管是上面的c2还是这里的c3,都是Animal类的类类型,一个类只可能是Class类的一个实例对象或一个类类型。

(3)使用Class类中的forName()静态方法

Class c4 = Class.forName("Animal"); //forName(String str)中参数为类的全路径(包名+类名)

3、获取类的属性和方法

我们将其编写为一个工具类,如下:

/**
 * 获取类的属性和方法
 * @author 小川94
 * @date 2018年6月24日
 */
public class ClassUtil {

    /**
     * 获取类的成员变量信息
     * @param obj 要操作的类
     */
    public static void getClassFieldInfo(Object obj){
        // 获取要操作的类的Class对象
        Class c = obj.getClass();
        // 获取该类的成员变量信息
        // field类是java.lang.reflect包下的类,封装了关于类成员变量的操作
        Field[] fs = c.getFields(); // 获取的是所有的public的成员变量的信息
        Field[] fs2 = c.getDeclaredFields(); // 获取的是该类自己声明的成员变量的信息
        // 使用foreach遍历成员变量
        for (Field field : fs2) {
            // 得到成员变量的类型的类类型
            Class fieldType = field.getType();
            // 获取类类型的名称
            String typeName = fieldType.getName();
            // 获取成员变量的名称
            String fieldName = field.getName();
            System.out.println(typeName + " " + fieldName);
        }
    }

    /**
     * 获取类的方法信息
     * @param obj 要操作的类
     */
    public static void getClassMethodInfo(Object obj){
        // 获取要操作的类的Class对象
        Class c = obj.getClass();
        // 获取要操作的类的名称
        System.out.println("类的名称是:" + c.getName());
        // 获取该类的方法信息
        // Method类是java.lang.reflect包下的类,封装了关于类方法的操作
        Method[] ms = c.getMethods(); //获取的是所有的public的函数,包括从父类继承而来的
        Method[] ms2 = c.getDeclaredMethods(); // 获取的是所有该类自己声明的方法,不限访问权限
        // 遍历方法
        for (Method method : ms2) {
            // 得到方法的返回值类型的类类型
            Class returnType = method.getReturnType();
            System.out.print(returnType.getName() + " ");
            // 获取方法名
            System.out.print(method.getName() + " (");
            // 获取参数类型,得到的是参数列表的类型的类类型
            Class[] para = method.getParameterTypes();
            for (Class class1 : para) {
                System.out.print(class1.getName() + ",");
            }
            System.out.println(")");
        }
    }

    /**
     * 获取类的构造方法
     * @param obj 要操作的类
     */
    public static void getClassConstructorMethodInfo(Object obj){
        // 获取要操作的类的Class对象
        Class c = obj.getClass();
        // 获取该类的构造方法信息
        // constructor类是java.lang.reflect包下的类,封装了关于类的构造方法的操作
        Constructor[] cs = c.getConstructors(); // 获取所有的public的构造函数
        Constructor[] cs2 = c.getDeclaredConstructors(); //得到所有的构造函数
        for (Constructor constructor : cs2) {
            System.out.print(constructor.getName()+"(");
            // 获取构造函数的参数列表,得到的是参数列表的类类型
            Class[] paramTypes = constructor.getParameterTypes();
            for (Class class1 : paramTypes) {
                System.out.print(class1.getName()+",");
            }
            System.out.println(")");
        }
    }
}

编写测试类,如下:

public class Test {
    public static void main(String[] args) {
        System.out.println("----- 成员变量信息 -----");
        ClassUtil.getClassFieldInfo(new Integer(2));
        System.out.println("----- 构造方法信息 -----");
        ClassUtil.getClassConstructorMethodInfo(new Integer(2));
        System.out.println("----- 方法信息 -----");
        ClassUtil.getClassMethodInfo(new Integer(2));
    }
}

测试结果如下,大家可以将测试结果与Integer这个类做比较。

----- 成员变量信息 -----
int MIN_VALUE
int MAX_VALUE
java.lang.Class TYPE
[C digits
[C DigitTens
[C DigitOnes
[I sizeTable
int value
int SIZE
int BYTES
long serialVersionUID
----- 构造方法信息 -----
java.lang.Integer(int,)
java.lang.Integer(java.lang.String,)
----- 方法信息 -----
类的名称是:java.lang.Integer
int numberOfLeadingZeros (int,)
int numberOfTrailingZeros (int,)
int bitCount (int,)
boolean equals (java.lang.Object,)
java.lang.String toString (int,int,)
java.lang.String toString ()
java.lang.String toString (int,)
int hashCode (int,)
int hashCode ()
int min (int,int,)
int max (int,int,)
int reverseBytes (int,)
int compareTo (java.lang.Integer,)
int compareTo (java.lang.Object,)
byte byteValue ()
short shortValue ()
int intValue ()
long longValue ()
float floatValue ()
double doubleValue ()
java.lang.Integer valueOf (java.lang.String,int,)
java.lang.Integer valueOf (int,)
java.lang.Integer valueOf (java.lang.String,)
java.lang.String toHexString (int,)
int compare (int,int,)
java.lang.Integer decode (java.lang.String,)
void getChars (int,int,[C,)
int reverse (int,)
int stringSize (int,)
int sum (int,int,)
int parseInt (java.lang.String,)
int parseInt (java.lang.String,int,)
long toUnsignedLong (int,)
int compareUnsigned (int,int,)
int divideUnsigned (int,int,)
int formatUnsignedInt (int,int,[C,int,int,)
java.lang.Integer getInteger (java.lang.String,java.lang.Integer,)
java.lang.Integer getInteger (java.lang.String,int,)
java.lang.Integer getInteger (java.lang.String,)
int highestOneBit (int,)
int lowestOneBit (int,)
int parseUnsignedInt (java.lang.String,)
int parseUnsignedInt (java.lang.String,int,)
int remainderUnsigned (int,int,)
int rotateLeft (int,int,)
int rotateRight (int,int,)
int signum (int,)
java.lang.String toBinaryString (int,)
java.lang.String toOctalString (int,)
java.lang.String toUnsignedString (int,)
java.lang.String toUnsignedString (int,int,)
java.lang.String toUnsignedString0 (int,int,)

4、使用反射API来操作类

public class MethodDemo {

    public static void main(String[] args) {
        // 第一种写法
        try {
            // 获取要操作的类的Class对象
            Class c = Class.forName("sessionone.Foo");
            // 获取print方法
            Method m = c.getMethod("print", String.class);
            // 第二种写法,new Class[]{}里面可以接多个参数,也可以为空
            Method m2 = c.getMethod("print", new Class[]{String.class});
            // 第三种写法,获取该类自己声明的方法
            Method m3 = c.getDeclaredMethod("print", String.class);
            // 执行方法
            m3.invoke(c.newInstance(), "小川94");
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 第二种写法
        Foo foo = new Foo();
        foo.print("小川94");
        // 第三种写法
        try {
            Class c2 = Class.forName("sessionone.Foo");
            Foo foo2 = (Foo) c2.newInstance();
            foo2.print("小川94");
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 第四种写法
        try {
            Foo foo3 = new Foo();
            Class c3 = Class.forName("sessionone.Foo");
            Method method = c3.getDeclaredMethod("print", String.class);
            method.invoke(foo3, "小川94");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Foo{
    public void print(String name){
        System.out.println("Hello," + name);
    }
}

四、反射的实际应用

1、在JDBC中的使用

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);

在装载驱动时,使用了反射,在getConnection的源代码中,使用了反射,整个JDBC都和反射有关联。

2、在集合泛型中的使用

ArrayList list = new ArrayList();
ArrayList<String> list2 = new ArrayList<String>();
System.out.println(list.equals(list2)); //true

Class c = list.getClass();
System.out.println("list的类类型名称:"+c.getName());
Class c2 = list2.getClass();
System.out.println("list2的类类型名称:"+c2.getName());
System.out.println(c == c2); //true

// c1==c2结果返回true,说明编译之后集合的泛型是去泛型化的
// Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了
// list2.add(20); 这样写,是会编译报错
try {
    System.out.println("list2中有"+list2.size()+"个元素");
    Method m = c2.getMethod("add", Object.class);
    m.invoke(list2, 20);
    System.out.println("list2中有"+list2.size()+"个元素");
    System.out.println(list2.toString()); //[20],已经将类型是整型的数添加到list2中
} catch (Exception e) {
    e.printStackTrace();
} 

集合中的泛型只是为了防止编译错误,在运行时会将泛型全部清除。

3、在Servlet中的使用

在之前的servlet系列文章中,使用了反射来完成了一个Servlet处理多个请求,具体可以看那篇文章的详细描述。

4、在框架中的使用

在主流框架中都有反射的影子,通过配置、注解完成一些需要静态加载类的方法转为使用反射来动态加载类,具体的会在讲解到框架时细讲。

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置) 本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。 阅读详情

相关推荐

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1652

Java基础篇:反射机制详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/a745233700/article/details/82893076 一、什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取t对象的各种信息。 (2)Java属于先编译再运行的语言,程序中对象的类型在编译期就

weixin_45438577的博客 609

FPGA实战:从零构建eMMC控制器(Verilog篇)

本文详细介绍了如何使用Verilog从零构建FPGA上的eMMC控制器,涵盖eMMC接口基础、命令系统解析、关键模块设计及性能优化技巧。通过实战案例,帮助开发者掌握高速数据存储解决方案,提升嵌入式系统开发能力。

weixin_26802933的博客 298

面试之反射机制的一般步骤

反射是在java面试中很容易考到的一个问题,考官能通过这个了解面试者能力 首先,回答什么是反射? 答:反射是一种间接操作目标对象的机制,在程序程序运行时获取或者设置对象自身的信息。 只要给定类的名字,就可以通过反射获取类的所有信息,接着便能调用它的任何一个方法和属性。 反射的步骤有哪些? 第一:获取类加载器:ClassLoader loader=Thread.currentThread

qq_26919721的博客 6781

10分钟学会工程领域Hypermesh与Abaqus联立处理大量铆钉连接简化做法

铆钉连接是一种可靠且高强度的机械连接方式,广泛应用于多个领域。但是,工程结构上铆钉连接往往以较大的数量出现,若按照常规的一个个去选择生成,处理1个铆钉连接点需要1分钟来算,300个铆钉需要5个小时,耗费大量的时间成本。给出了一种高效处理铆钉连接的方法,提升效率50倍以上。

qq_34933927的博客 1616

【讯飞星火大模型AI】SpringBoot整合星火API:从零构建智能数据分析助手

本文详细介绍了如何使用SpringBoot框架整合讯飞星火大模型API,从零构建一个智能数据分析助手。通过清晰的步骤,指导开发者完成API密钥申请、项目搭建、SDK集成与核心代码编写,实现用户通过自然语言指令和CSV数据,即可自动获得ECharts图表代码与专业数据分析结论,极大降低数据分析与可视化的门槛。

neovim7hacker的博客 278

什么是反射机制? 反射机制怎么用?(精细讲)

什么是反射机制? 在运行状态中,对于任意一个类,都能获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意的一个方法或属性(包括私有的方法和属性),这种动态的获取类信息以及动态调用对象的方法和属性的功能就称之为java语言的反射机制。 也就是说通过反射机制,这个类就是透明的,可以获取这个类的任意东西。 反射机制的使用 可以通过获取字节码文件的三种方法: Class clazz1 = Class.forName(“全限定类名”);  //通过Class类中的静态方法forName,直接获取到一

nanZhaiXiaoLang的博客 2475

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1018

JAVA篇_反射(Reflection)

一、语言 动态语言:是一类在程序运行过程中可以接受改变的语言,如引进新的函数、对象、甚至是代码都可以改变。通俗来讲:程序运行时代码可以根据自身条件,改变自身结构。如:js语言。 静态语言:运行时结构无法发生改变的,比如:java,c,c++等。但java可以通过反射机制使其具有动态的特性,所以又被称为准动态语言。 二、什么是反射 1.反射机制 反射机制实在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,...

qq_45878219的博客 555

065、鲁棒控制基础:H∞控制简介

本文从作者调试四旋翼时PID控制器失效的实际案例出发,介绍了H∞控制的基本原理及其在飞控中的应用。文章指出传统控制方法对模型误差敏感的局限性,阐释了H∞控制通过最小化扰动到输出的传递函数无穷范数来保证系统鲁棒性的核心思想。 主要内容包括: H∞控制的数学框架,通过求解Riccati方程设计控制器 飞控中的典型应用场景,如结构不确定性建模和混合灵敏度问题 一个简化的俯仰角控制设计示例 工程实现中的常见问题:权重函数选择、控制器降阶和离散化注意事项 作者强调H∞控制虽能有效处理有界不确定性,但仍需结合工程直觉进

2401_88858637的博客 44

【Ellisys】【使用技巧】【二】

支持所有常见的编码器和协议实时播放或保存(无线和HCI)循环播放导出与其他视图协同(OverView 和 Spectrum)可以通过下面的位置看 重传的包。

奔跑吧 android 的博客 138

java反射的编译过程_Java反射机制小结和实际操作

一、什么是反射1、编译和运行在了解什么是Java反射机制前,先聊聊Java的编译和运行。还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文件,生成一个.class文件,再使用java命令运行.class文件。在编译期,jvm会去检查.java文件中使用的类、类的属性和方法、类的对象等信息,如果都能找到对应的信息,则编译通过,否则会编译报错或抛...

weixin_42314846的博客 596

BUCK-BOOST升降压电路Multisim电路仿真分析

本文分析了三极管型BUCK-BOOST升降压开关电源的工作原理。该电路结合了BUCK降压和BOOST升压拓扑,通过控制三极管Q1的高频通断,使电感L1周期性储能和释能,实现输出电压可高于或低于输入电压且极性相反。详细阐述了Q1导通和关断阶段的工作过程,推导了输出电压与占空比的关系式Vo=-D/(1-D)*Vi,并分析了不同占空比下的工作模式(降压、升压)。通过Multisim仿真验证了理论分析,当D=25%时输出降压至1.6V,D=60%时输出升压至7.5V。电路具有升降压灵活、极性反转、效率高等特点,适用

XU157303764的博客 1437

Java反射机制小结

1 Java反射机制概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 1.1Java反射机制提供的功能 Ø在运行时判断任意一个对象所属的类 Ø在运行时构造任意一个类的对象 Ø在运行时判断任意一个类所具有的成员变量和方法 Ø在运行时调用任意一个对象的成员变量和...

一枝韩独秀的博客 1586

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java 基础 - 反射机制

反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法。在运行时判断任意一个对象所属的类。在运行时判断任意一个类所具有的成员变量和方法。在运行时任意调用一个对象的方法。在运行时构造任意一个类的对象。反射就是把java类中的各种成分映射成一个个的Java对象例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。

qq_58181452的博客 1778

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 中的反射机制(两万字超全详解)

文章目录一、反射概述1. 什么是反射?2. 反射机制原理3. 反射优点和缺点4. 类加载概述5. 类加载各阶段完成的功能5.1 加载阶段5.2 连接阶段——验证5.3 连接阶段——准备5.4 连接阶段——解析5.5 初始化阶段二、Class 类1. 动态加载2. 小结三、访问字段1. 获取字段值2. 设置字段值3. 小结四、调用方法1. 调用方法2. 调用静态方法3. 调用非 public方法4. 多态5. 小结五、调用构造方法六、获取继承方法1. 获取父类的Class2. 获取interface3. 继承

林二月的博客 3万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java反射机制起何作用_java反射机制的一些学习心得小结

概述之前在了解Spring的类加载机制的时候,了解了java的反射机制。但是,我对反射理解一直不深。也一直有点疑惑:Spring为什么利用反射创建对象?直接new对象和依靠反射创建对象有什么区别?什么是动态加载类?什么是反射?要想知道反射到底是什么,首先需要知道java的类加载和对象创建的机制。当我们写完一个java文件的时候,后缀是.java。在我们利用IDE执行java文件的时候,其实IDE也...

weixin_36122351的博客 132

【老生常谈】之Java反射机制

java.lang.Class 类是实现反射的关键所在,存在于JDK的java.lang包中,可以通过它获取类的构造函数、方法、字段等信息。Class 类的一个实例表示 Java 的一种数据类型,表示某个类加载后在堆中的对象,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和 void。在 Java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。使用反射机制,可以在运行时获取一个类的信息,包括其方法、字段、注解、泛型类型等,并可以动态地创建对象、调用方法、访问字段等。

独泪了无痕 1046

理解java反射机制,java反射机制介绍和理解

Java反射机制是Java程序在运行状态下,动态获取类中的内容以及动态调用对象的方法。此篇是对Java反射机制的一些基础代码操作的简单总结。1.Java反射机制概述Java反射机制就是在Java程序运行时,得到一个java类中的属性和方法;并可以调用已经给定对象的类中的构造方法、属性和方法。放射机制就是就像这样动态的获取类中构造方法、属性和方法以及动态调用对象的方法。2.Java反射机制基础内容正...

weixin_39964869的博客 170

【Java——反射机制详解】

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。

abclyq的博客 1172

Java反射机制全面解析

在Java中,除了int等基本类型外,Java的其他类型全部都是class(包括interfaceStringObjectRunnableException...Java反射机制是Java语言的一个重要特性。在学习Java反射机制前,大家应该先了解两个概念:编译期和运行期。编译期:是指把源码交给编译器编译成计算机可以执行的文件的过程。在Java中也就是把Java代码编成class文件的过程。编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本进行操作。

m0_73863802的博客 823

简单明了的java反射机制

 Java反射机制是Java程序在运行状态下,动态获取类中的内容以及动态调用对象的方 法。此篇是对Java反射机制的一些基础代码操作的简单总结。 1.Java反射机制概述  Java反射机制就是在Java程序运行时,得到一个java类中的属性和方法;并可以调用 已经给定对象的类中的构造方法、属性和方法。放射机制就是就像这样动态的获取类中 构造方法、属性和方法以及动态调用对象的方法。 2.Java反射机制基础内容  正常情况下如果已经有一个类,则可以通过类创建对象;那么如果想通过一个对象 找到一个类的名称,就

大表哥的博客 5929

Java 基础 - 反射机制详解

本文综合多篇文章后,总结了Java 反射的相关知识,希望可以提升你对Java中反射的认知效率。

qq_63353796的博客 1272

反射机制小结

获取Class对象有三种方式: 1.通过Object类的getClass()方法。例如: Class c1 = new String("").getClass(); 2.通过Class类的静态方法——forName()来实现: Class c2 = Class.forName("MyObject"); 3.如果T是一个已定义的类型的话,在java中,它的.class文件名...

ami84217的博客 117

浅谈java反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。

程序员乌拉的博客! 1062

java反射机制小结

java的反射机制一直是java的一块重要内容,掌握它对日后的框架学习会有很大的帮助。  我们先来看看什么是反射机制。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的

路漫漫 始于足下 538
上一篇: Servlet(六):连接数据库,完整的CRUD
下一篇: JSP(一):初识JSP
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值