- 浏览: 796801 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (981)
- javascript (102)
- java (212)
- JQuery (81)
- 幽默笑话 (2)
- 只言片语 (6)
- 开发小记 (283)
- Hibernate (17)
- DWR (4)
- SQL (10)
- spring-ibatis (8)
- linux (24)
- Struts1 (8)
- Struts2 (16)
- spring (42)
- Mybatis (16)
- css (18)
- servlet (8)
- jdbc (4)
- jsp (1)
- spring-jdbc (2)
- FreeMarker (2)
- MySQL (24)
- JQuery-Grid (7)
- jstl (5)
- 正则表达式 (1)
- 面试集锦 (86)
- unix (18)
- 开发工具 (23)
- ajax (5)
- webservice (4)
- log4j (3)
- oracle (15)
- extjs (14)
- 其他 (9)
- 优秀技术参考地址 (1)
- 性能 (3)
- 数据库 (25)
- 算法 (15)
- 设计模式 (10)
- Python (3)
- AIX (5)
- weblogic (1)
- shell (14)
- quartz (5)
- 图形文件FusionCharts (1)
- Websphere (4)
- 转载 (5)
- hadoop (1)
- highchart (24)
- perl (22)
- DB2 (7)
- JBoss (1)
- JQuery Easy UI (9)
- SpringMVC (5)
- ant (5)
- echart (9)
- log4J配置 (3)
- 多线程 (10)
- 系统架构 (7)
- nginx (3)
- loadrunner1 (1)
- 分布式 (1)
- Dubbo (1)
- Redis (2)
- JMS (4)
- 自动化测试 (3)
- Spring循环依赖的三种方式 (1)
- spring-boot (2)
- 高级测试 (9)
- github (2)
- sonar (1)
- docker (6)
- web前端性能优化 (1)
- spring-aop (6)
- rabbit (1)
- ELK (1)
- maven (1)
- minio (1)
最新评论
-
zengshaotao:
jstl1point0 写道很好啊,如果有带Session会话 ...
Nginx+Tomcat搭建高性能负载均衡集群 -
jstl1point0:
很好啊,如果有带Session会话的怎么搞呢
Nginx+Tomcat搭建高性能负载均衡集群
在只有原子层级关系的java代码里,对于静态变量、静态初始化块、变量、初始化块、构造器,他们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>(构造器),对于以上结论,可以通过如下代码来验证:
package initorder;
public class InitOrder {
public static String staticField = "静态变量---属于类";
public String field = "变量";
//静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
//初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
//构造器
public InitOrder(){
System.out.println("构造器");
}
public static void main(String[] args)
{
new InitOrder();
}
}
运行后控制台上出现的代码:
静态变量---属于类
静态初始化块
变量
初始化块
构造器
对于这样的初始化顺序,我们可以这样理解:对于静态域,它是属于类的,而对于一个对象,它的数据类型是类,我们都知道,只有先有数据类型,才有数据类型声明的对象,所以静态域的初始化肯定是先于构造器的(构造器只是初始化对象)。这一逻辑关系搞清之后再来解析变量域与构造器的初始化顺序。对于变量域,首先是专属于对象的,初始化顺序显然是后于静态域的。而当初始化对象的时,必然是先初始化对象的成员(因为整个对象要想初始化,其结构必须先初始化),变量域的初始化顺序先于构造器也就很容易理解了,所以也就有了上述的初始化顺序。
这只是初始化对象的一个方面,也很简单。那么接下来的问题也自然而然的出来了:
对于原子层级关系,静态域(静态变量和静态初始化块)的各个部分顺序又是怎样?对于具有层级关系的上述域的父子类的初始化顺序又是怎么样?
package initorder;
public class InitOrder {
public static String staticField = "静态变量---属于类";
public String field = "变量";
//静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
//初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
//构造器
public InitOrder(){
System.out.println("构造器");
}
public static void main(String[] args)
{
new InitOrder();
}
}
运行后控制台上出现的代码:
静态变量---属于类
静态初始化块
变量
初始化块
构造器
对于这样的初始化顺序,我们可以这样理解:对于静态域,它是属于类的,而对于一个对象,它的数据类型是类,我们都知道,只有先有数据类型,才有数据类型声明的对象,所以静态域的初始化肯定是先于构造器的(构造器只是初始化对象)。这一逻辑关系搞清之后再来解析变量域与构造器的初始化顺序。对于变量域,首先是专属于对象的,初始化顺序显然是后于静态域的。而当初始化对象的时,必然是先初始化对象的成员(因为整个对象要想初始化,其结构必须先初始化),变量域的初始化顺序先于构造器也就很容易理解了,所以也就有了上述的初始化顺序。
这只是初始化对象的一个方面,也很简单。那么接下来的问题也自然而然的出来了:
对于原子层级关系,静态域(静态变量和静态初始化块)的各个部分顺序又是怎样?对于具有层级关系的上述域的父子类的初始化顺序又是怎么样?
发表评论
-
选股神器
2022-08-20 15:07 241最近闲来无事,突发奇想,将自己的选股思路自动化,计算机化。。 ... -
rpm安装jdk,设置环境变量
2019-05-12 22:49 6451、将jdk的rpm包拷贝到 ... -
java安全编码
2019-01-18 22:31 490软件安全问题,一般 ... -
生产者消费者
2018-07-01 21:33 435package function.thread; i ... -
打印mybatis的执行语句到控制台和文件
2017-12-13 15:11 822log4j.rootLogger=INFO,CONSOLE, ... -
java中类的加载顺序介绍(ClassLoader)
2017-11-14 11:41 8291、ClassNotFoundExcetpion 我们在 ... -
守护线程
2017-11-13 16:40 442对于线程,有个守护的线程的概念。如何理解呢?比如A线程里,n ... -
类加载机制及反射
2017-09-24 08:45 596一、Java类加载机制 ... -
java+selenium2 自动化测试框架
2017-09-15 09:36 1029package web.selenium2; ... -
JMS实例
2017-08-21 15:40 4921. JMS架构 Java 消息服务(Java M ... -
linux设置java环境
2017-08-07 16:47 461linux配置java环境变量(详细) 一. 解压安装jdk ... -
分布式
2017-07-19 12:12 461转载请注明出处:http://blog.csdn.net/l ... -
tomcat+nginx+redis
2017-07-18 16:46 507应用系统的基本架构: -
java调用远程机器的shell脚本
2017-07-14 12:19 1603此程序的目的是执行远程机器上的Shell脚本。 【环境参数 ... -
生产者消费者进阶(带有condition)
2017-05-09 17:56 599package function.thread; ... -
多线程之 CountDownLatch
2017-05-01 13:01 531package function.thread; ... -
判断服务器类型
2017-04-12 10:52 499开发时一般用tomcat,然后在测试环境发布时使用的是web ... -
IE的不同文本浏览模式页面显示
2017-04-11 14:34 551现象描述:最近在遇到的问题就是在在Chrome,火狐页面都正 ... -
java中Filter、Servlet、Listener的学习
2017-03-29 21:52 4651、Filter的功能filter功能,它使用户可以改变一个 ... -
高并发,线程池
2017-03-29 21:52 11111.高并发的内容 Zookee ...
相关推荐
以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...
这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载阶段**: 在Java程序运行时,JVM会先加载类的字节码文件(.class文件)。这个过程包括加载、...
本篇文章将围绕“类继承的初始化顺序”这一主题展开,详细解析初始化过程中涉及的关键概念和技术细节。 ### 类继承的初始化顺序概述 在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会...
总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...
### 初始化顺序解析 #### 静态成员变量与静态初始化块 1. **父类静态成员变量的默认初始化**:首先初始化的是 `BaseClass` 中的静态成员变量 `basename` 的默认值(即 `null`)。这是整个初始化过程的第一步。 2...
Java语言中的类初始化顺序是面试中常见的问题,尤其对于Java程序员和工程师来说,理解这一概念至关重要。本篇文章将深入解析类初始化的顺序以及在继承情况下的表现。 首先,我们需要明确类初始化顺序的基本规则: ...
在Java编程语言中,理解成员变量的初始化顺序对于正确地设计和实现类结构至关重要。通过本实验,我们将深入了解成员变量的初始化顺序,以及如何通过实际代码示例来验证这些概念。 #### 实验步骤解析 ##### 步骤一...
初始化顺序: 1. 首先,JVM会加载类,并解析类的字节码,这个过程中会执行静态初始化,即`<clinit>`方法。 2. 如果类中有静态变量或静态初始化块,它们会按照在源代码中出现的顺序依次执行。 3. 当创建对象时,JVM会...
这种情况下,初始化顺序如下:首先,`Lower`类的实例创建并分配默认值,然后调用`Upper`的构造器,接着执行`Initializer.initialize()`,该方法根据对象的实际类型(`Lower`)来设置字段的值。 5. **默认值**:即使...
总的来说,理解Java中静态变量的初始化顺序对于编写可靠的代码非常重要。开发者应避免依赖这种顺序来初始化变量,因为这可能导致难以预料的行为。在编写代码时,推荐的做法是保持静态变量的初始化尽可能简单,避免...
"Java初始化块及执行过程解析" Java 初始化块是 Java 语言中的一种特殊语法结构,用于对 Java 对象进行初始化操作。初始化块可以分为两种:静态初始化块和普通初始化块。静态初始化块用于对类进行初始化,而普通...
静态变量的初始化顺序按照它们在源代码中的出现顺序进行,而静态块则是在类加载时按顺序执行的。例如,在`JvmTest.java`和`JvmTest1.java`中,如果有静态变量和静态初始化块,它们的执行顺序将体现在`<clinit>`方法...
总结,Java中类的初始化顺序遵循以下规则: 1. 先加载父类,再加载子类。 2. 加载完成后,先初始化静态部分(静态初始化块和静态变量),再初始化实例部分(实例初始化块和构造函数)。 3. 静态部分按照源代码中的...
Java对象初始化顺序是一个重要的编程概念,它涉及到类的继承、构造函数、成员变量初始化和非静态初始化块。在这个示例中,我们通过一个简单的代码片段来验证这些规则。首先,让我们详细解析一下给出的代码: ```...
这个过程是通过 Java 语言规范中定义的初始化顺序来完成的。 在 Java 语言规范中,静态变量的初始化顺序是按照以下顺序进行的: 1. 首先,静态变量的声明顺序决定了其初始化顺序。 2. 静态变量的初始化过程中,...
通过这两个示例,我们可以看到,非静态成员变量的初始化顺序是:成员变量初始化语句>成员变量初始化块>构造函数。 而对于静态成员变量,它们是在类加载时初始化的。例如,我们可以定义一个静态成员变量static ...
这个结果与我们的直觉相悖,其背后的原因在于JVM的初始化顺序。 当类被加载时,JVM会按照如下顺序执行: 1. **类加载**:将类加载到内存中。 2. **连接**:包括验证、准备和解析阶段。 3. **初始化**:在这个阶段...
比如,我们可以通过合理地安排初始化顺序,优化代码结构,避免不必要的资源消耗。此外,对于一些复杂的并发场景,理解初始化过程可以帮助我们预防潜在的线程安全问题。 总的来说,Java字节码的深入研究能够使开发者...
Java类加载初始化的过程是Java编程语言中一个重要的概念,它决定了Java类的加载和初始化顺序。在Java中,类的加载是通过类加载器(ClassLoader)来实现的。类加载器会将类的字节码文件(.class)加载到Java虚拟机...