一、除了Object外没有继承其他类的类
class Base {
protected static int a = 3;
protected int b = 5;
static{
System.out.println("a = " + a);
}
{
System.out.println("b = " + b);
}
public Base(){
System.out.println("In constructor...");
}
}
class Initailization {
public static void main(String[] args) {
System.out.println("Before use...");
System.out.println("Base.a = " + Base.a);
System.out.println("After use...");
System.out.println("Before new...");
new Base();
System.out.println("After new...");
}
}
执行结果:
Before use...
a = 3
Base.a = 3
After use...
Before new...
b = 5
In constructor...
After new...
当然初始化的顺序不言而喻额:类加载、校验、准备后便初始化静态变量及执行静态块;对象先执行成员的初始化,然后在执行自身的构造函数。如果类没有被加载,直接调用new创建对象,则先加载类,并做相关初始化,然后再创建对象,如下所示:
class Base {
protected static int a = 3;
{
System.out.println("a1 = " + a);
}
protected int b = 5;
static{
System.out.println("a = " + a);
}
{
System.out.println("b2 = " + b);
}
public Base(){
System.out.println("In constructor...");
}
}
class Initailization {
public static void main(String[] args) {
System.out.println("Before new...");
new Base();
System.out.println("After new...");
}
}
执行结果:
Before new...
a = 3
a1 = 3
b2 = 5
In constructor...
After new...
二、除了Object还继承了其他类的类
一个原则——先父后子,两个过程——先加载后创建对象。详细过程如下:
先加载、初始化父类,然后加载、初始化子类;先创建父类对象,然后创建子类对象。
class A {
static {
System.out.print(1);
}
public A() {
System.out.print(2);
}
}
class B extends A {
static {
System.out.print(3);
}
{
}
public B() {
System.out.print(4);
}
public static void main(String[] args) {
B b1 = new B();
System.out.print(",");
new B();
}
}
所以,上述代码的执行结果为:
1324,24
分享到:
相关推荐
空指针异常(NullPointerException)发生在试图访问或操作一个未初始化或已释放的对象引用时。在Java中,当一个对象引用为null,但尝试调用其方法或访问其属性时,就会抛出此异常。基本数据类型不会引发此问题,因为...
初始化阶段则对类进行静态变量的赋值和初始化块的执行。 在Java中,每个类都有一个唯一的ClassLoader实例与其关联。当需要加载一个类时,ClassLoader首先检查该类是否已经加载。如果未加载,它会委托给父...
例如,UBIFS初始化时会注册文件系统类型,当文件系统挂载时,UBIFS会解析其Super区信息,并初始化其内部数据结构。UBIFS通过VFS提供的文件操作接口,如读取、写入、同步、删除等操作,能够被应用程序调用。 垃圾...
Service类作为运行时服务的核心,它在实例化过程中会加载插件、初始化相关配置,并缓存动态注册的CLI命令。具体来看,Service类中包含用于Webpack配置的函数数组(webpackChainFns和webpackRawConfigFns)、dev...
如果对象没有成员函数,可以直接通过初始化构造函数的形式进行初始化。 对象在Oracle数据库中的存储有两种方式: - 对象列:将对象作为数据表中某列的数据类型,使得对象可以直接存储在数据库列中。 - 对象行:...
1. **初始化与资源管理**:游戏启动时,需要初始化DirectX的相关组件,如创建设备、设置渲染目标、加载纹理和模型等。同时,资源管理模块负责内存分配、资源加载与释放,确保高效且无内存泄漏。 2. **主循环**:...
在解析布局文件时,`LayoutInflater`会利用`XmlPullParser`解析XML,创建并初始化UI组件。`LayoutInflater.from(Context)`获取到`LayoutInflater`实例后,调用`inflate(int resource, ViewGroup root)`方法,其中...
1. 语音交互:使用科大讯飞语音 SDK 实现语音听写和语音合成功能,包括语音配置对象的初始化、语音听写和语音合成的监听器对象的创建、音频数据的处理和语音听写结果的数据解析。 2. 网络请求:使用 Retrofit 框架和...
2. **配置文件**:`config.php`包含AppKey和AppSecret,它们被定义为常量`WB_AKEY`和`WB_SKEY`,并用于初始化`WeiboOAuth`对象。 3. **创建WeiboOAuth对象**:`WeiboOAuth`类是SDK提供的,用于处理OAuth授权。通过`...
通过对 `SerialBean` 类中的主要方法进行解析,我们了解到如何使用这个类库来完成串口的初始化、读取、写入以及关闭等基本操作。此外,`SerialBuffer` 和 `ReadSerial` 类分别负责数据管理和读取逻辑,进一步完善了...
JVM启动流程大致包括:环境设置和检查、查找JAVA_DLL、加载动态库、解析参数、初始化虚拟机和执行主类。这一过程涉及到许多底层细节,如CreateExecutionEnvironment函数的调用和线程的创建。 5. 所用技术 OpenJDK的...
作为MVVM框架的一种,Vue最为人津津乐道的当是数据与视图的绑定,将直接操作DOM节点变为修改 ...初始化 Vue 实例 在阅读源码时,因为文件繁多,引用复杂往往使我们不容易抓住重点,这里我们需要找到一个入口文件,从 V
#### 三、Z-Stack协议栈OSAL初始化流程简析 Z-Stack中的OSAL(Operating System Abstraction Layer)是操作系统抽象层,用于提供一个统一的接口来访问底层操作系统服务。OSAL初始化流程是Z-Stack启动过程中的关键...
在构造 `CCoeControl` 类时,通常会调用此方法来初始化控件的窗口。例如,在示例代码中可以看到: ```cpp void CIeAppView::ConstructL(const TRect& aRect, CQikAppUi* aAppUi) { // ... 其他初始化代码 ... ...
Tuple 也是一种有序的列表,但与 List 不同的是,Tuple 一旦初始化就不能再修改。Tuple 的元素可以是字符串、数字、布尔值等,但不能包含列表。 Tuple 的定义可以使用小括号 (),例如: `classmates = ('Michael',...
1. **构造函数**:在构造函数中,最重要的操作是初始化`toolbox`指针,即`new QGCToolbox(this);`。 2. `_initForNormalAppBoot`函数: - 初始化样式表。 - 连接信号槽,确保最后一个窗口关闭时退出程序。 - ...
2. 虚函数不能是构造函数,因为构造函数用于初始化对象,而在对象尚未完全构建时无法进行多态调用。 3. 析构函数可以被声明为虚函数,这在处理继承链中的对象删除时非常有用,确保正确调用到子类的析构函数。 4. 在...
例如,ATM.java.html可能包含了初始化ATM、验证用户卡、处理交易请求等功能。ATM类通常会有一个或多个实例,每个实例对应一台实际的ATM设备。 2. **Bank类**:Bank类代表了银行系统,它管理着所有账户的信息,执行...