设计网站公司 露 联湖南岚鸿,做网站能用自己电脑吗,苏州建站模板源码,wordpress文章cms模板目录
47、Java 语言如何进行异常处理#xff0c;关键字#xff1a;throws、throw、try、catch、finally 分别如何使用#xff1f;
48、运行时异常与受检异常有何异同#xff1f;
49、列出一些你常见的运行时异常#xff1f;
50、阐述 final、finally、finalize 的区别…目录
47、Java 语言如何进行异常处理关键字throws、throw、try、catch、finally 分别如何使用
48、运行时异常与受检异常有何异同
49、列出一些你常见的运行时异常
50、阐述 final、finally、finalize 的区别。
52、List、Set、Map 是否继承自 Collection 接口
53、阐述 ArrayList、Vector、LinkedList 的存储性能和特性。
54、Collection 和 Collections 的区别
55、List、Map、Set 三个接口存取元素时各有什么特点 47、Java 语言如何进行异常处理关键字throws、throw、try、catch、finally 分别如何使用 Java 通过面向对象的方法进行异常处理把各种不同的异常进行分类并提供了良好的接口。在 Java 中每个异常都是一个对象它是 Throwable 类或其子类的实例。当一个方法出现异常后便抛出一个异常对象该对象中包含有异常信息调用这个对象的方法可以捕获到这个异常并可以对其进行处理。Java 的异常处理是通过 5 个关键词来实现的try、catch、throw、throws 和 finally。一般情况下是用 try 来执行一段程序如果系统会抛出throw一个异常对象可以通过它的类型来捕获catch它或通过总是执行代码块finally来处理try 用来指定一块预防所有异常的程序catch 子句紧跟在 try 块后面用来指定你想要捕获的异常的类型throw 语句用来明确地抛出一个异常throws 用来声明一个方法可能抛出的各种异常当然声明异常时允许无病呻吟finally 为确保一段代码不管发生什么异常状况都要被执行try 语句可以嵌套每当遇到一个 try 语句异常的结构就会被放入异常栈中直到所有的 try 语句都完成。如果下一级的try 语句没有对某种异常进行处理异常栈就会执行出栈操作直到遇到有处理这种异常的 try 语句或者最终将异常抛给 JVM。 48、运行时异常与受检异常有何异同 异常表示程序运行过程中可能出现的非正常状态运行时异常表示虚拟机的通常操作中可能遇到的异常是一种常见运行错误只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关即使程序设计无误仍然可能因使用的问题而引发。Java 编译器要求方法必须声明抛出可能发生的受检异常但是并不要求必须声明抛出未被捕获的运行时异常。异常和继承一样是面向对象程序设计中经常被滥用的东西在 Effective Java 中对异常的使用给出了以下指导原则
不要将异常处理用于正常的控制流设计良好的 API 不应该强迫它的调用者为了正常的控制流而使用异常
1对可以恢复的情况使用受检异常对编程错误使用运行时异常
2避免不必要的使用受检异常可以通过一些状态检测手段来避免异常的发生
3优先使用标准的异常
4每个方法抛出的异常都要有文档
5保持异常的原子性
6不要在 catch 中忽略掉捕获到的异常 49、列出一些你常见的运行时异常
ArithmeticException算术异常
ClassCastException 类转换异常
IllegalArgumentException 非法参数异常
IndexOutOfBoundsException 下标越界异常
NullPointerException 空指针异常
SecurityException 安全异常 50、阐述 final、finally、finalize 的区别。
final修饰符关键字有三种用法如果一个类被声明为 final意味着它不能再派生出新的子类即不能被继承因此它和 abstract 是反义词。将变量声明为 final可以保证它们在使用中不被改变被声明为 final 的变量必须在声明时给定初值而在以后的引用中只能读取不可修改。被声明为 final 的方法也同样只能使用不能在子类中被重写。
finally通常放在 try…catch…的后面构造总是执行代码块这就意味着程序无论正常执行还是发生异常这里的代码只要 JVM 不关闭都能执行可以将释放外部资源的代码写在 finally 块中。
finalizeObject 类中定义的方法Java 中允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的通过重写 finalize()方法可以整理系统资源或者执行其他清理工作。
51、类 ExampleA 继承 Exception类 ExampleB 继承 ExampleA。
有如下代码片断
try {
throw new ExampleB(b)
} catchExampleA e{System.out.println(ExampleA);
}
catchException e{
System.out.println(Exception);
}
请问执行此段代码的输出是什么
输出ExampleA。根据里氏代换原则[能使用父类型的地方一定能使用子类型]抓取 ExampleA 类型异常的 catch 块能够抓住 try 块中抛出的 ExampleB 类型的异常
面试题 - 说出下面代码的运行结果。此题的出处是《Java 编程思想》一书
class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
class Human {public static void main(String[] args)throws Exception {try {try {throw new Sneeze();}catch ( Annoyance a ) {System.out.println(Caught Annoyance);throw a;}}catch ( Sneeze s ) {System.out.println(Caught Sneeze);return ;}finally {System.out.println(Hello World!);}}
} 52、List、Set、Map 是否继承自 Collection 接口 List、Set 是Map 不是。Map 是键值对映射容器与 List 和 Set 有明显的区别而 Set 存储的零散的元素且不允许有重复元素数学中的集合也是如此List是线性结构的容器适用于按数值索引访问元素的情形。 53、阐述 ArrayList、Vector、LinkedList 的存储性能和特性。 ArrayList 和 Vector 都是使用数组方式存储数据此数组元素数大于实际存储的数据以便增加和插入元素它们都允许直接按序号索引元素但是插入元素要涉及数组元素移动等内存操作所以索引数据快而插入数据慢Vector 中的方法由于添加了 synchronized 修饰因此 Vector 是线程安全的容器但性能上较ArrayList 差因此已经是 Java 中的遗留容器。LinkedList 使用双向链表实现存储将内存中零散的内存单元通过附加的引用关联起来形成一个可以按序号索引的线性结构这种链式存储方式与数组的连续存储方式相比内存的利用率更高按序号索引数据需要进行前向或后向遍历但是插入数据时只需要记录本项的前后项即可所以插入速度较快。Vector 属于遗留容器Java 早期的版本中提供的容器除此之外Hashtable、Dictionary、BitSet、Stack、Properties都是遗留容器已经不推荐使用但是由于 ArrayList 和 LinkedListed 都是非线程安全的如果遇到多个线程操作同一个容器的场景则可以通过工具类Collections 中的 synchronizedList 方法将其转换成线程安全的容器后再使用这是对装潢模式的应用将已有对象传入另一个类的构造器中创建新的对象来增强实现。 补充遗留容器中的 Properties 类和 Stack 类在设计上有严重的问题Properties是一个键和值都是字符串的特殊的键值对映射在设计上应该是关联一个Hashtable 并将其两个泛型参数设置为 String 类型但是 Java API 中的Properties 直接继承了 Hashtable这很明显是对继承的滥用。这里复用代码的方式应该是 Has-A 关系而不是 Is-A 关系另一方面容器都属于工具类继承工具类本身就是一个错误的做法使用工具类最好的方式是 Has-A 关系关联或Use-A 关系依赖。同理Stack 类继承 Vector 也是不正确的。Sun 公司的工程师们也会犯这种低级错误让人唏嘘不已。 54、Collection 和 Collections 的区别 Collection 是一个接口它是 Set、List 等容器的父接口Collections 是个一个工具类提供了一系列的静态方法来辅助容器操作这些方法包括对容器的搜索、排序、线程安全化等等。 55、List、Map、Set 三个接口存取元素时各有什么特点 List 以特定索引来存取元素可以有重复元素。Set 不能存放重复元素用对象的equals()方法来区分元素是否重复。Map 保存键值对key-value pair映射映射关系可以是一对一或多对一。Set 和 Map 容器都有基于哈希存储和排序树的两种实现版本基于哈希存储的版本理论存取时间复杂度为 O(1)而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键key构成排序树从而达到排序和去重的效果。 要想了解更多 千题千解·Java面试宝典_时光の尘的博客-CSDN博客