Java面试例题解析<一>


Java面试例题解析<一>

作为稳居编程语言排行榜前三的Java语言,具有非常多的优秀特性,同时拥有庞大的类库生态和大量的开发者。

Java语言在大数据生态体系中地位也是无可撼动,目前流行的大数据生态组件,很多都是用Java语言或基于JVM的语言(如Scala)开发的。

1.程序设计基础概念考查

对于一个初级岗求职者或者应届毕业生来说,公司除了对项目经验有所问询之外,最好的考察办法就是检查基本功,包括编程风格,以及程序结构,数据类型,赋值语句,类型转换,运算符,异常处理等程序设计基本概念的理解。

因此面试之前,一定要对自己所掌握的基本概念知识较为熟悉,尤其是对各种细致的考点要加以重视。

Java程序设计基本概念考察中,对类型转换和异常处理的考察最为常见,有以下原因:

1.在Java程序中,不同的基本类型的值经常需要进行互相转换,实际工作中因为对它们的掌握不够熟练写出错误代码的情况经常发生。

2.异常处理机制在实际工作中会经常被用来实现将程序的异常处理代码和正常业务代码分离,异常处理代码的错误要么高调抛出以让开发者定位处理或低调捕获从而不影响代码的正常执行,从而提高程序的健壮性,现在异常机制已经成为判断一门编程语言是否成熟的标准。

面试例题1

Java基本类型的类型转换有几种方式,你能简单阐述一下吗?

解析:有两种类型转换方式:自动类型转换和强制类型转换,低级数据类型到高级数据类型的转换称为自动类型转换,高级数据类型到低级数据类型的转换称为强制类型转换。

这些类型由低级到高级分别为(byte,short,char)-->int-->long-->float-->double。

以上回答基本就是这道考题的标准答案,不过如果你能就此考题回答出更为展现你基本功底的以下扩展知识点和举出具体示例,将会给面试大大加分。

加分答法:基本类型的转换首先要分为简单数据类型之间的转换和其他数据类型到字符串的转换。

1.简单数据类型之间的转换可以分为:低级到高级的自动类型转换、高级到低级的强制类型转换、通过包装类过渡类型进行转换。

自动类型转换示例:

<code>char c = 'c';
int i = c;
System.out.println("output:" + i);

输出:output:99/<code>

强制类型转换示例:

<code>double dl = 3.14;
int i = (int)dl;
//这种转换可能会导致溢出或精度的下降/<code>

包装类过渡类型转换示例:

<code>float f1 = 100.00f;
Float F1 = new Float(f1);
//根据Java的自动装箱拆箱机制,也可直接写成Float F1=f1;
Double d1 = F1.doubleValue();/<code>

2.其他数据类型转化为字符串,一般通过toString()方法;Character、Integer、Float、Double、Boolean、Short等类的toString方法用于将字符、整数、浮点数、双精度数、逻辑数、短整形等类型转化为字符串。

<code>int i1 = 10;
Integer I1 = new Integer(i1);//也可直接写成Integer I1 =i1;
String s = I1.toString();/<code>

面试例题2

关于异常处理机制,你能简单阐述一下吗?

解析:在Java程序运行时,常常会出现一些非正常的现象,根据其性质可分为错误和异常。一般来说,最常见的错误有程序进入死循环、内存泄漏等。这种情况下,程序运行时本身无法解决。Java错误对应的类为Error类。通常Java程序不对这类错误进行处理。

异常是程序执行时遇到的可避免的程序错误,常见的有数组下标越界,算法溢出(超出数值表达范围)、除数为零、无效参数等。这种情况程序运行时本身可以解决,Java异常对应的类为Exception类。它有各种不同的子类分别对应于不同类型的异常。通常异常有两种处理方式,一种是通过catch捕获,一种是通过throws声明异常。

PS:实际公司面试中,若之前有笔试,很可能会针对异常处理出一道针对具体异常类型的代码考题。所以面试者还是需要对异常处理的不同场景的具体运用有所研究和准备才行,建议在认真学习了异常处理机制的理论知识前提下,多找找相关笔试题刷刷。

面试例题3

异常处理的关键语句是什么样的?

Java异常处理的关键语句有五个:try、catch、throw、throws、finally。

1.抛出异常并进行捕获的完整语句格式如下,当然也允许try...catch或try...finally这两种写法。

<code>try{ 
//throw Exception throw语句抛出明确的异常
}
catch{
//find Exception
//hand of it
}
finally{
//must be run
}/<code>

try、catch、finally三个语句块可能会涉及以下考题:

1)try、catch、finally可以单独使用吗? 不可以,只能组成以上所述三种语句格式。

2)try中定义的变量catch和finally能够访问吗?不能,三个代码块中变量的作用域为代码块内部,分别独立而不能互相访问,如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

3)如有多个catch能够捕获所抛出异常,那多个catch块的代码都会被执行吗?不会,只会执行第一个匹配上的catch块代码。

4)finally语句块的代码一定会被执行吗?会,无论异常是否发生,finally都会被执行。

2.如果一个方法想抛出异常但自身不进行处理,交给上层处理,它就必须标记这种行为,以使方法的调用者能够正常运行程序,无需处理异常。要做到这点,我们可以在方法声明中包含一个throws子句。一个throws子句列举了一个方法可能引发的所有异常类型。

PS:Java编译器会要求方法必须声明抛出可能发生的未被捕获的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。由程序错误导致的异常属于运行时异常(RuntimeException);而程序本身没有问题,但由于像I/O错误这类异常导致的异常属于其他异常。程序本身的问题,也就是抛出的运行时异常最好是就地解决。

<code>public void info() throws Exception
{
//body of method
}
//Exception 是该方法可能引发的所有的异常,也可以是异常列表,中间以逗号隔开。/<code>


分享到:


相關文章: