2016java面试宝典
### 2016 Java面试宝典知识点梳理 #### 一、Java基础知识 **1. 源文件中是否可以包含多个类?** - **答案:** 可以,但必须满足以下条件: - 源文件的名字必须与公共类(public class)的名字相同。 - 如果源文件包含一个公共类,那么它只能有一个公共类,其他可以是非公共类。 - 如果源文件没有公共类,则它可以包含多个非公共类。 **2. Java中是否有`goto`?** - **答案:** Java中没有传统的`goto`语句。但是,可以通过标签化的`break`和`continue`来模拟`goto`的功能。 **3. `&`和`&&`的区别?** - **答案:** `&`用于位运算和逻辑运算,而`&&`仅用于逻辑运算。`&&`具有短路效果,即如果左侧表达式为`false`,则不会评估右侧表达式。 - 示例: ```java boolean b1 = true, b2 = false; System.out.println(b1 & b2); // 输出 false System.out.println(b1 && b2); // 输出 false int a = 1, b = 0; System.out.println(a / b & 1 == 0); // 运行时错误 System.out.println(a / b && 1 == 0); // 输出 false ``` **4. 如何跳出多重嵌套循环?** - **答案:** 可以通过标记标签来实现,如: ```java outerLoop: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (i == 5 && j == 5) { break outerLoop; } System.out.println(i + " " + j); } } ``` **5. `switch`语句能否作用于`byte`、`long`和`String`?** - **答案:** 在Java 7及之后版本中,`switch`支持`byte`、`short`、`char`、`int`及其包装类,以及`String`。`long`不支持。 **6. `short s1=1; s1=s1+1;`与`short s1=1; s1+=1;`有什么区别?** - **答案:** `s1=s1+1`会因为类型提升导致编译错误,因为`1`是`int`类型,默认与`short`进行加法操作会将结果提升为`int`,需要显式强制转换。而`s1+=1`会自动进行类型转换。 **7. `char`型变量能否存储一个中文汉字?** - **答案:** 可以,`char`类型在Java中占用2个字节,足以表示一个Unicode字符,包括中文汉字。 **8. 最有效率的方法计算2乘以8?** - **答案:** 使用位移运算符`<<`,即`2 << 3`,效率更高。 **9. 设计一个百亿级的计算器** - **答案:** 需要考虑大数值运算,可以使用`BigInteger`类来处理。 **10. 使用`final`关键字修饰的变量是指引不可变还是引用的对象不可变?** - **答案:** 如果修饰的是引用类型,则是引用不可变;如果是基本类型,则是值不可变。 **11. `==`和`equals`方法的区别?** - **答案:** `==`用于比较两个变量的内存地址是否相同;`equals`方法默认也是比较地址,但可以通过重写使其比较对象内容的相等性。 **12. 静态变量和实例变量的区别?** - **答案:** 静态变量属于类级别,所有实例共享同一份;实例变量属于对象级别,每个实例有自己的副本。 **13. 是否可以从一个静态方法内部调用非静态方法?** - **答案:** 不可以直接调用,但可以通过创建对象实例间接调用。 **14. `Integer`与`int`的区别?** - **答案:** `int`是基本数据类型,`Integer`是`int`的封装类,提供了许多额外的方法和功能。 **15. `Math.round(11.5)`和`Math.round(-11.5)`的结果?** - **答案:** `Math.round(11.5)`结果为12,`Math.round(-11.5)`结果为-11。 **16. 代码中的不妥之处?** - **答案:** 需要具体查看代码示例。 **17. 作用域`public`、`private`、`protected`的区别?** - **答案:** `public`表示公有,可以在任何地方访问;`private`表示私有,只能在当前类中访问;`protected`表示受保护,可以在同一个包或子类中访问。 **18. `Overload`和`Override`的区别?** - **答案:** `Overload`表示重载,是指在一个类中定义多个同名方法,但参数列表不同;`Override`表示重写,是指子类重写父类的方法,方法名和参数列表完全相同。 **19. 构造器`Constructor`是否可被重写?** - **答案:** 构造器不能被重写。 **20. 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的`main`方法?** - **答案:** 接口可以继承接口;抽象类可以实现接口;抽象类可以继承具体类;抽象类中可以有静态的`main`方法。 **21. 写`clone()`方法时通常都会有一行代码是什么?** - **答案:** 通常会有`super.clone()`这行代码,用来调用基类的`clone`方法。 **22. 面向对象的特征有哪些方面?** - **答案:** 面向对象的主要特征包括封装、继承、多态。 **23. Java中实现多态的机制是什么?** - **答案:** 多态可以通过方法重写(`Override`)和方法重载(`Overload`)实现。 **24. `abstract class`和`interface`有什么区别?** - **答案:** `abstract class`可以包含抽象方法和具体实现,可以有实例变量,可以被继承;`interface`只包含抽象方法,不允许有具体实现,不能有实例变量,类可以通过实现多个接口来支持多重继承。 **25. `abstract`的方法是否可以同时是`static`、`native`、`synchronized`?** - **答案:** `abstract`方法不能是`static`,因为`abstract`方法需要在子类中实现,而`static`方法不需要依赖于对象;`abstract`方法可以是`native`和`synchronized`。 **26. 什么是内部类?`StaticNestedClass`和`InnerClass`的不同?** - **答案:** 内部类是在另一个类的内部定义的类。`StaticNestedClass`是一种静态内部类,不需要外部类的实例就可以创建,而`InnerClass`是普通内部类,需要外部类的实例才能创建。 **27. 内部类可以引用它的包含类的成员吗?有没有什么限制?** - **答案:** 内部类可以访问外部类的所有成员,包括私有的。但内部类不能直接访问外部类的局部变量,除非该变量被声明为`final`。 **28. 匿名内部类是否可以继承其他类或实现接口?** - **答案:** 匿名内部类不可以显式地继承其他类,但可以实现一个或多个接口。 **29. `super.getClass()`方法调用** - **答案:** 返回当前对象的直接父类的`Class`对象。 **30. `String`是最基本的数据类型吗?** - **答案:** 不是,`String`是对象类型,而非基本数据类型。 **31. `String s="Hello"; s=s+"world!";`这两行代码执行后,原始的`String`对象中的内容是否变化?** - **答案:** 原始的`String`对象内容没有变化,因为`String`是不可变的。 **32. 是否可以继承`String`类?** - **答案:** 不可以,因为`String`类是最终类,被声明为`final`。 **33. `String s=new String("xyz");`创建了几个`String Object`?二者之间有什么区别?** - **答案:** 创建了两个对象,一个是常量池中的`"xyz"`,另一个是通过`new String`创建的对象。 **34. `String`和`StringBuffer`的区别?** - **答案:** `String`是不可变的,每次修改都会创建新的对象;`StringBuffer`是可变的,可以在原有对象基础上修改。 **35. 如何把一段逗号分隔的字符串转换成一个数组?** - **答案:** 使用`split`方法,例如`String[] arr = str.split(",")`。 **36. 数组有没有`length()`这个方法?`String`有没有`length()`这个方法?** - **答案:** 数组没有`length()`方法,但有一个`length`属性;`String`类有`length()`方法。 **37. 下面这条语句一共创建了多少个对象:`String s="a"+"b"+"c"+"d";`** - **答案:** 只创建了一个对象,因为字符串字面量拼接会在编译期优化为单个字符串字面量。 **38. `try{}`里有一个`return`语句,紧跟在`try`后的`finally{}`里的code会不会被执行?** - **答案:** 会执行,无论`try`块中是否发生异常,`finally`块总是会被执行。 **39. 下面的程序代码输出的结果是多少?** - **答案:** 需要具体查看代码示例。 **40. `final`、`finally`、`finalize`的区别?** - **答案:** `final`用于声明不可变的变量或方法;`finally`是异常处理的一部分,确保代码一定会被执行;`finalize`是对象被垃圾回收前的一个回调方法。 **41. 运行时异常与一般异常有何异同?** - **答案:** 运行时异常通常是由编程错误引起的,可以在运行时由JVM检测并抛出;一般异常(检查型异常)必须在编译时处理。 **42. `Error`和`Exception`有什么区别?** - **答案:** `Error`表示系统级错误,无法预见且很难恢复;`Exception`表示可以预见的异常情况。 **43. Java中的异常处理机制的简单原理和应用?** - **答案:** 异常处理机制允许程序通过`try-catch-finally`结构捕获并处理异常。 **44. 最常见的5个`RuntimeException`?** - **答案:** `NullPointerException`、`ArrayIndexOutOfBoundsException`、`IllegalArgumentException`、`ClassCastException`、`ArithmeticException`。 **45. `JAVA`语言如何进行异常处理?关键字`throws`、`throw`、`try`、`catch`、`finally`分别代表什么意义?在`try`块中可以抛出异常吗?** - **答案:** `throws`用于声明抛出的异常;`throw`用于抛出异常;`try`用于尝试执行可能抛出异常的代码块;`catch`用于捕捉并处理异常;`finally`用于执行清理资源的代码。在`try`块中可以抛出异常。 **46. Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?`stop()`和`suspend()`方法为何不推荐使用?** - **答案:** 可以通过继承`Thread`类或实现`Runnable`接口来实现线程。`synchronized`关键字修饰同步方法。`stop()`和`suspend()`不推荐使用是因为它们可能会导致死锁问题。 **47. `sleep()`和`wait()`有什么区别?** - **答案:** `sleep()`让当前线程暂停执行指定时间,期间释放CPU但不释放锁;`wait()`使线程等待直到被唤醒,期间释放锁。 **48. 同步和异步有何异同,在什么情况下分别使用它们?** - **答案:** 同步是指任务必须等待另一个任务完成后再继续执行;异步是任务可以在另一个任务完成后才处理结果。同步适用于简单的任务执行顺序控制,异步适用于处理耗时操作以提高应用程序性能。 **49. 下面两个方法是否同步?** - **答案:** 需要具体查看代码示例。 **50. 多线程有几种实现方法?同步有几种实现方法?** - **答案:** 实现多线程的方法主要有继承`Thread`类和实现`Runnable`接口两种。同步的方法包括使用`synchronized`关键字和显式锁机制。 **51. 启动一个线程是...** - **答案:** 通常通过调用`Thread`对象的`start()`方法来启动线程。
剩余166页未读,继续阅读
- 小乱码2016-12-28很有用,遇到的一些笔记题这上面都有答案
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 工作流-OA-低代码表单的 前端工程,基于 Activiti7 Vue3 TS ElementPlus Vite,支持三种布局
- 软考冲刺:计算机技术与软件专业技术资格基础教程
- 泰迪杯数据技能大赛题目word版
- experiment-demo.zip
- HarmonyOs实战项目=>App首页架构沉浸式效果
- 课程考试系统开发基础教程
- 已测价值299元最新升级版Xiuno Light(修罗·轻鸿)v3.3 - 修罗论坛程序主题
- Delphi XE 10.3 Demo 文件
- 基于SpringBoot + Vue3 + TypeScript + Vite的个人前后端分离博客
- H5幸运刮刮乐抽奖 免公众号+直运营