Java面试宝典-java基础02
Java面试宝典-java基础02
- 11、当使用final关键字修饰一个变量时,请问是限制了引用行为还是限制了引用的对象?
- this关键字与super关键字各自承担着不同的职责。
- 在Java编程中,请问为何静态方法无法访问非静态对象?
- final关键字与static关键字在功能上有哪些主要区别?
- int数据类型能否强制转换为byte型?
- char数据类型的存储能力如何?它是否能容纳一个完整的中文汉字?
- byte类型的数值范围是多少?其中最大的负数值是多少?
- 数组索引从零开始的原因是什么?有没有可能从其他位置开始?
- 计算机系统内部使用的最低层程序语言是什么?
- 汇编语言有哪些独特的特点?它是如何实现底层硬件操作的?
11、当在变量上声明final关键字时,请问是固定引用本身还是固定其引用的对象?
一旦某个变量被标记为final,则表示该变量的引用位置不再变化;也就是说这个引用不再指向新的对象或值。然而实际上这并不阻止该被引用对象的内容发生改变;特别地,在这种情况下如果这个变量所指的对象是一个可变类型(例如数组集合或其他用户自定义的可变类实例)则其内容是可以更改的。
12、this 和super 关键字的作用
this关键字的作用
- 在对象内部进行自身引用的行为。
- 通过消除成员变量与局部变量之间的同名现象来避免潜在的问题。
- 允许使用成员变量而不允许使用局部变量。
- 能够调用成员方法以执行相应的操作。
super关键字的作用
5. 调用父类的成员变量或方法
6. 调用父类的构造函数
其他关键字:

13、在 Java 中,为什么不允许从静态方法中访问非静态变量?
- 静态变量是类固有的成员变量,在初始化阶段就被分配内存资源;
- 对象属性是非静态存储于对象实例中的,在对象实例生成后才为该实例分配内存空间;
- 静态方法是基于类代码逻辑进行编译运行的。
14、final 与 static 的区别?
一旦某个变量被指定为final关键字,则其值一旦在初始化阶段设定后将无法更改;针对引用类型的变量而言,在这种情况下指的是其引用对象本身是不可变的,并且即使如此,在对象状态可能会发生变化的情况下(例如状态机中的实例),仍然无法修改其引用关系;若该方法声明为final关键字,则此类子代方法将无法对其进行修改或重新定义;而如果一个类声明了final关键字,则此类将无法再进行继承
当一个变量或方法被声明为static时,则属于类而非其所属实例。这种静态变量的特点是它们共享同一个实例,在内存中只存在一份副本。此外,静态方法可以直接通过类名调用无需创建实例即可使用。这些静态代码块通常会在类加载时被执行以完成必要的初始化工作。
final关键字主要用于用于声明常量,并且能够避免继承;同时能够禁止方法重写;而static关键字则用于实现与类相关的变量及其功能,并且负责管理类的初始化
15、int可以强制转换为byte吗?
在Java中进行强制类型转换时,在将一个int类型的变量转换为byte类型的过程中(或当发生这种转换时),其高位24位的数据会被截断(或被丢弃)。
16、char 型变量中能存储一个中文汉字吗?
在 Java 中,字符类型占用2个字节。此外,默认使用 Unicode 编码方案。每个 Unicode 字符占用16位(即每个 Unicode 字符对应两个 char 占用)。因此,在这种情况下,默认的 char 占用大小是两个字节(因为16/8=2)。字符类型变量能够存储一个汉字。
17、byte类型127+1等于多少
byte的范围是-128~127。
一个字节由8位组成;而整数-0x7F(即-127)的二进制表示为0b0000000-???(此处应更详细说明)。因此,在执行加一操作时,请注意符号位的变化情况可能会引起数值范围的变化。大家都知道,在计算机中存储负数时会采用补码的形式;其二进制表示中符号位位于左边的位置上。
负数的补码转换为十进制的方式是怎样的?
对于一个正数而言,其原码、反码与补码是相同的;其补码直接进行转换即可得到对应的十进制数值。
已知一个负数的补码,将其转换为十进制数,步骤如下:
先将各位取反;
然后将其转换为十进制数;
接着在前面加上负号并减去一。
例如二进制数~中最高位是~吗?如果是负值,则各位取反后得到的是一个二进制数:~。
转换为十进制就是~;
加上负号得到~-~;
再减去一就得到了最终结果:~-~
下面这段代码运行后的输出结果是什么呢?
public static void main(String[] args) {
Integer i1 = 101;
Integer i2 = 101;
Integer i3 = 201;
Integer i4 = 201;
System.out.println(i1==i2);
System.out.println(i3==i4);
代码解读
事实上输出结果是:true false
代码解读
为何会产生这样的现象?运行结果显示变量i1和i2均指向同一对象,相比之下,变量i3和i4各自独立地指向不同对象。通过查看源代码即可清楚其来龙去脉。下面这段代码是Integer类中valueOf方法的具体实现:
public static Interger valueOf(int i){
if(i>=-128&&i<=IntergerCache.high){
return IntergerCache.cache[i+128];
}else{
return new Interger(i);
}
}
代码解读
当调用valueOf方法生成Integer对象时
上面的代码中变量i₁和i₂被赋值为100后会被执行以下操作:从而使得程序能够快速调用已缓存的对象以提高运行效率。因此,在这种情况下,i₁与i₂将指向同一个对象,而其他变量如i₃与i₄则各自独立地指向不同的对象.具体实现细节则可参考valueOf的方法.
18、为什么数组的起始索引是0而不是1?
这一习惯源自机器语言,在那个时期估算一个数组元素地址的方法是将数组起始地址与该元素的索引相加。设置起始索引为1会导致第一个元素占用不必要的空间或者多花时间来将索引减1。
19、什么是机器语言?
它是一种基于指令集的编程体系结构,在计算机领域中最早被开发使用。 它作为硬核技术的基础组成部分存在于各个电子设备中。 不同型号的电子设备各自拥有独特的二进制指令系统;这种二进制指令系统正是专为硬件设计的运算逻辑而存在。 不同类型的电子设备往往配备不同的二进制操作符字符串;这些操作符字符串能够根据特定的应用需求完成各种计算任务以及逻辑判断功能
由一系列特定的计算机指令集合组成的该计算机的机器语言即是其可以直接被计算机接受并加以理解的语言系统。运用这些指令不仅能够精确地描述算法而且还能确保较高的编程质量和较低的空间占用率同时运行速度也得到了显著提升。然而这种程序具有较差的可读性容易出现逻辑错误使得程序设计与调试过程具有较高的难度。
20、什么是汇编语言?
汇编语言被广泛认为是一种低级计算机编程语言,并且由于使用了与计算机硬件极为接近的指令系统而备受关注。因此,在编程领域中它通常被视为一种次级的计算机编程语言
汇编语言的特点包括:
- 汇编语言允许开发者直接操作计算机硬件架构,并因此而成为编写操作系统以及各种嵌入式系统的高性能编程语言。
- 汇编语言展现出极高的执行效率特征,在无需经过高级语言的编译过程或做解释处理的情况下即可在硬件层面运行。
- 由于指令系统设计紧凑高效的原因,在同样内存空间下可承载大量程序指令。
- 运行速度极快是汇编语言的重要特点。
- 开发这类软件则要求具备深入掌握计算机体系结构及相关硬件知识的能力。
- 总体来说,汇编语言是一种面向机器级的低级编程语言,在直接操作硬件架构的同时兼具高效率与高密度的特点。
