【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已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了JAVA、Spring、计算机网路、操作系统、计算机网络、MySQL、算法与数据结构、中间件等一系列知识点,总结出了高频面试考点(附有答案),事半功倍,为大家春秋招助力。 - 本专栏内容分为五章

全部评论
真的会有面试官问 标识符的命名规则 吗😂
点赞 回复 分享
发布于 2022-07-07 01:03
我个人觉得大伙还是得了解,而且真面试出了,我觉得也就是面试官问一嘴,整体不超过30s
点赞 回复 分享
发布于 2022-07-07 01:25

相关推荐

03-05 15:13
运营
点赞 评论 收藏
分享
漂亮的海豚在炒股:把西电加粗
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务