首页 > 编程语言 >《Java编程思想第四版》学习笔记05

《Java编程思想第四版》学习笔记05

时间:2023-08-06 14:32:09浏览次数:50  
标签:初始化 Java 05 int prt Insect static 第四版 Beetle

6 . 9 . 1 继承初始化

我们有必要对整个初始化过程有所认识,其中包括继承,对这个过程中发生的事情有一个整体性的概念。请观察下述代码:

//: Beetle.java
// The full process of initialization.
class Insect {
int i = 9;
int j;
Insect() {
prt("i = " + i + ", j = " + j);
j = 39;
}
static int x1 =
prt("static Insect.x1 initialized");
static int prt(String s) {
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect {
int k = prt("Beetle.k initialized");
Beetle() {
prt("k = " + k);
prt("j = " + j);
}
static int x2 =
prt("static Beetle.x2 initialized");
static int prt(String s) {
System.out.println(s);
return 63;
}
public static void main(String[] args) {
prt("Beetle constructor");
Beetle b = new Beetle();
}
} ///:~

该程序的输出如下:

static Insect.x1 initialized

static Beetle.x2 initialized

Beetle constructor

i = 9, j = 0

Beetle.k initialized

k = 63

j = 39

对 Beetle 运行 Java 时,发生的第一件事情是装载程序到外面找到那个类。在装载过程中,装载程序注意它有一个基础类(即 extends 关键字要表达的意思),所以随之将其载入。无论是否准备生成那个基础类的一个对象,这个过程都会发生(请试着将对象的创建代码当作注释标注出来,自己去证实)。若基础类含有另一个基础类,则另一个基础类随即也会载入,以此类推。接下来,会在根基础类(此时是Insect)执行 static 初始化,再在下一个衍生类执行,以此类推。保证这个顺序是非常关键的,因为衍生类的初始化可能要依赖于对基础类成员的正确初始化。此时,必要的类已全部装载完毕,所以能够创建对象。首先,这个对象中的所有基本数据类型都会设成它们的默认值,而将对象句柄设为 null 。随后会调用基础类构建器。在这种情况下,调用是自动进行的。但也完全可以用 super 来自行指定构建器调用(就象在 Beetle()构建器中的第一个操作一样)。基础类的构建采用与衍生类构建器完全相同的处理过程。基础顺构建器完成以后,实例变量会按本来的顺序得以初始化。最后,执行构建器剩余的主体部分。

                                                                                                                                                   P.157-P.158

这个知识点很重要!

标签:初始化,Java,05,int,prt,Insect,static,第四版,Beetle
From: https://blog.51cto.com/u_16183536/6984313

相关文章

  • 【JavaScript07】关于自增++,自减--
    单纯的++,--是没有区别的,不论在前面还是在后面,都是自增或者自减在赋值语句中,就有区别了a++;//翻译一下就是a=a+1++a;//翻译一下就是a=a+1a--;//翻译一下就是a=a-1--a;//翻译一下就是a=a-1//不一样的地方:vary=x++;fn(x++)arr[x++]......
  • 【JavaScript06】简单运算符与数据类型转换
    简单运算符1、&&,||有短路的含义,如果前面的表达式可以得出最终结果了.那么后面的表达式就不计算了vara=10;varb=20;varc=30;console.log(a>b&&b<c);console.log(b<c||a>b);2、==和=====只是判断值是否一致​===会判断数据类型和数据是......
  • 【JAVA】探索泛型与数据结构:解锁高效编程
    引言在当今信息爆炸的时代,数据结构和算法成为了程序员必备的核心技能。而泛型作为Java语言中的一项强大特性,为数据结构和算法的实现提供了更高效、更安全的方式。本文将深入探讨泛型的概念、使用场景以及结合数据结构的应用,为您打开高效编程之道。第一部分:了解泛型1.1为什么使......
  • 【Java】智慧工地管理系统源码(SaaS模式)
    智慧工地是聚焦工程施工现场,紧紧围绕人、机、料、法、环等关键要素,综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术,与施工生产过程相融合。一、什么是智慧工地智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术,提高项目......
  • 【Java循环】:探索迭代的世界
    循环是编程中的重要概念,它允许我们重复执行特定的代码块,帮助我们简化复杂的任务和提高代码的效率。在Java中,循环有多种形式,包括for循环、while循环和do-while循环。本篇博客将深入探讨Java中的循环,以及如何使用它们来解决实际问题。1.for循环for循环是一种常用的循环结构,它允许......
  • java中ReentrantLock底层实现原理
    ReentrantLock是Java中提供的一种可重入的互斥锁,它具有与synchronized关键字相似的功能,但更加灵活和可控。下面是ReentrantLock底层实现原理的简要解释:ReentrantLock的底层实现主要依赖于AbstractQueuedSynchronizer(AQS)类。AQS是一个用于构建锁和其他同步器的框架,它提供了一种基于......
  • 【JAVA】如何学好Java并调整学习过程中的心态
    学习Java是一项挑战性而又值得追求的目标。掌握Java编程语言,不仅可以为您的职业发展增添新的机会,还能让您体验到编程的乐趣。本文将为您提供学习Java的有效方法,并探讨调整学习过程中心态的关键。第一步:建立坚实的基础在开始学习Java之前,建立坚实的基础至关重要。学习Java编程语言......
  • 【JavaScript05】Object的序列化与反序列化
    对象的序列化当我们需要像后端传json字符串的时候,需将JavaScript的对象转成json格式,这个过程就是序列化。varp={name:"肖文亮",age:18,wife:{name:"XXX",age:18,hobby:[......
  • 【JavaScript04】Object对象
    对象(object)是JavaScript最重要的数据类型,也是JavaScript的核心内容。JavaScript中一切皆对象,比如String、Array、Date等对象。在JavaScript中,对象是非常重要的,当你理解了对象,就可以了解JavaScript。语法:对象字面量的属性名可以加引号,也可以不加,建议不加如果要使用一......
  • 【JavaScript03】Array数组对象基本操作
    首先定义一个数组,可以用[];也可以使用newArray()来创建一个数组对象数组通过下标取值数组通过下标取值,从0开始在python中可以通过下标-1反着取倒数第一个值,JavaScript中没这种取值方法.当数组的下标不在它取值范围内,如x有4个成员,那么取值是0-3,非0-3的数字下标取值,得到......