96SEO 2026-02-20 10:38 11
Class.forName(反射是java被视为java动态语言的关键反射机制允许程序在执行期间借助于Reflection

API获取任何类的内部信息并能直接操作任意对象的内部属性及方法。
Class.forName(java.lang.String);加载完类之后在堆内存的方法区中就会产生一个Class类型的对象一个类只有一个Class对象
这个对象就包含了完整的类的结构信息。
我们可以通过这个对象看到类的结构。
对象只能由系统建立对象一个加载的类在JVM中只有一个Class实例一个Class对象对应的是一个加载到JVM中的一个.class文件每个类的实例都会记得自己是由哪个Class实例所生成通过Class可以完整地得到一个类中所有被加载的结构Class类是Reflection的根源争对任何你想动态加载、运行的类唯有先获得相应的Class对象。
newInstance()调用缺省构造函数返回Class对象的一个实例getName()返回此Class对象所表示的实体(类接口数组类或void)的名称。
Class
getSuperClass()返回当前Class对象的父类的Class对象返回当前类对象的父类的类对象Class[]
getinterfaces()获取当前Class对象的接口ClassLoader
getClassLoader()返回该类的类加载器Constructor[]
getConstructors()返回一个包含某些Constructor对象的数组Method
T)返回一个Method对象此对象的形参类型为paramTypeField[]
getDeclaredFields()返回Filed对象的一个数组
a.若已知具体的类对象通过类的class属性获取该方法最为安全可靠程序性能高
Person.class;b.已知某个类的实例调用该实例的getClass()方法获取Class对象
person.getClass();c.已知一个类的全类名且该类在路径下可通过Class类的静态方法forName()获取
Class.forName(demo.Student);d.内置基本数据类型可以直接用类名.Type
class外部类、成员成员内部类、静态内部类局部内部类、匿名内部类。
interface接口[]数组enum枚举annotation注解interfaceprimitive
存放new的对象和数组可以被所有的线程共享不会存放别的对象引用
存放基本变量类型会包含这个基本类型的具体数值引用对象的变量会存放这个引用在堆里面的具体地址
当程序主动使用某个类时如果该类还没有被加载到内存中则系统会通过如下三个步骤对类进行初始化。
类的加载Load类的链接Link类的初始化initialize
将类的class文件读入内存并为之建立一个java.lang.Class对象。
此过程由类加载器完成。
2准备正式为类变量static分配内存并设置类变量默认初始值的阶段这些内存都将在方法中进行分配。
1执行类构造器clinit()方法的过程。
类构造器clinit()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。
(类构造器是构造类信息的不是构造该类对象的构造器)。
2当初始化一个类的时候如果发现其父类还没有进行初始化则需要先触发其父类的初始化。
3虚拟机会保证一个类的clinit()方法在多线程环境中被正确加锁和同步。
1当访问一个静态域时只有真正声明这个域的类才会初始化。
如当通过子类引用父类的静态变量不会导致子类初始化。
3引用常量不会触发此类的初始化常量在链接阶段就存入调用类的常量池中了
{System.out.println(Main类被加载);}public
Class.forName(org.example.reflection.Son);///**
**类加载的作用:**将class文件字节码内容加载到内存中并将这些静态数据转换成方法区的运行时数据结构然后在堆中生成一个代表这个类的java.lang.Class对象作为方法区中类数据的访问入口。
**类缓存:**标准的JavaSE类加载器可以按要求查找类但一旦某个类被加载到类加载器中它将维持加载缓存)一段时间。
不过JVM垃圾回收机制可以回收这些Class对象。
类加载器作用是用来把类class装载进内存的。
JVM规范了定义了如下类型的类的加载器。
引导类加载器用C编写的是JVM自带的类加载器负责Java平台核心库用来装载核心类库。
该加载器无法直接获取。
扩展类加载器负责jre/lib/ext下的jar包装入工作库。
-classpath或-Djava.class.path所指的目录下的类与jar包装入工作是最常用的加载器
ClassLoader.getSystemClassLoader();System.out.println(系统类的加载器
获取系统类的加载器的父类加载器-扩展类加载器ClassLoader
systemClassLoader.getParent();System.out.println(扩展类加载器
获取系扩展类加载器的父类加载器-根加载器c/cClassLoader
parent.getParent();System.out.println(根加载器
Class.forName(org.example.reflection.Test7).getClassLoader();System.out.println(org.example.reflection.Test7
Class.forName(java.lang.Object).getClassLoader();System.out.println(java.lang.Object
System.getProperty(java.class.path);String[]
property.split(;);System.out.println(Arrays.toString(split));
sun.misc.Launcher$AppClassLoader18b4aac2
sun.misc.Launcher$ExtClassLoader1b6d3586
sun.misc.Launcher$AppClassLoader18b4aac2
[E:\Java\jdk1.8.0_191\jre\lib\charsets.jar,
E:\Java\jdk1.8.0_191\jre\lib\deploy.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\access-bridge-64.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\cldrdata.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\dnsns.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\jaccess.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\jfxrt.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\localedata.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\nashorn.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\sunec.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\sunjce_provider.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\sunmscapi.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\sunpkcs11.jar,
E:\Java\jdk1.8.0_191\jre\lib\ext\zipfs.jar,
E:\Java\jdk1.8.0_191\jre\lib\javaws.jar,
E:\Java\jdk1.8.0_191\jre\lib\jce.jar,
E:\Java\jdk1.8.0_191\jre\lib\jfr.jar,
E:\Java\jdk1.8.0_191\jre\lib\jfxswt.jar,
E:\Java\jdk1.8.0_191\jre\lib\jsse.jar,
E:\Java\jdk1.8.0_191\jre\lib\management-agent.jar,
E:\Java\jdk1.8.0_191\jre\lib\plugin.jar,
E:\Java\jdk1.8.0_191\jre\lib\resources.jar,
E:\Java\jdk1.8.0_191\jre\lib\rt.jar,
E:\IdeaProjects\java-demo-parent\basics\target\classes,
Class.forName(org.example.reflection.User);1调用无参构造器
c1.getDeclaredConstructor(String.class,
Object对应原方法的返回值若原方法无返回值此时返回null若原方法为静态方法此时形参Object
args为null若原方法声明为private,则需要在调用此invoke()方法前显式调用方法对象的setAccessible(true)方法将可访问private的方法。
Method、Field、Constructor对象都有setAccessible()取消检查、提高反射效率
无法操作私有属性关闭安全检测setAccessible(true)
王二);如果没有设置会报异常IllegalAccessException:
Filed字段、Method方法、Constructor构造、Superclass父类、Interface接口、Annotation注解
Class.forName(org.example.reflection.User);
System.out.println(getDeclaredMethods);
c1.getDeclaredConstructor(String.class,
org.example.reflection.User.name
org.example.reflection.User.toString()
org.example.reflection.User.getName()
org.example.reflection.User.getId()
org.example.reflection.User.setName(java.lang.String)
org.example.reflection.User.setId(int)
java.lang.Object.wait(long,int)
java.lang.Object.equals(java.lang.Object)
org.example.reflection.User.toString()
org.example.reflection.User.getName()
org.example.reflection.User.getId()
org.example.reflection.User.setName(java.lang.String)
org.example.reflection.User.setId(int)
org.example.reflection.User.getName()
org.example.reflection.User.setName(java.lang.String)
org.example.reflection.User(java.lang.String,int)
org.example.reflection.User(java.lang.String,int)
Java采用泛型擦除的机制来引入泛型Java中的泛型仅仅是给编译器javac使用的确保数据安全性和免去强制类型转换问题但是一旦编译完成所有和泛型有关的类型全部擦除。
为了通过反射操作这些类型Java新增了ParameterizedType
TypeVariable和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型.
ParameterizedType:表示一种参数化类型,比如CollectionString
GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型
{System.out.println(test01);}public
{System.out.println(test02);return
参数泛型System.out.println(参数泛型);Method
test01.getGenericParameterTypes();for
{System.out.println(genericExceptionTypes
t).getActualTypeArguments();for
{System.out.println(actualTypeArguments
返回值泛型System.out.println(返回值泛型);Method
Test11.class.getMethod(test02);Type
test02.getGenericReturnType();System.out.println(genericReturnType
genericReturnType).getActualTypeArguments();for
{System.out.println(actualTypeArguments
java.util.Listorg.example.reflection.User
Retention(RetentionPolicy.RUNTIME)
Retention(RetentionPolicy.RUNTIME)
student.getClass().getAnnotation(TableName.class);System.out.println(类注解值
student.getClass().getDeclaredFields();for
field.getAnnotation(Column.class);System.out.println(属性
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback