我的Java
语言和Jvm以及Hotspot
1、简述一下Class class(Class类),以及说明一下比较特殊的Class
Class对象代表运行其的类或接口,Enum是类的一种,Annotation是接口的一种。所有的数组也都属于一个类,并且通过反射生成一个Class对象。类型相同且维度相同的数组,共享一个对象。Java的8个原生数据类型、以及关键字void都代表Class对象。
这是合法代码:
System.out.println(void.class.getName());
System.out.println(int.class.getName());
2、Object都有哪些方法?
共有12个显示定义的方法,其中一个比较特殊的是私有静态方法。以及未显示定义,但是存在的默认构造函数。
private static native registerNatives()
public 类型的方法:equals()、toString()
public final native类型的方法:getClass()、notify()、notifyAll()、三个wait()
public native方法有:hashCode()
protected native方法有:clone()
protected finalize()
3、关于Object.clone()和Cloneable接口的关系
Object.clone()方法是可以在子类中重写(override),但是如果需要调用clone方法,则前提是这个类必须是实现了Cloneable接口。Cloneable接口没有声明任何方法。否则在调用时会抛出CloneNotSupportException。
4、关于Throwable的简单描述
来自《java doc》
java.lang.Throwable是所有Error和Exception的父类,也只有Throwable和其子类可以用于java的throw语句和cache语句。为了能够在编译期检查异常,所有Throwable和其子类,但不是RuntimeException和Error的子类,的类都是检查异常(Checked Exception)。RuntimeException和Error以及两者的子类都是非检查异常(Unchecked Exception)。
来自《java language》
从定义上来说,Throwable和所有子类统称为异常类。Throwable有两个子类:Error和Exception。
异常分为检查类异常和非检查类异常。(上面已经叙述了)
RuntimeException通常称为运行时异常类
Error通常称为Error(错误)类。
我的理解:严格意义上来讲,Error不能说是运行时异常,而是非检查类异常。非检查类异常包括运行时异常和Error。
5、关于Error的一些描述
Error的java doc非常简陋。
来自《java language》
Error通常情况下程序都不希望恢复。
我的理解:Error是可以被捕获并进行相应的操作,比如StackOverflowError| OutOfMemoryError都是可以捕获的,这是java规范中不建议捕获。
6、[]数组的最大长度是多少?
这跟vm heap的可用内存大小有关。
7、关于API和SPI以及在dubbo中的应用
【略】
8、关于异步异常
来自《java language》
异步异常只会来自两种情况:
调用Thread或ThreadGroup的stop方法,stop被调用时,线程内部可能运行在任何一个点上。
JVM一个内部错误或资源限制用来阻止它实现编程语言语义,这种情况下,VirtualMachineError子类的异常实例作为异步异常抛出。例如StackOverflowError可能是在方法调用时异步抛出。
异步异常很少见但是要编写高质量的代码,就必须很好的理解它们。
9、引发异常的几个原因
异常的产生有三个原因:
1、 throw语句抛出异常。
2、 不正常的执行:违反规则的计算表达式;类初始化异常(loading、linking、initializing);内部异常或资源限制。这些都是在可能引发问题的指定的点上的异常,而非任意点抛出。
3、异步异常发生。
10、编译期异常检查和处理
来自《java language》
11、运行期异常处理
来自《java language》
网友评论