面试回忆录

前言

stay hungry,stay foolish

关于Java异常

Exception

这是一张大体上的Java异常体系的图片。

分类

Java的异常体系可以从checked exception 和 unchecked exception 来分类。

checked exception:除了RuntimeException及其子类、其他的Exception类及其子类都属于检查异常

unchecked exception:RuntimeException及其子类和Error

异常为什么影响性能?

当创建一个异常时,需要收集一个栈跟踪(stack track),这个栈跟踪用于描述异常是在何处创建的。构建这些栈跟踪时需要为运行时栈做一份快照,正是这一部分开销很大。运行时栈不是为有效的异常创建而设计的,而是设计用来让运行时尽可能快地运行。入栈,出栈,入栈,出栈。让这样的工作顺利完成,而没有任何不必要的延迟。但是,当需要创建一个Exception 时,JVM不得不说:“先别动,我想就您现在的样子存一份快照,所以暂时停止入栈和出栈操作,笑着等我拍完快照吧。”栈跟踪不只包含运行时栈中的一两个元素,而是包含这个栈中的每一个元素,从栈顶到栈底,还有行号和一切应有的东西。如果在一个深度为20的栈中创建了异常,那么就别指望只记录顶部的几个栈元素了――您得完完整整地记录下所有20个元素。从 main 或Thread.run (在栈底)到栈顶,记录整个栈。 因此,创建异常这一部分开销很大。从技术上讲,栈跟踪快照是在本地方法 Throwable.fillInStackTrace() 中发生的,这个方法又是从 Throwable contructor 那里调用的。但是这并没有什么影响――如果您创建一个 Exception ,就得付出代价。好在捕获异常开销不大,因此可以使用 try-catch 将核心内容包起来。您也可以在方法定义中定义 throws 子句,这样对性能不会造成什么损失

关于Java的内部类

内部类分类

广义上可分为:成员内部类、局部内部类、匿名内部类和静态内部类

静态内部类的在JVM中的位置

静态内部类到底存放在哪里了?

Java中的内存有一块地址叫静态代码区所有静态类都是放在这里的,静态类随JVM启动后就在那,不会说程序停止了,它就被垃圾回收器回收,而new是实例化的命令,它会在java中的内存中的堆区,创建一个对象,注意它们的位置,一个是在静态代码区,一个是在堆区,new出来的对象,一旦程序运行完,它就会被垃圾回收器回收。

静态内部类和所属的外部类的关系

如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:

  1. 嵌套类的对象,并不需要其外围类的对象。
  2. 不能从嵌套类的对象中访问非静态的外围类对象。

静态内部类和包装他的外部类没有任何依附关系(不同于成员,方法,匿名内部类),他们实质还是2个独立的顶层类,只不过,静态内部类使用了外部类的名称空间。

静态内部类和非静态内部类的加载、初始化顺序和外部类之间的关系

静态内部类的tips

在静态嵌套类内部, 不能访问外部类的非静态成员, 这是由Java语法中”静态方法不能直接访问非静态成员”所限定.注意, 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了.同时注意, 内部静态类Person只在类StaticTest 范围内可见, 若在其它类中引用或初始化, 均是错误的.

一 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。

二 静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量.

三 非静态内部类的非静态成员可以访问外部类的非静态变量(有点绕,需要理解一下).

Reference

http://blog.sina.com.cn/s/blog_8727584801011qm1.html

https://www.cnblogs.com/Qian123/p/5715402.html

https://www.cnblogs.com/chenssy/p/3438130.html

https://bbs.csdn.net/topics/390607261

https://www.cnblogs.com/WuXuanKun/p/6220964.html