1. .java
源文件中的类定义
在单个 .java
源文件中,可以包含多个类的定义,但其中只能有一个类被声明为 public
,且这个 public
类的名称必须与文件名完全一致。这是Java编译器的一个基本规则,确保了类的封装性和可访问性。
2. Java 中的 goto
Java 语言中确实保留了 goto
关键字,但出于避免程序结构混乱的考虑,它并未在Java语言规范中被使用。这意味着你不能在Java程序中使用 goto
语句进行跳转。
3. &
和 &&
的区别
&
和 &&
都是逻辑与运算符,但在使用上有显著区别。当用于布尔表达式时,如果两边都为 true
,则结果为 true
;否则为 false
。&&
具有短路功能,即如果*个表达式为 false
,则不会评估第二个表达式,直接返回 false
。而 &
还会评估第二个表达式(无论*个表达式的结果如何),并且当操作数不是布尔类型时,&
还可作为位运算符进行按位与操作。
4. 跳出多重嵌套循环
在Java中,若需跳出多重嵌套循环,可通过在外层循环前定义标签(label),然后在内层循环中使用带标签的 break
语句来实现。这样,即使深处多层嵌套中,也能直接跳出到指定的外层循环。
5. swi*h
语句的适用范围
swi*h
语句中的表达式必须是整数类型(byte
、short
、char
、int
、Integer
包装类型,它们都能隐式转换为 int
)或枚举类型。由于 long
不能隐式转换为 int
,因此不能直接用于 swi*h
语句。从Java 7开始,String
类型也被支持用于 swi*h
语句。
6. char
类型与中文汉字
char
类型在Java中用于存储Unicode编码的字符,由于Unicode编码包括了多种语言的字符,包括汉字,因此 char
类型变量可以存储汉字。但是,如果某个汉字未被Unicode编码集包含,则无法存储在 char
类型变量中。值得注意的是,Unicode编码占用两个字节,因此 char
类型也占用两个字节。
7. final
关键字的作用
final
关键字用于修饰变量时,表示该变量的引用不可变,即一旦指向某个对象后,就不能再指向其他对象。但是,该变量所引用的对象内部的状态(即对象的成员变量)是可以改变的,除非对象本身也是不可变的。
8. 静态变量与实例变量的区别
- 语法定义:静态变量前需加
static
关键字,而实例变量则不加。 - 程序运行:实例变量属于对象的一部分,必须在创建对象后才能被访问和修改;而静态变量属于类,在类加载时就已分配空间,无需创建对象即可访问。
9. 静态*调用非静态*
不可以直接从静态*中调用非静态*,因为非静态*是与对象实例相关联的,而静态*调用时可能尚未创建任何对象实例。因此,在静态*内部调用非静态*没有明确的对象实例与之关联,这在逻辑上是无法成立的。
10. Java中的多态机制
Java中的多态性是通过*的重写和动态绑定实现的。具体来说,就是父类或接口类型的引用变量可以指向子类或实现类的实例对象,在运行时根据对象的实际类型动态绑定*调用,即调用的是内存中正在运行的对象的*,而非引用变量类型中定义的*。
11. 内部类访问外部类成员
内部类(无论是否是静态的)都可以访问其外部类的成员。然而,如果是静态内部类,则只能访问外部类的静态成员,因为静态内部类不依赖于外部类的实例。非静态内部类则没有这样的限制,可以自由地访问外部类的所有成员(包括静态和非静态)。