java 反射

简介: 一: 反射的定义:在运行期载入,探知和使用编译期完全未知的类。 1 查看类信息 反射机制里一个特点就是实例化Class对象,因为任意一个类对象都是Class的实例...那么如何实例化Class对象呢?三种方法: 常用的;  1:  Class c = Class.

一:

反射的定义:在运行期载入,探知和使用编译期完全未知的类。

1 查看类信息

反射机制里一个特点就是实例化Class对象,因为任意一个类对象都是Class的实例...那么如何实例化Class对象呢?三种方法:

常用的;

 1:  Class c = Class.forName("全限定类名");

全限定类名:包名.类名

2:对象.getClass();

3:类.class;

 

在Class类中 有三个常用的类Field,Method,Constructor类

得到的是Class类public的的属性,方法,构造器:getFields(),getMethods(),getConstructors().

得到的是Class所包含的类的所有属性,方法,构造器:getDeclaredFields(),getDeclaredMethods(),getDeclaredConstructors().

2 创建对象

eg:

a           : Object object = c.newInstance();//调用无参构造器创建对象

b           :通过getConstructor()方法得到指定的构造器,再用指定的构造器创建对象的实例

eg:  Constructor cons = c.getConstructor(Class<?>...parameterType); 参数列表

        Object object = cons.newInstance(传入实参);

3 调用方法

首先导入  import java.lang.reflect.Method;

eg:         Method method = c.getMethod(String name,Class<?>... parameterTypes);

        method.invoke(Object  obj,Object ...args);// 调用底层方法对象,用于方法调用的参数

4 获取字段

首先导入  import java.lang.reflect.Field;

eg:     Field[] field = c.getDeclaredFields(); 

            for (Field fi : field) {//遍历

                  System.out.println(fi);
}

 

5  获取方法   访问修饰符  返回类型  方法名 (参数类型)

首先导入           import java.lang.reflect.Method;

                import java.lang.reflect.Modifier;

             

  eg:       

Method[] methods = c.getDeclaredMethods();
             for (Method method : methods) {
         System.out.print(Modifier.toString(method.getModifiers()) + " "+ method.getReturnType().getCanonicalName() + " "+ method.getName() + "(");

                             //method.getModifiers()这个返回的int,所有用Modifier.toString转换成字符串类型的
            Class[] types = method.getParameterTypes();
                           int len = types.length;
                        for (int i = 0; i < len; i++) {
                          System.out.print(types[i].getName());
                            if (i != len - 1)
                         System.out.print(",");
                               }
                         System.out.println(")");
                 }

6 获取构造器

首先要导入  import java.lang.reflect.Constructor;

 其实与获取方法的差不多。

  Constructor[] constructor = c.getDeclaredConstructors();

二:垃圾回收 

三:类加载器

  主要包括: 根类加载器(核心Java类)    ;   扩展加载器(Javax);         系统加载器(运行时加载);

类加载的过程: 加载  连接(验证,准备,解析)  初始化

四:如果你写了一些方法,没有导入包的话,就会报错(这是一定的),当你把鼠标移到错误的地方,就会显示一个框,然后点击你所需要的包就可以了。


 

相关文章
|
6天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
12天前
|
Java 程序员 编译器
Java的反射技术reflect
Java的反射技术允许程序在运行时动态加载和操作类,基于字节码文件构建中间语言代码,进而生成机器码在JVM上执行,实现了“一次编译,到处运行”。此技术虽需更多运行时间,但广泛应用于Spring框架的持续集成、动态配置及三大特性(IOC、DI、AOP)中,支持企业级应用的迭代升级和灵活配置管理,适用于集群部署与数据同步场景。
|
2月前
|
安全 Java 测试技术
day26:Java零基础 - 反射
【7月更文挑战第26天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 5
|
30天前
|
缓存 安全 Java
【Java 第十篇章】反射
Java 反射技术让程序能在运行时动态获取类信息并操作对象,极大提升了灵活性与扩展性。本文将介绍反射的基本概念、原理及应用,包括如何使用 `Class`、`Field`、`Method` 和 `Constructor` 类进行动态操作。此外,还将探讨反射在动态加载、框架开发与代码测试中的应用场景,并提醒开发者注意性能与安全方面的问题,帮助你更合理地运用这一强大工具。
14 0
|
2月前
|
IDE Java 测试技术
Java进阶之反射
【7月更文挑战第14天】Java反射机制允许在运行时动态获取类信息、创建对象及调用其方法。它基于`Class`类,让我们能访问类的属性、方法、构造器。例如,通过`Class.forName()`加载类,`Class.newInstance()`创建对象,`Method.invoke()`执行方法。反射广泛应用于动态代理、单元测试、序列化及框架中,提供灵活性但牺牲了性能,且可破坏封装性。IDE的代码补全也是反射的应用之一。在使用时需谨慎,避免对私有成员的不当访问。
28 1
|
2月前
|
Java 程序员 测试技术
解析Java中的反射机制及其应用场景
解析Java中的反射机制及其应用场景
|
2月前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
2月前
|
缓存 Java 测试技术
Java中的反射机制及其应用场景
Java中的反射机制及其应用场景
|
2月前
|
Java
Java中的反射与动态代理机制详解
Java中的反射与动态代理机制详解
|
2月前
|
存储 安全 Java
Java中的反射机制及其应用场景详解
Java中的反射机制及其应用场景详解