- 浏览: 344415 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (249)
- 无废话ExtJs 系列教程 (26)
- jQuery (6)
- 钦波工作后的生活 (5)
- 工作/生活闲谈 (16)
- java基础知识 (44)
- java web (14)
- Struts (1)
- hibernate (8)
- Jpa (0)
- spring (1)
- ajax (3)
- java项目 (4)
- database (5)
- java 流行框架 (5)
- 异常处理 (4)
- 无废话Android系统教程 (6)
- 开发IDE (1)
- 亲自答过的java笔试题 (2)
- oa项目 (4)
- [ 民政局3.0系统 ]--知识点总结分析--与具体项目无关 (0)
- [ 黑龙江低保系统 ]--知识点总结分析--与具体项目无关 (2)
- 工作笔试 (1)
- xml (1)
- telecom项目分析 (13)
- swing (0)
- String运用 (2)
- css (1)
- 页面 (1)
- Html5 (2)
- oracle (4)
- 网站 (1)
- django (1)
- python (4)
- 民航数据中心遇到与解决的问题 (1)
- 平时关注的技术或特效 (1)
- Linux 命令 (2)
- 服务器监控工具 (1)
最新评论
-
wwytwen123:
[*]
java类中静态域、块,非静态域、块,构造函数的初始化顺序(回钦波) -
junying280efun:
yingtao.huang@gmail.com仁兄,麻烦你给我 ...
jBPM Web Designer(jBPM Web 设计器、jBPM 流程设计器、工作流程设计器) -
mobeicanglang:
我觉得楼主的例子全部都有错误,题目明明说的是try{}语句中有 ...
try return finally -
ashy1q:
楼主最后那段代码重复了,写了两遍。知识很详细,很基础,学习了。 ...
java类中静态域、块,非静态域、块,构造函数的初始化顺序(回钦波) -
185552143:
你好!
为什么我这样写p${m.id},会报错的?
能我帮我解 ...
Session问题
java类中静态域、块,非静态域、块,构造函数的初始化顺序2
面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果。这实际上是在考查我们对于继承情况下类的初始化顺序的了解。 我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:
这与上文中说的完全符合。那么对于继承情况下又会怎样呢?我们仍然以一段测试代码来获取最终结果:
现在,结果已经不言自明了。大家可能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初始化,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。 那么对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?是否静态变量总是先于静态初始化块,变量总是先于初始化块就被初始化了呢?实际上这取决于它们在类中出现的先后顺序。我们以静态变量和静态初始化块为例来进行说明。 同样,我们还是写一个类来进行测试:
运行上面的代码,会得到如下的结果: Test--A 大家可以随意改变变量a、变量b以及静态初始化块的前后位置,就会发现输出结果随着它们在类中出现的前后顺序而改变,这就说明静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,变量和初始化块也遵循这个规律。 了解了继承情况下类的初始化顺序之后,如何判断最终输出结果就迎刃而解了。 |
发表评论
-
JAVA正则表达式经典实例教程[huiqinbo]
2012-03-22 14:38 1806归纳者 : huiqinboaddress : bei ... -
Java多线程同步Synchronized使用并详细分析与实例 【huiqinbo转于网络并总结】
2012-03-09 13:55 3087一.Synchronized基本知识: 在 ... -
今天闲谈下最近写的正则表达式方法,对初学者来说绝对实用【回钦波】
2012-02-03 18:38 872////////////////// test1 ... -
获得到当前方法及类的名字Thread.currentThread().getStackTrace()[0].getClassName();
2011-09-26 13:22 2231获得到当前方法及类的名字: Thread.curren ... -
BufferedReader和BufferedOutputStream之间的灵活应用【回钦波】
2011-09-16 17:44 1069package log; import java.io.Bu ... -
获取c盘下的用户地址System.getProperty("user.home")
2011-09-15 17:09 1143System.getProperty("user.h ... -
为java.util.logging自定义文件处理器及日志输出格式
2011-09-15 17:05 1795为java.util.logging自定义文件处理器及日志输 ... -
jdk log自定义配置文件【回钦波写于20110915】
2011-09-15 17:00 1196import java.io.IOException; ... -
获得本类(java文件)的路径【huiqinbo】this.getClass().getResource("/").getPath()
2011-09-14 15:29 1352package com.huiqinbo; imp ... -
java中ArrayList 、LinkList区别【huiqinbo】
2011-09-08 11:42 1237java中ArrayList 、LinkList、List区 ... -
jdk的logging实例入门学习
2011-09-07 16:40 1006jdk的logging实例入门学习 分类: JDK 2 ... -
关于数组new 与不new 的问题
2011-08-30 15:05 860public class Test { String c ... -
Eclipse快捷键大全(huiqinbo)
2011-08-30 11:12 771Ctrl+1 快速修复(最经典 ... -
oracle数据库左右内外连接 【回钦波详解】
2011-08-29 15:00 1193oracle数据库左右内外连 ... -
@SuppressWarnings("**")是什么意思【回钦波详细解答】
2011-08-10 10:55 1004很多网友问我(回钦 ... -
很好用的Java反编译软件【回钦波】
2011-04-29 16:49 1067有Windows,Linux和Mac OS三个版本可 ... -
JAVA进制等移位运算[参考于回钦波文库]
2010-12-20 14:33 1049JAVA移位运算符 文章分类:Java编程 作者:回钦波 ... -
线程的状态
2010-11-02 09:50 1014学习线程《五》——线程的状态 文章分类:Java编程 ja ... -
ArrayList,Vector, LinkedList的存储性能和特性
2010-11-01 13:05 1062ArrayList,Vector, LinkedList的存储 ... -
LinkedHashMap 和 HashMap的区别[软件框架师 回钦波详解]
2010-10-18 23:49 1416...
相关推荐
### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...
从提供的【部分内容】中,我们可以提炼出Java语言中面向对象编程的几个核心概念,包括类的继承、构造函数的执行顺序、静态属性的初始化顺序、以及变量的作用域等方面的知识点。以下是详细解释: 1. 类的继承与构造...
在Java编程语言中,代码块是一种用于对对象或类进行初始化的有效手段。根据它们的作用域和执行时机的不同,代码块可以分为几种类型,其中最常见的两种是静态代码块(static code block)和构造代码块(instance ...
12. **构造函数**:特殊类型的函数,用于初始化新对象。类可以有多个构造函数,根据参数列表进行重载。 13. **函数式编程**:Java 8引入了对函数式编程的支持,如Stream API,使得处理集合数据变得更加简洁和高效。...
3. **Java程序初始化顺序**:初始化顺序遵循以下原则: - 首先初始化静态变量和静态代码块,按定义顺序执行。 - 其次是父类的非静态部分,包括非静态变量和非静态代码块,再是父类构造函数。 - 最后是子类的非...
3. **静态初始化块**:当类被加载到JVM(Java虚拟机)时,这些代码块被执行。它们用于初始化类级别的变量,不依赖于类的实例。 4. **finally代码块**:用于异常处理,无论是否抛出异常,finally块中的代码总会被...
6. **构造函数**:特殊类型的函数,用于对象的初始化。类名与构造函数相同,没有返回类型。 7. **匿名函数**:Java 8引入了Lambda表达式,允许创建没有名字的函数,常用于函数式接口。 8. **递归**:函数调用自身...
在Java编程语言中,代码块是程序中一组按顺序执行的语句,它们可以有特定的作用域和执行时机。在日常练习33中,我们关注的是三种不同类型的代码块:静态代码块、构造器代码块和局部代码块。下面将详细讲解这三种代码...
在Java中,一个类的构造函数用于初始化该类的对象,并且在创建对象时自动调用。然而,如果构造函数中使用了与类中的变量同名的局部变量,则构造函数内部的变量将隐藏类中的变量。因此,在试题2中,尽管构造函数中...
默认构造函数没有参数,而自定义构造函数可以带有参数以进行初始化。例如,`Circle`类可以定义不同的构造函数,以处理不同半径的圆。 9.3 构造函数: 构造函数没有返回类型,名称与类名相同,主要用于对象初始化。...
- 变量初始化的最佳时机和顺序,例如局部变量应在声明时初始化,而成员变量可以在声明时或构造函数中初始化。 - 对象的创建和初始化,包括构造函数的使用规则,以及如何使用静态代码块和实例代码块进行复杂的初始化...
26. **创建对象的内部过程**:分配内存、调用构造函数初始化、返回对象引用。 27. **值传递与引用传递**:Java中,对象作为参数传递实际上是引用传递,但不能改变对象本身,只能修改对象的内容。 28. **常用类、包...
7. **静态初始化器**:静态初始化器(静态块)在类加载时执行,用于初始化静态成员。 8. **对象赋值**:Java中对象赋值实际上是创建了一个新对象的引用,并非复制整个对象。赋值操作不会生成属性相同的“新对象”。...
5. **构造函数**:构造函数是类的一个特殊方法,用于初始化新创建的对象。默认情况下,如果程序员没有定义构造函数,JVM会提供一个无参构造函数,不做任何操作。但一旦程序员自定义了构造函数,JVM就不会再生成默认...
静态初始化器(静态块)在类被加载到内存时由系统自动调用执行,用于类级别的初始化任务。在Java中,对象可以通过赋值操作符(等号)传递引用,但这并不意味着创建了新对象,实际上是两个引用指向同一个对象,而不是...
final类中的方法默认是final的,而final类中的成员变量则必须在声明时或构造器中初始化。 10. 继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 在继承体系中,如果有一个方法在父类和子类中都有实现...
6. 构造函数:Java 中,构造函数用于初始化类的新实例。A 错误,因为类可以没有显式定义的构造函数,Java 会提供一个默认的无参构造函数。B 错误,构造函数没有返回类型。C 错误,构造函数可以带参数。D 正确,类...
4. **初始化顺序**:先初始化基类的属性,然后是派生类自己的属性。 5. **构造方法的重载**:构造函数可以被重载,即在一个类中可以有多个构造函数,但它们的参数列表不同。 #### 七、类的修饰符 1. **Public类**...
初始化顺序为:静态初始化块 -> 构造器 -> 实例初始化块。 12. **内部类的实现方式** 内部类分为:成员内部类、局部内部类、匿名内部类和静态内部类。 13. **Java实现排序和序列化** 可以使用Java内置的`...
25. 初始化成员顺序:成员初始化顺序由声明顺序决定,与初始化列表中顺序无关。 26. 类与对象关系:类是对象的蓝图,对象是类的具体实例。 27. 访问属性:public(公开)、protected(保护)、private(私有)。 ...