我的Java基础

我的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》

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容