Java笔试错题集(四)

1.下列程序的运行结果

1

2

3

4

5

6

7

8

9

10

11

public void getCustomerInfo() {

        try {

            // do something that may cause an Exception

        } catch (java.io.FileNotFoundException ex) {

            System.out.print("FileNotFoundException!");

        } catch (java.io.IOException ex) {

            System.out.print("IOException!");

        } catch (java.lang.Exception ex) {

            System.out.print("Exception!");

        }

    }

try-catch-finally 规则( 异常处理语句的语法规则

1)  必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。

2) 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
3) catch 块与相应的异常类的类型相关。
4) 一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或 其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块
5) 可嵌套 try-catch-finally 结构。
6) 在 try-catch-finally 结构中,可重新抛出异常。

7) 除了下列情况,总将执行 finally 做为结束: JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击

由此可以看出,catch只会匹配一个,因为只要匹配了一个,虚拟机就会使整个语句退出

2.

在jdk1.5的环境下,有如下4条语句:

1

2

3

4

Integer i01 = 59;

int i02 = 59;

Integer i03 =Integer.valueOf(59);

Integer i04 = new Integer(59);

以下输出结果为false的是:

正确答案: C   你的答案: C (正确)

System.out.println(i01 == i02);
System.out.println(i01 == i03);
System.out.println(i03 == i04);
System.out.println(i02 == i04);

① 无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false

② 两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false

java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存

③ 两个都是new出来的,都为false

④ int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

https://blog.csdn.net/dawn_after_dark/article/details/74154338

3.

在J2EE中,使用Servlet过滤器,需要在web.xml中配置()元素

正确答案: A B   你的答案: B C (错误)

<filter>
<filter-mapping>
<servlet-filter>
<filter-config>

Servlet过滤器的配置包括两部分:
第一部分是过滤器在Web应用中的定义,由<filter>元素表示,包括<filter-name>和<filter-class>两个必需的子元素
第二部分是过滤器映射的定义,由<filter-mapping>元素表示,可以将一个过滤器映射到一个或者多个Servlet或JSP文件,也可以采用url-pattern将过滤器映射到任意特征的URL。 

4.

下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader

正确答案: A B E   你的答案: A D E (错误)

Thread
Number
Double
Math
ClassLoader

答案:ABE

A,Thread可以被继承,用于创建新的线程

B,Number类可以被继承,Integer,Float,Double等都继承自Number类

C,Double类的声明为

1

public final class Doubleextends Numberimplements Comparable<Double>

  final生明的类不能被继承

D,Math类的声明为

1

public final class Mathextends Object

   不能被继承

E,ClassLoader可以被继承,用户可以自定义类加载器

 补充:

java.lang包中不能被继承的类:

public final class Byte

public final class Character

public static final class Character.UnicodeBlock

public final class Class<T>

public final class Compile

public final class Double

public final class Float

public final class Integer

public final class Long

public final class Math

public final class ProcessBuilder

public final class RuntimePermission

public final class Short

public final class StackTraceElement

public final class StrictMath

public final class String

public final class StringBuffer

public final class StringBuilder

public final class System

public final class Void

5.

在Java中,以下关于方法重载和方法重写描述正确的是?

正确答案: D   你的答案: D (正确)

方法重载和方法的重写实现的功能相同
方法重载出现在父子关系中,方法重写是在同一类中
方法重载的返回值类型必须一致,参数项必须不同
方法重写的返回值类型必须相同或相容。(或是其子类

方法重载(overload):

1.必须是同一个类

2方法名(也可以叫函数)一样

3参数类型不一样或参数数量不一样

方法的重写(override)两同两小一大原则:

方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型,

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限。

6.

代码 的运行结果是()

1

2

3

4

5

6

package com.sunline.java;

public class A implements B extends C{

    public static void main(String args[]){

        System.out.println("hello sunline!");

    }

}

正确答案: C   你的答案: A (错误)

在控制台打印hello sunline!
报异常java.lang.NullPoninterException
编译报错
报异常java.lang.RuntimeExcception

先继承再实现

7.

抽象类方法的访问权限默认都是public。(  )

正确答案: B   你的答案: A (错误)

正确
错误

关于抽象类

JDK 1.8以前,抽象类的方法默认访问权限为protected

JDK 1.8时,抽象类的方法默认访问权限变为default

成员变量默认为 static final

关于接口

JDK 1.8以前,接口中的方法必须是public的

JDK 1.8时,接口中的方法可以是public的,也可以是default的

JDK 1.9时,接口中的方法可以是private的

9.

在Java中,对于不再使用的内存资源,如调用完成的方法,“垃圾回收器”会自动将其释放。(  )

正确答案: B   你的答案: A (错误)

正确
错误

方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放,方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放。垃圾回收器是主要是针对堆

猜你喜欢

转载自blog.csdn.net/weixin_42173193/article/details/88761771