写在开头
本系列内容主要涵盖我在深入学习Java过程中对一些知识点的深入理解和巩固。如果内容表达不准确或存在谬误,欢迎在评论区或私信中进行补充或指正~
目录
switch 中的case 语句一定要包含 break 语句吗?
为什么字符串String str = "hello";可以重新赋值str = "Java is great!";不报错?
本篇内容旨在重新学习和加深印象关于Java基础知识的内容。为便于记忆,本文内容稍有简化。
Java基础知识
-
Java的程序是如何被计算机执行的?
存储:Java程序( .java ) => 使用 javac 编译器 => 字节码文件( .class )
运行:JVM(Java虚拟机)在运行时执行 => 字节码文件(.class) => 转换为机器代码 => 在内存中执行
两次转换:
-
为什么Java的基本单位是类?
- 类的使用可以实现封装、继承、多态和抽象,这四个是面向对象编程(Object-Oriented Programming,OOP)中的重要概念。类封装了数据和行为,提供了代码的复用、模块化和管理的能力。
- 类是对象的模板,通过类可以创建对象,类和对象的关系是 Java 程序设计的基础。
因此,Java选择类作为其基本单位,是为了支持面向对象编程的核心原则。
-
位运算有什么优势?
1)高效性
速度快:由 CPU 直接支持,因此非常快速,时钟周期少于复杂运算。
低开销:位运算不需要访问内存,只在寄存器级别操作,因此开销极低。
2)节省存储空间
数据压缩:通过位操作,可以用01表示布尔值或小数值,从而节省存储空间。例如,一个byte存储 8 个boolean。
3)实现特定算法
图形处理:在图形处理和游戏开发中,位运算用于快速处理像素和颜色值。
加密算法:许多加密算法使用位运算来实现位级别的操作。
网络编程:在网络编程中,位运算用于处理网络协议中的标志位和地址。
4)数据操作
掩码操作:方便创建和应用掩码,从而提取、设置或清除特定的位。
位移操作:通过左移(<<)和右移(>>)操作,可以快速实现乘法和除法,特别是乘以 2 或除以 2 的幂。
补充:
左移:
a << n
- 将位向左移动 n 位,相当于乘以 2 的 n 次方。
- 示例:
5 << 1
结果是10
(0101 << 1 = 1010)右移:
a >> n
- 将位向右移动 n 位,相当于除以 2 的 n 次方。
- 示例:
5 >> 1
结果是2
(0101 >> 1 = 0010)
-
instanceof运算符操作基本数据类型会怎样?
public class InstanceOfCorrect {
public static void main(String[] args) {
String name = "烟花易冷少";
boolean b = name instanceof String;
System.out.println("结果为:" + b);
}
}
// 输出:
// 结果为:true
如果将代码中的name修改为char类型,则会报错,因为instanceof运算符不能用于基本数据类型
public class InstanceOfOperators1 {
public static void main(String[] args) {
char s = 's';
boolean b = s instanceof String;
System.out.println("结果为:" + b);
}
}
// 程序报错
-
运算符的优先级?
符号 | 名称 |
---|---|
() 圆括号(用于分组和方法调用) | 括号 |
| 后缀 |
| 一元 |
| 乘法/除法/取余 |
| 加法/减法 |
| 位移 |
| 位移 |
| 等号 |
& 按位与 | 按位与 |
^ 按位异或 | 按位异或 |
| 按位或 | 按位或 |
&& 逻辑与 | 逻辑与 |
|| 逻辑或 | 逻辑或 |
| 条件(三元) |
| 赋值 |
-> lambda 表达式 | lambda 表达式 |
同优先级的运算符在执行时按从左到右的顺序
-
switch 中的case 语句一定要包含 break 语句吗?
不一定。
如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句,这种行为被称为"fall-through"或"case穿透"。
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。
示例:
int day = 3; switch (day) { case 1: System.out.println("星期一"); case 2: System.out.println("星期二"); case 3: System.out.println("星期三"); case 4: System.out.println("星期四"); case 5: System.out.println("星期五"); default: System.out.println("周末"); }
输出结果:
星期三
星期四
星期五
周末
补充:
switch (Day.MONDAY)使用枚举值 => JDK5 开始 ;
switch (day) 使用枚举值字符串 => JDK8 开始 ;
-
为什么字符串String str = "hello";可以重新赋值str = "Java is great!";不报错?
变量是存储数据的载体,如题其实两个字符串都已创建,只是’str’这个变量名指向的值发生了变化。