今天第一天去面试就碰鼻子.. 还是基础不扎实, 几下点吧.. 下面是一个让我这个小菜费脑筋的题
运行如下代码:
package test1;
public class A {
B b = new B();
A(){
System.out.println("a");
}
}
package test1;
public class B {
B(){
System.out.println("b");
}
}
package test1;
public class C {
public static void main(String[] args) {
A a = new A();
}
}
!-- 在这里输出的应该是 b a , A类在实例化之前先初始化, 所以B先被实例化,输出b 然后调用A的构造方法输出a。
如果想调用普通方法 不想类被初始化, 把方法写成static的就可以了,不实例化直接调用方法,避开了初始化。--!
-------------------------------------------------------------------------------------------------------------------------------
评论怎么只能删除不能回复呢? 就在这里回复吧。 上面说的太粗糙,今天又问了理论强的网友,我想实例化这个过程应该理解的差不多了。
C类中main方法执行的时候,虚拟机在把A类读入内存后,会先验证是不是class文件,然后做好准备工作,其实就是去分配内存,然后开始解析class文件到java运行时内存区,解析class文件的时候,首选是magic number(魔数),然后是版本号,然后是常量池,后来是方法等。在常量池初始化的时候,如果需要用到其他的类B,这个时候虚拟机实例主进程等待,然后加载B,把B解析后创建实例,然后把A实例的成员变量b的引用指向刚刚创建的B的实例。初始化成员变量完成后,开始分配内存到堆空间中,然后实例完成后,会把A类的实例的引用执行C类中的a,把引用实例替换为直接实例。
如果我理解的还是不到位,有错误的地方,请留个言,明天详详细细的请教老师。谢谢
分享到:
相关推荐
此外,静态初始化块只在类加载时执行一次,而初始化块(也称为实例初始化块)会在每次创建类的新实例时执行。这意味着静态成员和静态初始化块对于所有类的实例都是共享的,而实例成员和实例初始化块则是每个对象独有...
JAVA面试题解惑系列(一)——类的初始化顺序 JAVA 是一门面向对象的编程语言,类的初始化顺序是 JAVA 程序员和 JAVA 工程师面试中一个非常重要的知识点。本文将详细讲解类的初始化顺序,并提供了相关的测试代码,...
理解这个初始化顺序对解决面试题和编写可靠的代码至关重要。在实际编程中,我们有时需要依赖这种初始化顺序来确保数据的正确初始化,特别是在处理复杂的继承结构和多线程场景时。因此,熟练掌握类初始化顺序是每个...
1. 接口中可以有虚方法,一个类可以实现多个接口,接口不能被实例化,接口中可以包含已实现的方法 2. 从数据库读取记录,你可能用到的方法有:ExecuteScalar、Fill、ExecuteReader 3. 对于一个实现了 IDisposable ...
- **可见性**:普通局部变量在每次函数调用时重新初始化,`static`局部变量只初始化一次。 综上所述,C++中的引用和指针在概念上有很大的差异,它们在函数参数传递、内存管理等方面各有特点。此外,正确理解和使用...
JVM 的工作流程包括类加载、链接、初始化、运行和卸载等几个阶段。在运行时数据区中,JVM 将 Java 程序 Counterpart 分为方法区、堆、栈、PC 寄存器和本地方法栈等五个部分。其中,方法区用于存储类信息、变量信息和...
在 Java 中,类的初始化顺序是一个经常被问到的面试题。 nhiều 开发者可能会混淆类的初始化顺序,特别是在继承的情况下。下面我们来探讨一下类的初始化顺序。 首先,让我们看一下类的初始化顺序的基本规则:静态...
cocos2d-x 面试题 cocos2d-x 是一个流行的开源游戏引擎,广泛应用于游戏开发领域。以下是 cocos2d-x 相关的知识点总结: 1. New 和 malloc 的区别: New 和 malloc 都是用于申请动态内存和释放内存的,但是它们...
### Java面试题解惑系列——类的初始化顺序 在Java面试过程中,经常会出现关于类的初始化顺序的问题。这类问题通常涉及静态与非静态成员变量、静态初始化块、非静态初始化块以及构造函数的执行顺序。下面我们将深入...
- **实现**: 通过`static`关键字声明全局变量,确保在整个进程中只初始化一次。 **4. 观察者模式** - **定义**: 当对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - **应用**: KVO(Key-Value ...
Java 面试题知识点解析 Java 语言是目前软件开发中最流行的语言之一,具有强大、灵活、跨平台等特点。 Java 面试题是 Java 开发者在面试时常见的问题,本文将从 Java 面试题中提取出关键知识点,并进行详细解析。 ...
### JAVA面试题解惑系列:深入理解静态变量与实例变量 在JAVA的面试过程中,面试官经常通过设计一些关于类的初始化顺序的问题来评估应聘者对JAVA基础的理解深度。其中,静态变量与实例变量的区别及它们的初始化顺序...
以上只是面试题中的一部分,其他的Java面试问题可能涉及更多的主题,如多线程、异常处理、IO流、设计模式、反射、JVM内存模型、垃圾回收机制等。理解并掌握这些基本概念对于Java开发者来说至关重要,特别是在面试中...
### Java程序员经典笔试面试题汇总知识点解析 #### 一、程序执行顺序与静态变量初始化 **题目背景**:本题目旨在考察Java程序中类的加载过程以及不同成员(如静态变量、非静态变量等)的初始化顺序。 **题目示例*...
### Java面试题知识点概览 #### 面向对象概念 1. **super()与this()的区别**: - `super()`用于调用父类的构造方法或父类成员方法。 - `this()`用于调用本类中的其他构造方法。 2. **作用域public, protected, ...
"前端面试题总结" 以下是根据给定文件信息生成的相关知识点: 浏览器兼容性 在前端开发中,浏览器兼容性是一个非常重要的问题。不同的浏览器对 HTML、CSS、JavaScript 的解析和执行方式不同,这导致了同一个页面...
在Java编程语言中,类的初始化过程和实例的初始化过程是程序执行的关键环节,尤其在面试中,这是考察开发者对Java内存管理和生命周期理解的重要问题。本文将深入探讨这两个概念。 首先,类的初始化过程(也称为类...
`final`关键字在JAVA中有多种用途,它可以用来声明常量,表示该变量的值一旦初始化后就不能改变。同时,final也可以用来防止类的继承或方法的重写,从而保证代码的稳定性和安全性。 ### 7. Heap与Stack的区别 堆...