Java知识点--反射(上)

Java知识点——反射 Java 反射是指在运行时动态地获取类的信息并操作类的成员(包括构造方法、方法和字段)的机制。通过反射,我们可以在程序运行时加载、检查和使用类,而不需要在编译时就确定要使用的类。反射机制主要依赖于java.langClassMethod和Field。 阅读详情

在这里插入图片描述



🍖一、为什么需要反射

1️⃣在特定情境中传统方法的不足

例:有一个配置文件re.properties,根据这个文件创建Cat对象,并调用hi方法,应该怎么做?

classfullpath=com.hspedu.Cat
method=hi

当然我们可以使用传统方法:

Cat cat = new Cat();
cat.hi();

但是传统方法有缺点,如果配置文件中method变成了hello,那么我们只能修改源码,把cat.hi();修改成cat.hello();。

2️⃣为了不修改源码引出反射

这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下,来控制程序,也符合设计模式的 ocp原则(开闭原则:不修改源码,扩容功能)

        //1.使用Properties类,读取配置文件
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\re.properties"));
        String classfullpath = properties.getProperty("classfullpath");
        String method = properties.getProperty("method");
        System.out.println(classfullpath);
        System.out.println(method);
        //2.使用反射机制解决
        //(1)加载类,得到Class类型的对象aClass
        Class aClass = Class.forName(classfullpath);
        //(2)通过aClass对象得到加载的类 com.hspedu.Cat 的对象实例
        Object o = aClass.newInstance();
        //(3)通过aClass对象得到加载的类 com.hspedu.Cat 的 method 的方法对象
        //   在反射中:可以把方法视为对象
        Method method1 = aClass.getMethod(method);
        //(4)通过 method1 调用方法:即通过方法对象来实现调用方法
        method1.invoke(o);//传统方法:对象.方法()  反射:方法.invoke(对象)

🍗二、反射机制

1️⃣Java反射机制

反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到。
加载完类之后,在堆中就产生了一个Class类型的对象(一个类只有一个Class对象) ,这个对象包含了类的完整结构信息。通过这个对象得到类的结构。这个Class对象就像一面镜子, 透过这个镜子看到类的结构,所以,形象的称之为:反射。

2️⃣Java 反射机制原理示意图

在这里插入图片描述

3️⃣Java 反射机制可以完成

(1)在运行时判断任意一个对象所属的类
(2)在运行时构造任意一个类的对象
(3)在运行时得到任意一个类所具有的成员变量和方法
(4)在运行时调用任意-个对象的成员变量和方法
(5)生成动态代理

4️⃣反射相关的主要类

java.lang.Class:代表一个类,Class对象表示某 个类加载后在堆中的对象
java.lang.reflect.Method:代表类的方法,Method对象表示某个类的方法
java.lang.reflect.Field:代表类的成员变量,Field对象表示某个类的成员变量 java.lang.reflect.Constructor:代表类的构造方法,Constructor对象表示构造器
这些类在java.lang.reflection

classfullpath=com.hspedu.Cat
method=hi
import java.io.FileInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Properties;

public class Reflection01 {
    public static void main(String[] args) throws Exception {
        //1.使用Properties类,读写配置文件
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\re.properties"));
        String classfullpath = properties.getProperty("classfullpath");
        String method = properties.getProperty("method");
        System.out.println(classfullpath);
        System.out.println(method);

        //2.传统方法创建对象,行不通 ——>使用反射
        //new classfullpath();因为classfullpath是字符串,不是类的全路径

        //3.使用反射机制解决
        //(1)加载类,得到Class类型的对象aClass
        Class aClass = Class.forName(classfullpath);
        //(2)通过aClass对象得到加载的类 com.hspedu.Cat 的对象实例
        Object o = aClass.newInstance();
        //(3)通过aClass对象得到加载的类 com.hspedu.Cat 的 method 的方法对象
        //   在反射中:可以把方法视为对象
        Method method1 = aClass.getMethod(method);
        //(4)通过 method1 调用方法:即通过方法对象来实现调用方法
        method1.invoke(o);//传统方法:对象.方法()  反射:方法.invoke(对象)

        //得到Cat类的属性,getField不能得到私有属性
        Field age = aClass.getField("age");
        System.out.println(age.get(o));
        //得到Cat类的无参构造器
        Constructor constructor = aClass.getConstructor();//()中可以指定构造器的参数类型
        System.out.println(constructor);
        //得到Cat类的有参构造器
        Constructor constructor1 = aClass.getConstructor(String.class, int.class);
        System.out.println(constructor1);
    }
}
public class Cat {
    private String name = "招财猫";
    public int age = 5;

    public Cat() {
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void hi() {
        //System.out.println("hi" + name);
    }
}

5️⃣反射优点和缺点

优点:可以动态的创建和使用对象(也是框架底层核心),使用灵活,没有反射机制,框架技术就失去底层支撑。
缺点:使用反射基本是解释执行,对执行速度有影响。

6️⃣反射调用优化-关闭访问检查

(1)Method和Field、 Constructor对象都有setAccessible()方法
(2)setAccessible作用是启动和禁用访问安全检查的开关
(3)参数值为true表示反射的对象在使用时取消访问检查,提高反射的效率。参数值为false则表示反射的对象执行访问检查

import com.hspedu.Cat;

import java.lang.reflect.Method;

public class Reflection02 {
    public static void main(String[] args) throws Exception {
        new Reflection02().m1();
        new Reflection02().m2();
        new Reflection02().m3();
    }

    //用传统方法调用hi
    public void m1() {
        Cat cat = new Cat();
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            cat.hi();
        }
        long end = System.currentTimeMillis();
        System.out.println("用传统方法调用hi的时间 = " + (end - start));
    }

    //用反射机制调用hi
    public void m2() throws Exception {
        Class aClass = Class.forName("com.hspedu.Cat");
        Object o = aClass.newInstance();
        Method hi = aClass.getMethod("hi");
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            hi.invoke(o);
        }
        long end = System.currentTimeMillis();
        System.out.println("用反射机制调用hi的时间 = " + (end - start));
    }

    //反射调用优化,关闭访问安全检查
    public void m3() throws Exception {
        Class aClass = Class.forName("com.hspedu.Cat");
        Object o = aClass.newInstance();
        Method hi = aClass.getMethod("hi");
        hi.setAccessible(true);
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            hi.invoke(o);
        }
        long end = System.currentTimeMillis();
        System.out.println("用反射机制调用hi的时间 = " + (end - start));
    }
}

用传统方法调用hi的时间 = 4
用反射机制调用hi的时间 = 71
用反射机制调用hi的时间 = 31

🥩三、Class 类

1️⃣基本介绍

(1) Class也是类,因此也继承object类
在这里插入图片描述
(2) Class类对象不是new出来的,而是系统创建的
底层中ClassLoader 类中的loadClass方法创建Class类对象

public Class<?> loadClass(String name) throws ClassNotFoundException {
	return loadClass(name, false);
}

(3) 对于某个类的Class类对象, 在内存中只有一份,因为类只加载一次

Class cls1 = Class.forName("com.hspedu.Cat");
Class cls2 = Class.forName("com.hspedu.Cat");
System.out.println(cls1.hashCode());
System.out.println(cls2.hashCode());

cls1.hashCode() = cls2.hashCode(),说明cls1和cls2是同一个对象。
(4) 每个类的实例都会记得自己是由哪个Class实例所生成
可以通过实例名.getClass()得到其运行类型。
(5) 通过Class对象可以完整地得到一个类的完整结构,通过一系列API
(6) Class对象是存放在堆的
(7) 类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据(包括 方法代码,变量名,方法名,访问权限等等)

2️⃣Class类的常用方法

方法名功能说明
static Class forName(String name)返回指定类名name的Class对象
Object newInstance()返回该Class对象的一个实例
getName()返回此Class对象所表示的实体(类、接口、数组类、基本类型等)名称
Class[ ] getInterfaces()获取当前Class对象的接口
ClassLoader getClassLoader()返回该类的类加载器
Class getSuperclass()返回表示此Class所表示的实体的超类的Class
Constructor[ ] getConstructors()返回一个包含某些Constructor对象的数组
Field[ ] getDeclaredFields()返回Field对象的一个数组
Method getMethod(String name.Class … naramTypes)返回一个Method对象,此对象的形参类型为paramType

3️⃣应用实例

import com.hspedu.Car;

import java.lang.reflect.Field;

public class Class02 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        String classAllPath = "com.hspedu.Car";
        //1.获取到Car类对应的Class对象
        Class aClass = Class.forName(classAllPath);
        //2.输出aClass对象,可以显示是那个类的Class对象
        System.out.println(aClass);
        //也可以得到aClass对象的运行类型
        System.out.println(aClass.getClass());
        //3.获得包名
        System.out.println(aClass.getPackage().getName());
        //4.获得全类名
        System.out.println(aClass.getName());
        //5.通过aClass创建对象实例
        Car car = (Car) aClass.newInstance();
        System.out.println(car);
        //6.通过反射获取属性brand
        Field brand = aClass.getField("brand");
        System.out.println(brand.get(car));
        //7.通过反射给属性赋值
        brand.set(car, "奔驰");
        System.out.println(brand.get(car));
        //8.遍历Car类的属性
        Field[] fields = aClass.getFields();
        for (int i = 0; i < fields.length; i++) {
            System.out.println(fields[i].get(car));
            System.out.println(fields[i].getName());
        }
    }
}
public class Car {
    public String brand = "宝马";
    public int price = 500000;
    public String color = "白色";

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                '}';
    }
}

🍠四、获取 Class 类对象

1️⃣编译阶段

前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException, 实例: Class cls1 =Class.forName( “java.lang.Cat” );
应用场景:多用于配置文件,读取类全路径,加载类.

2️⃣类加载阶段

前提:若已知具体的类,通过类的class获取,该方式最为安全可靠,程序性能最高实例: Class cls2 = Cat.class;
应用场景:多用于参数传递,比如通过反射得到对应构造器对象.

3️⃣运行阶段

前提:已知某个类的实例,调用该实例的getClass(方法获取Class对象,实例:Class clazz =对象.getClass);//运行类型
应用场景:通过创建好的对象,获取Class对象.

4️⃣通过类加载器获取类的Class对象

ClassLoader cl =对象.getClass().getClassLoader();
Class clazz4 = cl.loadClass("类的全类名”);

5️⃣基本数据类型

(int, char,boolean,float,double,byte,long,short)按如下方式得到Class类对象
Class cls =基本数据类型.class

6️⃣基本数据类型对应的包装类

可以通过.TYPE得到Class类对象
Class cls =包装类.TYPE

import com.hspedu.Car;

public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
        //1.Class.forName,编译阶段
        String classAllPath = "com.hspedu.Car";
        Class<?> aClass = Class.forName(classAllPath);
        System.out.println(aClass);
        //2.类名.class,类加载阶段
        Class<Car> carClass = Car.class;
        System.out.println(carClass);
        //3.对象名.getClass(),运行阶段
        Car car = new Car();
        Class<? extends Car> aClass1 = car.getClass();
        System.out.println(aClass1);
        //4.通过类加载器获取类的Class对象
        ClassLoader classLoader = Car.class.getClassLoader();
        Class<?> aClass2 = classLoader.loadClass(classAllPath);
        System.out.println(aClass2);
        //5.基本数据类型用.class,得到Class类对象
        Class<Integer> integerClass = int.class;
        Class<Character> characterClass = char.class;
        System.out.println(integerClass);
        //6.包装类用.TYPE,得到Class类对象
        Class<Integer> type = Integer.TYPE;
        Class<Character> type1 = Character.TYPE;
        System.out.println(type);
        System.out.println(integerClass.hashCode());
        System.out.println(type.hashCode());
    }
}

运行结果:

class com.hspedu.Car
class com.hspedu.Car
class com.hspedu.Car
class com.hspedu.Car
int
int
2101973421
2101973421

🥟五、哪些类型有Class对象

1、外部类, 成员内部类, 静态内部类,局部内部类,匿名内部类
2、interface: 接口
3、数组
4、enum: 枚举
5、annotation :注解
6、基本数据类型
7、void

import java.io.Serializable;

public class AllTypeClass {
    public static void main(String[] args) {
        Class<String> stringClass = String.class;//外部类
        Class<Serializable> serializableClass = Serializable.class;//接口
        Class<Integer[]> aClass = Integer[].class;//数组
        Class<float[][]> aClass1 = float[][].class;//二维数组
        Class<Deprecated> deprecatedClass = Deprecated.class;//注解
        Class<Thread.State> stateClass = Thread.State.class;//枚举
        Class<Long> longClass = long.class;//基本数据类型
        Class<Void> voidClass = void.class;//void
        Class<Class> classClass = Class.class;//Class类
        System.out.println(stringClass);
        System.out.println(serializableClass);
        System.out.println(aClass);
        System.out.println(aClass1);
        System.out.println(deprecatedClass);
        System.out.println(stateClass);
        System.out.println(longClass);
        System.out.println(voidClass);
        System.out.println(classClass);
    }
}

运行结果:

class java.lang.String
interface java.io.Serializable
class [Ljava.lang.Integer;
class [[F
interface java.lang.Deprecated
class java.lang.Thread$State
long
void
class java.lang.Class
激光可燃气体传感器:核心技术环节分析 激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字) 阅读详情

相关推荐

Ubuntu18.04黑屏救急指南:从tty到图形界面的5种恢复方法(附网络配置技巧)

本文针对Ubuntu 18.04系统启动后出现黑屏并进入tty命令行的问题,提供了一套从紧急诊断到完全恢复图形化界面的系统性实战指南。文章详细讲解了五种核心恢复方法,包括重启显示管理器、重装ubuntu-desktop桌面环境、手动安装Xorg与LightDM等,并重点解决了纯命令行环境下的网络配置难题,帮助用户快速修复系统,恢复工作环境。

weixin_29243279的博客 359

Java反射知识点总结

弱水三千、先干为敬 249

安捷伦示波器实战指南:从基础操作到精准触发

本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。

weixin_30839881的博客 135

JAVA之反射知识点整理

JAVA之反射知识点整理概念好处反射机制的含义及其功能处理流程图反射相关APIClass类获取class对象的方式注意演示class对象功能 概念 将类的各个组成部分封装成其他对象,这就是反射机制 好处 在程序运行过程中操作这些对象 可以解耦,提高程序的可扩展性 反射机制的含义及其功能 含义: 反射是被视为动态语言的关键,反射机制能够让程序在执行期间借助Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性和方法 功能: 在运行时判断任意一个对象所属的类 在运行时构造任

m0_53157173的博客 2500

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 520

AI Agent Harness Engineering 开发效率工具:Prompt工程、调试与监控平台

随着AI Agent技术从原型探索走向企业级落地,开发者普遍面临Prompt迭代无版本管控、Agent执行黑盒无法定位错误、上线后无监控导致故障频发、多团队协作效率低下四大核心痛点,据2024年LLMOps行业报告显示,没有配套工具链的Agent开发团队平均迭代周期是有工具链团队的6倍,线上故障率高达23%,平均资源浪费超过60%。

小白菜的博客 425

java反射之基础知识点

(自学笔记,持续更新,欢迎指正)java的每个类被编译成.class文件的时候,java虚拟机(也叫做JVM)会自动为这个类生成一个类对象,这个对象保存了这个类的所有信息(成员变量,方法,构造器,注解,方法参数列表等),以后这个类要想实例化(也就是创建类的实例或创建类的对象)那么都要以这个class对象为蓝图(或模版)来创建这个类的实例,注意,Class只能有一个对象,是单例的。在此我们也可以这么...

zhiyuti0057的博客 426

汽车IVI中控开发入门及进阶(三十八):手机投屏HiCar开发

为了兼容这部分手机,车机端在向手机端发送USB控制命令字的同时,需要启动mDNS Server,广播车机端IP地址和HiCar SDK侦听的Server Socket端口(IP地址和端口在HiCar SDK初始化USB driver时,告知车机),在检测到手机断开USB连接时关闭mDNS Server。厂商在集成HiCar SDK开发HMI应用时,不可避免会使用到智能座舱的敏感权限,例如位置权限、摄像头权限、麦克风权限等,SDK初始化时,厂商HMI应用需要设置必要的车机参数供SDK使用。

码农17年的博客 1075

Java反射机制知识点总结

Java反射机制知识点总结

m0_73365731的博客 903

PY32F406K1CU6 FLASH模拟EEPROM

摘要:本文介绍了基于STM32 FLASH模拟EEPROM的实现方法。头文件flash.h定义了FLASH页大小(256字节)、用户存储区域(4页)及地址范围,提供了等待周期配置和地址校验宏,声明了EEPROM初始化、读写操作等函数接口。源文件flash.c实现了具体功能:配置FLASH等待周期(144MHz需3WS)、页读写擦除操作,以及EEPROM初始化(解锁-擦除-验证-锁定)和缓冲区读写功能。其中写操作采用"读页→更新→擦除→编程"的流程,确保数据安全写入。该方案适用于需要非易失

sam的博客 194

harbor x509: certificate signed by unknown authority【20251222】

本教程通过「合并证书链(服务器端)+ 预置根 CA(客户端)」彻底解决了自签名证书的 x509 错误,同时集成了 Trivy 漏洞扫描,实现了 Harbor 从搭建到实用的全流程。证书链合并是服务器端的关键,确保客户端获取完整信任路径;客户端需同时配置「系统信任库 + Docker 信任目录」,避免 Docker 独立信任机制导致的问题;所有 IP 需保持一致(Harbor 配置、证书绑定、客户端访问),是避免错误的基础。

老韩的Linux云计算架构师进阶之路 681

java map 泛型 反射_Java知识点总结(反射-反射操作泛型)

Java知识点总结(反射-反射操作泛型)@(Java知识点总结)[Java, 反射]Java采用泛型擦除的机制来引入泛型。Java中的泛型仅仅是给编译器javac使用的, 确保数据的安全性和免去强制类型转换的麻烦 。但是,__一旦编译完成,所有的和泛型有关的类型全部擦除__。为了通过反射操作这些类型以迎合实际开发的需要,Java就新增了ParameterizedType,GenericArrayT...

weixin_32521765的博客 152

Python全栈入门到实战【基础篇 04】核心基础:变量与4种基础数据类型(int/float/str/bool)

本文介绍了Python编程中的变量和四种基础数据类型,作为后续所有语法的入门前提。变量是数据的“容器”,解决数据复用问题,而数据类型决定数据能进行的操作。文章详细讲解了变量的定义语法、命名规则(强制语法和推荐风格)、赋值与修改原理,并通过实操示例展示其应用场景。正确使用变量可以提升代码复用性、简化修改并增强可读性,是编程效率的核心原则。掌握这些基础知识能避免90%的新手语法错误,为学习更复杂的Python语法打下坚实基础。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4314

java反射知识点小结

参考代码:https://github.com/ZhangXiaoixiang/reflectdemo 说明:收集的网上资料,自己整理收集 视频教程(腾讯课堂): https://ke.qq.com/webcourse/index.html#cid=298879&term_id=100354189&taid=2094161629319039&vid=t1426y3hmo...

长草颜团子 19万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java基础知识点整理(八)泛型、反射、注解

简单的整理一下知识点,可能会有错误,仅供参考 软件:XMind2020

CS技术栈 265

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JAVA反射知识点总结

反射原理讲解

Sakura_syh的博客 684

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java反射的基本知识点

反射在某些场景下非常有用,比如在框架开发、动态代理、插件机制等场景中。

godsix886的博客 552

JAVA 反射知识点总汇

从代码角度,关于反射的用法总结 一、概念 1.1 概念 简单说,JAVA反射机制是指在运行态可直接操作任意类或对象的所有属性和方法的功能,无论他是私有还是public。 1.2 反射的用途 在运行时获取任意对象所属的类 Class<?> clazz = Class.forName(String className); 在运行时构造任意类的对象 Object obj = clazz.newInstance(); 在运行时获取任意类所具有的成员变量和方法 field.set(Object ob.

LoveSummer 1724

java中的反射知识点

一、背景 1.首先我们得知道反射是什么东西、它的使用原理是什么、它有什么实际的用处、解决完这一系列的为什么我觉着大家应该就差不多明白了这到底是个什么玩意儿。下面我就来详细的讲讲反射这个东西,希望能帮助你们加深对它的理解。 二、反射是什么 1.JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息...

码农小默 386

java中反射知识点总结

1 package Demo; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.InvocationTargetException; 6 import java.lang.reflect.Me...

deng0004的博客 173

java反射知识点总结

NewBeeMu的博客 429

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

【Java基础-java反射】Java反射知识点(有这一篇就够了)文章目录1、反射的概述1.1 什么是反射例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。 (其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述) 如图是类的正常加载过程:反射的原理在与class对象。 熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。 2 查看Class类在java中的api详解(1.7的AP

a25847a的博客 1055

【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反射知识点笔记

1. Class对象 类是程序的一部分,每个类都有一个Class对象,而反射所依赖的就是这个Class对象。 在JVM中,类都是动态加载的,当程序创建第一个对类的静态成员的引用时,就会加载这个类,这个可以证明构造函数也是类的静态方法,即使构造方法没有使用static关键字。 类加载器首先检查在这个类的Class对象是否已经加载,如果尚未加载,默认的类加载器就会根据类名查找 .class 文件,这个...

stdio_54456153的博客 193

Java反射知识点整理

一、什么是反射 JAVA反射机制,就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法(public、protected、private);对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 1. 反射机制的功能   Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法...

IT哒哒的博客 375
上一篇: 【软考】-- 操作系统(下)
下一篇: 年终反思 -- 系统学习心理学之后对学习生活的感悟【再见2022,你好2023】
邱崇源
博客等级 码龄8年 362粉丝 43原创
评论 46
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱崇源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值