1. 一个类的构造方法的作用是什么?若一个类中没有声明构造方法,该程序能正确执行吗?为什么?
- 主要作用是完成对类对象的初始化工作。可以执行。因为一个类中即使没有声明构造方法也会有默认的不带参数的构造方法
2. 构造方法有哪些特性?
- 名字与类名相同
- 没有返回值,但不能用void声明构造函数
- 生成类的对象时自动执行,无需调用
3. 静态变量和实例变量区别
- 静态变量:静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间
- 实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量
4. 静态变量和普通变量区别
- static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
- static成员变量的初始化顺序按照定义的顺序进行初始化
5. 静态方法和实例方法有何不同?
主要体现在两个方面:
- 在外部调用静态方法时,可以使用“类名.方法名”的方式,也可使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象
- 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制
6. 在一个静态方法内调用一个非静态成员为什么是非法的?
- 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态成员变量
7. 获取用键盘输入的常用的两种方法
Scanner input = new Scanner(System.in);
String s = input.nextLine();
input.close();
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();
8. Java异常类层次结构图
- 在Java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable : 有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类
- Error(错误):是程序无法处理的错误, 表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,JVM一般会选择线程终止
- 这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在Java中,错误通过Error的子类描述
- Exception(异常):是程序本身可以处理的异常。Exception类有一个重要的子类RuntimeException.RuntimeException异常由Java虚拟机抛出。NullPointerException(要访问的变量没有引用任何对象时,抛出该异常)、ArithmeticException(算数运算异常,一个整数除以0时,抛出该异常)和ArrayIndexOutOfBoundsException(下标越界异常)
- 注意:异常能被程序本身可以处理,错误是无法处理
9. Throwable类常用方法
- public string getMessage() : 返回异常发生时的详细信息
- public string toString():返回异常发生时的简要描述
- public string getLocalizedMessage():返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以声称本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与getMessage()返回的结果相同
- public void printStackTrace() : 在控制台上打印Throwable对象封装的异常
10. 异常处理总结
- try块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块
- catch块:用于处理try捕获到的异常
- finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到的return语句时,finally语句块将在方法返回之前被执行
以下四种特殊情况下finally块不会被执行:
- 在finally语句块中发生了异常
- 在前面的代码中用了System.exit()退出程序
- 程序所在的线程死亡
- 关闭CPU
上一篇:Java面试手册V2.0+突击V3.0知识点整理(五)
|