首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >类加载和初始化

类加载和初始化
EN

Stack Overflow用户
提问于 2017-08-09 10:23:19
回答 2查看 1.2K关注 0票数 0

我正试图理解类加载和初始化时的确切场景。我看到下面这两篇文章给出了不同的答案

爪哇-A类是在中初始化的,类的实例是使用new__()关键字创建的,或者使用使用class.forName()的反射创建的,这可能会在Java中抛出ClassNotFoundException。

爪哇世界-,那么类什么时候加载了__?有两种情况:执行新字节码(例如,FooClass f= new FooClass();)和字节码对类进行静态引用(例如,System.out)。

那么,当我使用新关键字创建类实例时,是加载还是初始化类呢?

另一件关于由于引用变量而导致的加载的问题需要问:

爪哇-Class加载是由Java中的类加载器完成的,它可以在另一个类引用它或延迟加载类时立即加载类,直到出现类初始化的需要为止。

在这里引用是什么意思?他是否暗示如果A类有B类的引用变量,那么B类在A中遇到引用时就会被加载?

但是下面的作者说NotUsed类没有加载,但是我看到ClassInitializationTest类有它的引用

爪哇-

/** * Java类,在此程序中不使用,因此JVM */

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class NotUsed {
 static { System.out.println("NotUsed Class is initialized "); }

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-09 11:28:34

您对javaworld文章感到困惑。虽然有点刺耳,但为了这个答案的目的,让我们说它是错误的,而忽略它。

来自jvm规范

Java虚拟机动态地加载、链接和初始化类和接口。加载是指查找具有特定名称的类或接口类型的二进制表示并从该二进制表示形式创建类或接口的过程。链接是将类或接口合并到Java虚拟机的运行时状态以便能够执行的过程。类或接口的初始化包括执行类或接口初始化方法

从上面突出显示的文本中,您可以确切地看到加载和初始化意味着什么,javaworld将what (错误地)作为它们的组合术语。

来自jls

12.4.1.当初始化发生时 类或接口类型T将在第一次出现以下任何一种情况之前立即初始化:

  • T是一个类,并创建了一个T的实例。
  • 调用由T声明的静态方法。
  • 指定一个由T声明的静态字段。
  • 使用由T声明的静态字段,且该字段不是常量变量(§4.12.4)。
  • T是一个顶级类(§7.6),在T (§8.1.3)中执行一个按词汇嵌套的断言语句(§14.10)。

来自javarevisited的文章:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NotUsed o = null;
..
class NotUsed {
    static { System.out.println("NotUsed Class is initialized"); }
}

声明变量并不是导致初始化的原因之一,因此它没有初始化,"NotUsed Class is initialized"也不会被打印出来。如果要加载NotUsed,则规范没有定义它,使用sun的java 8上的默认ClassLoader,它将不会被加载。

票数 1
EN

Stack Overflow用户

发布于 2017-08-09 11:28:02

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myClass a = new myClass();

正如我所教的,第一部分是初始化,第二部分在"=“之后是加载。

您可以初始化一个类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myClass a;

然后在后面的代码中加载它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = new myClass();

与变量初始化相同。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45598053

复制
相关文章
原来JVM中的堆栈TM这么简单!
二话不说先上图! 好,也许你已经懂了,如果想更懂,请看今天的正文! 以下是正文: 也许你会在网上查询到很多有关栈啊,堆啊的很多内容,或者一些java ee的书上或者一些教程里。但似乎很少有一个对于st
ImportSource
2018/04/03
1.5K0
原来JVM中的堆栈TM这么简单!
Python中的符号
1.算数运算符 2.复合赋值运算符 3.常用的格式符号
py3study
2020/01/10
2.7K0
JSP中的Cookie
Cookie cookie_name =new Cookie("Parameter","Value");
HUC思梦
2020/09/03
2.3K0
jsp中<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” 。。的重要性「建议收藏」
这个句头作用是很大的,如果不加,默认你的html是html4.0的。 而如果加上了<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
全栈程序员站长
2022/09/14
4.9K0
找不到符号javax.servlet.jsp.tagext.BodyTagSupport
java web项目在执行mvn clean install -Dmaven.test.skip=true命令时提示“找不到符号javax.servlet.jsp.tagext.BodyTagSupport”错误,解决这个错误只需要在pom.xml文件增加下面这个依赖即可:
johnhuster的分享
2022/03/29
7140
jQuery中$符号的实质
其实就是一个函数,以后用的时候,记得跟小括号 参数不同,功能就不同。3种用法: 参数是一个function, 入口函数 $(function () { }); $(domobj) 把dom对象转换成jquery对象 $(document).ready(function () { }); 参数是一个字符串,用来找对象 $("div") $("div ul") $(".current") 案例:检测$符号类型 <!DOCTYPE html> <html lang="zh-CN"> <h
兮动人
2021/06/11
3.7K0
jQuery中$符号的实质
Excel中$符号的妙用
Excel 使用过程中,不知道你有没有用到过 $ ,如果从来都没有用到过,可能代表你的修为还不够深,来看看为什么这么说。
披头
2019/12/26
2K0
Linux中符号的用法
用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。
头皮阴都都
2020/04/23
3.4K0
JSP中Session的使用
<%@page contentType=”text/html;charset=GB2312″%> <html> <head> </head> <body> <%String s = session.getId(); //获取session ID号 %> <p>你的session对象ID是:</p> <%=s %> <%! int Num = 0; //定义前面要加!号 synchronized void countPeople() { //同步方法 Num++; } %> <% if (session.isNew()) { //推断是否为新用户 countPeople(); String str = String.valueOf(Num); session.setAttribute(“count”, str); //将str 加入到session对象中 } %> <p> 你是第 <%=(String)session.getAttribute(“count”)%> 个訪问本站的人 </p> <!–将session对象的count值取出–> </body> </html>
全栈程序员站长
2022/07/14
2.7K0
python中的@符号的作用
'@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。也就是说@A def f(): 是非法的。只可以在模块或类定义层内对函数进行修饰,不允许修修饰一个类。一个修饰符就是一个函数,它将被修饰的函数做为参数,并返回修饰后的同名函数或其它可调用的东西。
py3study
2020/01/09
3.7K0
JSP中的JSTL 标签库
JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标 签库。 EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面 变得更佳简洁。
愷龍
2022/09/26
2.5K0
shell脚本中$符号的意义
今天是远程办公的第4天,渐渐的找到了一点在家办公的节奏了,改了几个shell脚本,在改动过程中,发现还有一些知识点需要巩固,这里写出来,加深下印象。
AsiaYe
2020/02/17
4.4K0
shell脚本中$符号的意义
JavaScript中的双符号运算
双波浪号 1 2 3 4 var i = 5.1; var j = 5.5; console.log(~~i); // 5 console.log(~~j); // 5 作用类似Math.floor。 类似的意思是在处理正数的时候,如果处理负数就它俩就不同了: 1 2 3 4 ~~-5.1 // 5 Math.floor(-5.1) // -6 ~~-5.5 // 5 Math.floor(-5.5) // -6 注: Math.ceil(x) Returns the smallest integer
前端黑板报
2018/01/29
1.4K0
JSP 页面中的 路径问题
上面两种写法是相同的,都是指向 webapp 应用程序下的 login.jsp 页面。
wsuo
2020/07/30
8.4K0
JSP 页面中的 路径问题
latex中求和符号正下方的符号怎么打_累加符号上下标的意义
放在左上角的时候 \sum^n: ∑ n \sum^n ∑n 放在正上方的时候 \sum\limits^n: ∑ n \sum\limits^n ∑n​
全栈程序员站长
2022/11/07
4.4K0
JSP中的Servlet及Filter
asp.net中,如果开发人员想自己处理http请求响应,可以利用HttpHandler来满足这一要求;类似的,如果要拦截所有http请求,可以使用HttpMoudle。java的web开发中,也有类似的处理机制,与HttpHandler应对的是HttpServlet,与HttpModule对应的则是Filter。 一、HttpServlet 先看一个简单的示例: 1 package com.cnblogs.yjmyzz.servlet; 2 3 import java.io.IOException
菩提树下的杨过
2018/01/24
2.2K0
shiro中的JSP标签支持
使用之前要在JSP引入<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 不然不生效!
用户9006224
2022/12/21
1.4K0
JSP中获得list的长度
在jsp页面中不能通过${list.size}取列表长度,而是 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> list的长度是:${fn:length(list)}
用户2657851
2020/03/04
2.5K0
JSP中servlet中的路径配置问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/74199694
大黄大黄大黄
2018/09/14
1.9K0
点击加载更多

相似问题

ibm wcs删除"No inventory“

10

IBM WCS扩展java类

22

未通过IBM WCS中的web活动获取URL参数

11

WCS7.0 FrameWork在Jsp中的异常处理

20

WCS电子邮件发送

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文