- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
常见的三种类加载方式如下:
TransactionMain transactionMain = new TransactionMain();
Class<?> aClass = Class.forName(TransactionMain.class.getName());
ClassLoader.getSystemClassLoader().loadClass(TransactionMain.class.getName());
那么下面抛出问题: 这三种加载方式有什么不同?
要回答上面这个问题,我们先来看看一个java.class文件从磁盘被加载到内存要经历那些步骤吧。
加载阶段就是将class文件从磁盘加载到内存中,并生成该class文件对应的class对象
连接阶段包含三个小步骤:
验证: 确保Class文件的字节流中包含的信息符合Java虚拟机规范,进行文件格式,元数据,字节码和符号引用验证等
准备: 为类中的静态变量分配内存并设置为当前数据类型的零值,例如: static int a=10 ,但是这里只会赋予零值,即a=0
解析: 将常量池内的符号引用替换为直接引用
初始化: 执行类构造器中的代码,这里类构造器client方法是编译器自动收集类中的所有静态变量的赋值动作和静态语句块中的语句合并而成的,在这里a会被赋值为10。
还有一点: 前两种方式都是静态加载,而最后一种方式是动态加载
new关键字和newInstance()方法的区别:
newInstance:弱类型,低效率,只能调用无参构造;
new:强类型,相对高效,能调用任何Public构造。
Class的装载包括3个步骤:加载(loading),连接(link),初始化(initialize)。上面也已经讲过一遍了。
Class.forName(className)
实际上是调用Class.forName(className, true, this.getClass().getClassLoader())
。
第二个参数,是指Class被loading后是不是必须被初始化。
ClassLoader.loadClass(className)
实际上调用的是ClassLoader.loadClass(name, false)
。
第二个参数指Class是否被link
Class.forName(className)装载的class已经被初始化,而ClassLoader.loadClass(className)装载的class还没有被link。
一般情况下,这两个方法效果一样,都能装载Class。但如果程序依赖于Class是否被初始化,就必须用Class.forName(name)了。
例如,在JDBC编程中,常看到这样的用法:
Class.forName(“com.mysql.jdbc.Driver”)
如果换成了下面这样就不行了
getClass().getClassLoader().loadClass(“com.mysql.jdbc.Driver”)
因为Driver的静态代码块中需要在初始化的时候被执行,这样才可以向DriverManager去注册自己
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
目前我将所有骨骼存储在世界空间中并直接从二进制文件加载它们。 我通过放置一个“箭头对象”来检查这个骨架,其中矩阵 bone_mat 作为“modelmatrix”。按预期工作。 Variable ex
我有一个 3d 点的 3x3 协方差矩阵,我想知道等效的 2d 协方差(对于图像平面中的 u,v),给定图像位姿 [Xc,Yc,Zc,q0,q1, q2,q3] , 3d 协方差可以是一个 3d 椭圆
我正在尝试将自定义 3D 模型格式导出到 Collada。我已经通过 XSD 构建了 Collada 数据类,现在当我尝试用数据填充它们时出现问题,特别是对于矩阵相关的问题。 我的 Skeleton
我实现了一个带有软件皮肤的 MD5 Loader。 md5 中的绑定(bind)姿势是最终的、绝对位置和旋转,您只需要计算与关节相关的权重。 我试图实现 GPU 蒙皮,但我被困在了一个点上。由于这些坐
当物体在场景中移动时如何计算 3D 姿态,我使用 SURF 跟踪场景中的物体并且该物体的初始 3D 姿态是已知的。我所知道的是,一旦我使用 SURF,两个连续帧之间的 2D 对应关系就知道了,因此通过
我正在寻求图像处理/计算机视觉专家的建议。尝试开发一种强大的、可缩放的算法来提取人体的尺寸。例如,他的上半身宽度。 问题: 没有面孔的图像 坐着的人 多个面孔 人拿着某物,从而覆盖了他的 body 的
我是一名优秀的程序员,十分优秀!