Java笔试题和面试题(下)——软件测试工程师面试秘籍(25)

发表于:2021-12-31 10:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:G.li    来源:51Testing软件测试网原创

  试题21.Error与Exception有什么区别?
  答案:Error表示系统级的错误和程序不必处理的异常。Exception表示需要捕捉或者需要程序处理的异常。

  试题22.谈谈final、finally、finalize的区别。
  答案:final是修饰符(关键字)。如果一个类被声明为final类型,意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能既声明为abstract类型,又声明为final类型。将变量或方法声明为final类型,可以保证它们在使用中不改变。声明为final类型的变量必须在声明时给定初值,而在以后的引用中只能读取它,不可修改它。声明为final类型的方法也同样只能使用,不能重载。
  finally在异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制权就会进入finally块(如果有)。
  finalize是方法名。Java允许使用finalize()方法在垃圾回收器将对象从内存中清除之前做必要的清理工作。这个方法是由垃圾回收器在确定对象没有被引用时调用的。它是在Object类中定义的,因此所有的类都继承了它。子类重写finalize()方法以整理系统资源或者执行其他清理工作。

  试题23.HashMap和HashTable的异同是什么?
  答案:相同点是它们都属于Map接口的类,实现了将唯一键映射到特定的值上。
  不同点如下。
  (1)HashMap类没有分类或者排序,它允许一个NULL键和多个NULL值。HashTable 类似于HashMap,但是不允许NULL键和NULL值。
  (2)HashTable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
  (3)HashTable是线程安全的,即同步的;而HashMap是线程不安全的,即不同步的。
  (4)HashMap可以将空值作为一个表的条目的key或value,而HashTable不可以。

  试题24.抽象类(abstract class)和接口(interface)有什么区别? 
  答案:声明方法存在而不实现方法的类称为抽象类。抽象类用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现方法。不能创建抽象类的实例,但是可以创建一个变量,其类型是抽象类,并让它指向具体子类的一个实例。抽象类不能有抽象构造函数或抽象静态方法。抽象类的子类为它们的父类中的所有抽象方法提供实现,否则它们也是抽象类。在子类中实现抽象类的方法,知道其行为的其他类也可以在类中实现这些方法。
  接口是抽象类的变体,多继承性可通过实现接口而获得。接口中的所有方法都是抽象的,都没有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(将程序体给予)所有特殊接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于抽象类允许使用接口作为引用变量的类型,因此通常动态联编将生效。引用可以转换为接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

  试题25.接口是否可继承接口?抽象类是否可以实现接口?抽象类是否可继承实体类(concrete class)?
  答案:接口可以继承接口。抽象类可以实现接口。抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。

  试题26.是否可以继承String类?
  答案:String类是final类,故不可以继承。

  试题27.List、Set、Map是否继承自Collection接口?
  答案:List和Set可以,Map不可以。

  试题28.当一个对象被当作参数传递到一个方法后,若此方法可改变这个对象的属性,并可返回变化后的结果,那么这到底是值传递还是引用传递?
  答案:是值传递。Java只有值传递参数。当一个对象作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

  试题29.当一个线程进入对象的synchronized方法后,其他线程是否可进入此对象的其他方法?
  答案:不能,对象的synchronized方法只能由一个线程访问。

  试题30.请简述垃圾回收机制的优点和原理,并列出3种垃圾回收机制。
  答案:Java中一个显著的特点就是引入了垃圾回收机制,使C程序员最头疼的内存管理问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有了垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收机制可以有效地防止内存泄漏,有效地使用可用的内存。垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时地调用垃圾回收器对某个对象或所有对象进行垃圾回收。垃圾回收机制有分代复制垃圾回收、标记垃圾回收和增量垃圾回收。

  试题31.请简述Java中异常处理机制的原理和应用。
  答案:当Java程序违反了Java的语义规则时,VM就会将发生的错误表示为一个异常。语义规则包括两种情况:一种是Java类库内置的语义检查,如数组下标越界;另一种是Java允许程序员扩展语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类。

  试题32.请描述JVM加载类的原理。
  答案:JVM中类的加载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和加载类文件的类。

  试题33.char类型的变量中能不能存储一个汉字?为什么??
  答案:char类型的变量能存储一个汉字,因为Java以Unicode编码,一个char类型变量占16字节,所以存储一个汉字是没问题的。

  试题34.请简述Servlet的生命周期。
  答案:首先,Web容器加载Servlet,生命周期开始。然后,通过调用Servlet的init()方法进行Servlet的初始化。其次,通过运行service()方法,根据请求的不同调用不同的do×××()方法。最后,结束服务,Web容器调用Servlet的destroy()方法。

  试题35.Java如何进行异常处理?关键字throws、throw、try、catch、finally分别代表什么意义?在try块中可以抛出异常吗?
  答案:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其他子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含异常信息,调用这个对象的方法可以捕获这个异常并进行处理。Java的异常处理是通过5个关键词(try、catch、throw、throws和finally)来实现的。一般情况下用try来运行一段程序,如果出现异常,系统会抛出一个异常,并可以通过它的类型来捕捉它,或最后由默认处理程序来处理。
  try用来指定一块预防所有异常的代码。在try代码后面,应包含一个catch子句来指定想要捕捉的异常的类型。
  throw语句用来明确地抛出一个异常。
  throws用来标明一个成员函数可能抛出的各种异常。
  finally用来确保不管发生什么异常都执行。
  可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句以保护其他代码。每当遇到一个try语句,异常的框架就放到栈上面,直到所有的try语句都执行完。如果下一级的try语句没有对某种异常进行处理,栈就会展开,直到遇到有处理这种异常的try语句。

  试题36.Java是根据什么语言改进并重新设计的?
  答案:Pasacal。

查看《软件测试工程师面试秘籍》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号