【Java八股-第三期】基础 - Java基础
提纲:
基础八股知识🔥
内部类
成员内部类 & 静态内部类
局部内部类 & 匿名内部类
拷贝
浅拷贝
深拷贝
异常体系
Error
Exception
异常处理 try...catch 代码块
面试八股真题🎈
1、面向对象和面向过程的区别
2、标识符的命名规则
3、final有哪些用法
4、static都有哪些用法
5、try catch finally,try里有return,finally还执行么
6、Excption与Error包结构
7、OOM你遇到过哪些情况,SOF你遇到过哪些情况
一、基础八股知识点
1. 内部类
-
成员内部类 & 静态内部类
-
主要是用来弥补单继承的缺陷,补充类的功能
-
除了外部类都无法直接访问内部类,可以提供更好的隐蔽性
-
内部类定义的 private 属性外部类也不可以访问,因此对外界来说,比 private 的访问权限更小
-
两者区别:主要是成员内部类不可以有任何静态的成员,并且必须先创建外部类才能创建内部类对象,而静态内部类可以有静态或非静态的成员,且获取静态内部类对象时,不需要先创建外部类对象
-
-
局部内部类 & 匿名内部类
-
主要是在方法执行过程中需要解决一些问题使用到的类,匿名内部类常用作回调接口进行使用,例如调用 sort 方法时可以传入的 Comparator 接口的匿名内部类
-
匿名内部类由于没有类名,必须实现一个接口或继承一个类,在创建该类的时候就创建一个实例
-
局部内部类与匿名内部类使用方法的参数时,为了保证内部类与外部类参数数值一致,只能使用final修饰的不可变参数
-
2. 拷贝
-
浅拷贝 → 实现了 Clonable 接口的类的 clone 方法,实际上是浅拷贝
-
基本类型:直接拷贝值
-
引用类型/对象:拷贝对象的地址,即拷贝后的引用与原引用指向同一个对象
-
String:String 对象是不可变的,因此在拷贝后,若原引用发生改变,其实是原引用指向一个新的 String 对象
-
-
深拷贝
-
当需要拷贝一份值相同但地址不同的对象时,就可以使用序列化与反序列化的方式进行对象的深拷贝
-
在 Java 中,对于实现了 Serializable 的对象,可以使用 ObjectOutputStream 的 writeObject 方法,将其序列化为二进制流,并通过 ObjectInputStream 的 readObject 方法接收并生成一个深拷贝的对象
-
3. 异常体系
-
Error
-
通常是虚拟机出错,如 OutOfMemoryError,noClassDefFoundError,StackOverFlowError 等,通常会导致应用程序直接中断,无法被捕获和处理
-
-
Exception
-
编译期异常
-
ClassNotFoundException
-
IOException
-
-
运行时异常
-
ClassCast
-
ArrayIndexOutOfBound
-
NullPoint
-
NumberFormat
-
-
-
异常处理 try...catch 代码块
-
在加载类时会在字节码中会根据 catch 抓取的异常生成一个 Exception Table 异常表,当执行 Try 代码块发生异常时,就会和异常表中的异常进行匹配,找到匹配异常的 catch 代码块位置,并执行 catch 代码块
-
finally 代码块会在编译时,在异常表中添加一个 all 异常,表示捕获所有异常,并且会在字节码中 Try 代码块和 Catch代码块后都加上 finally 代码块的内容,因此 finally 代码块无论如何都会执行,常用于完成资源的释放
-
不要在 finally 中进行 return,首先在 finally 中进行 return 会覆盖 try 代码块中的 return,即最后执行的是 finally 块的return 语句,可能导致程序返回值错误,另外在 finally 中进行 return,会让字节码中的 athrow 指令消失,从而无法抛出异常
-
不要在 Spring 事务方法中使用 try...catch 处理异常,会导致事务回滚失效
-
try - catch - finally 也可以使用 try - with - resources 替代,更加简洁
-
二、面试八股真题🎈🎈🎈
1、面向对象和面向过程的区别
-
面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。
-
面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤, 而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特 性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。 但是性能上来说,比面向过程要低。
2、标识符的命名规则
-
标识符的含义: 是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等等,都是标识符。
-
(硬性要求) 标识符可以包含英文字母,0-9的数字,$以及_
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【📫专栏目录在最底部📫】 - 本专栏适合于JAVA已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了JAVA、Spring、计算机网路、操作系统、计算机网络、MySQL、算法与数据结构、中间件等一系列知识点,总结出了高频面试考点(附有答案),事半功倍,为大家春秋招助力。 - 本专栏内容分为五章