java异常面试题及编程题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bubble1210/article/details/50776103

概念题

1.java中用来抛出异常的关键字是什么?

throw

2.异常和Error的区别?

error:是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
Exception :表示可恢复的例外,这是可捕捉到的

3.什么是异常?

所谓异常是指程序在运行过程中发生的一些不正常事件。(如:除0溢出,数组下标越界,所读取的文件不存在)

4.什么类是所有异常类的父类

Throwable类

5.java虚拟机能自动处理的异常是什么?

运行异常

6.Try-catch-finally的执行过程

try{}语句块中放的是要检测的java代码,可能有会抛出异常,也可能会正常执行
catch(异常类型){}块是当java运行时系统接收到try块中所抛出异常对象时,会寻找处理这一异常catch块来进行处理(可以有多个catch块)
finally{}不管系统有没有抛出异常都会去执行,一般用来释放资源。除了在之前执行了System.exit(0)

7.常见的异常?你的理解。

常见异常:RuntimeException,IOException,SQLException,ClassNotFoundException

8.final, finally, finalize的区别。

final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

9.Java中的异常处理机制的简单原理和应用。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

10.运行时异常与一般异常有何异同?

Java提供了两类主要的异常:运行时异常runtime exception和一般异常checked exception。checked 异常。对于后者这种异常,JAVA要求程序员对其进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。
运行时异常我们可以不处理。这样的异常由虚拟机接管。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。 

程序题
.编写一个员工类,
 (1) 有属性:
编号,姓名,年龄,工资,身份证号码,员工人数,员工工资总额
(2) 有构造器: 
构造器1:设置编号,年龄,姓名;如果年龄小于18,抛出年龄低异常;如果年龄大于60
抛出年龄高异常,如果姓名为null或为空字符串,抛出空异常。
构造器2:设置工资,设置身份证号码;如果工资低于600,抛出工资低异常。
 (3) 有方法
增加工资   addSalary(double addSalary),抛出工资高异常,当增加后的工资大于员工工资总额时,抛出此异常。
减少工资  minusSalary(double minusSalary), 抛出工资低异常,当减少后的工资低于政府最低工资时,抛出工资低异常。
显示员工工资总额方法:showTotalSalary(), 抛出空异常,当工资总额为0时,抛出此异常。
显示员工人数:void showTotalEmployee(),抛出空异常。当员工人数为0时,抛出此异常。
2.编写一道自定义异常。
package xianweifu;

public class exceptionDemo {

	public static void main(String[] args) {
		Bar bar = new Bar();
		try{
			bar.enter(15);
		}catch(AgeLessThanEighteenException e){
			System.out.println("错误信息:"+e.getMessage());
		}
	}

}
//定义了一个异常类
class AgeLessThanEighteenException extends Exception{
	private String message;//描述异常信息
	public AgeLessThanEighteenException(String message){
		this.message = message;
	}
	public String getMessage(){
		return message;
	}
}
class Bar{
	public void enter(int age)throws AgeLessThanEighteenException{
		if(age<18){
			throw new AgeLessThanEighteenException("未成年");
		}
		else{
			System.out.println("欢迎光临");
		}
	}
}
反射与泛型

1.Java反射机制的作用

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类所以属性和方法;对于任意一个对象,都能调用它的任意一个方法;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.什么是反射?什么是泛型?

反射:是指主要指程序可以访问、检测和修改它本身状态或行为的一种能力

泛型:泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

3.Java的泛型是如何工作的 ? 什么是类型擦除 ?

Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类型在编译后都会被清除掉

面试题:什么是泛型?泛型的优点?jdk各版本之间的区别?

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 
  Java语言引入泛型的好处是安全简单。 
  在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 
  泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。 


猜你喜欢

转载自blog.csdn.net/Bubble1210/article/details/50776103