"Java基础知识面试题"
在Java面试中,面试官经常关注候选人的基础知识掌握程度和技术区别的理解。以下是一些常见的Java基础面试问题及其解答:
1. 一个`.java`源文件中是否可以包括多个类(不是内部类)?有什么限制?
Java源文件可以包含多个类,但只能有一个公开类(public class),该公开类的名称必须与文件名相同。其他非公开类(非public)不受此限制。
2. Java有没有goto?
Java语言中没有goto关键字,它鼓励使用结构化的控制流程,如if、while、for和switch。
3. 说说&和&&的区别。
& 是位运算符,用于进行按位与操作,也可在布尔表达式中作为逻辑与;而&&是逻辑与运算符,只有当两边的操作数都为真时,结果才为真,它具有短路特性,仅在必要时评估第二个操作数。
4. 在JAVA中如何跳出当前的多重嵌套循环?
可以使用break语句,配合标签(label)来跳出特定层次的循环。例如:
```java
outer: for (...) {
inner: for (...) {
if (someCondition) {
break outer;
}
}
}
```
5. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch语句可以作用于byte、char、short、int、枚举类型(enum)以及Java 7引入的String类型。
6. shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?
第一句会因为s1+1的结果默认为int类型,导致编译错误。第二句使用了复合赋值运算符,自动处理类型转换,因此没有错误。
7. char型变量中能不能存贮一个中文汉字?为什么?
可以,因为一个char在Java中占用两个字节,可以存储Unicode编码,包括中文字符。
8. 用最有效率的方法算出2乘以8等于几?
直接使用`2 << 3`,利用位移运算符进行计算。
9. 请设计一个一百亿的计算器:这涉及到大数计算,可以使用BigInteger类来处理大整数运算。
10. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
final修饰的变量一旦初始化后,其引用不能改变,但引用的对象内容可以改变,除非对象本身也是final的。
11. "=="和equals方法究竟有什么区别?
"=="比较的是变量的值,对于基本类型是直接比较值,对于对象则是比较内存地址;equals方法是Object类中的方法,用于比较对象的内容,子类可以通过重写equals方法实现自定义的比较逻辑。
12. 静态变量和实例变量的区别?
静态变量属于类,不依赖于任何实例,可以直接通过类名访问;实例变量属于对象,需要先创建对象才能访问。
13. 是否可以从一个static方法内部发出对非static方法的调用?
不可以,因为static方法不依赖于对象,无法直接调用非static方法,需要先创建对象实例再调用。
14. Integer与int的区别?
Integer是int的包装类,支持对象操作,如装箱、拆箱、比较等;int是原始数据类型,不支持对象特性。
15. Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)等于12,Math.round(-11.5)等于-11,round方法将浮点数四舍五入到最接近的整数。
16. 下面的代码有什么不妥之处?
需要提供具体代码才能分析。
17. 请说出作用域public,private,protected,以及不写时的区别。
public:所有类都可以访问。
private:仅在同一个类中可见。
protected:在同一包内及子类中可见。
没有指定:在同一包内可见。
18. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload(重载)是指在同一个类中定义多个同名方法,但参数列表不同。Override(重写)是在子类中重新定义父类中的方法。Overloaded方法不能改变返回值类型,但可以改变参数列表。
19. 构造器Constructor是否可被override?
构造器不能被覆盖,但可以被重载。
20. 接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?
接口可以继承接口。抽象类可以实现接口。抽象类可以继承具体类。抽象类中可以有静态的main方法。
21. 写clone()方法时,通常都有一行代码,是什么?
通常是`super.clone()`,用来调用Object类的clone方法复制对象。
22. 面向对象的特征有哪些方面?
封装、继承、多态。
23. java中实现多态的机制是什么?
多态是通过接口、抽象类和方法的重写来实现的,使得不同的子类对象可以对同一消息作出不同的响应。
24. abstractclass和interface有什么区别?
抽象类可以有方法实现,可以包含非抽象方法、构造器、静态方法和字段;接口只有抽象方法和默认方法,不能有构造器和字段(JDK 8后允许默认方法和静态方法)。
25. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
抽象方法不能是static或native,但可以是synchronized。
26. 什么是内部类?StaticNestedClass和InnerClass的不同。
内部类是定义在一个类内部的类,分为静态嵌套类(StaticNestedClass)和非静态嵌套类(InnerClass)。静态嵌套类像普通类一样,可以通过类名直接访问,不依赖于外部类的实例;而内嵌类需要外部类实例才能创建。
27. 内部类可以引用它的包含类的成员吗?有没有什么限制?
内部类可以直接访问外部类的所有成员,包括私有成员,但外部类不能直接访问内部类的私有成员。
28. A类继承B类,B类继承C类,如果A类有一个方法m(),B类也有一个方法m(),那么在A类中如何调用B类的m()方法?
在A类中,可以使用super.m()来调用B类的m()方法,因为super代表B类的实例。