当前位置: 首页 > news >正文

JAVA基础八股复习

1.局部变量一般存放在栈中,成员变量一般存放在堆中
2.什么是多态?谈谈对多态的理解?

在面向对象语言中,接口的多种不同的实现方式即为多态。用白话来说,就是多个对象调用同一个方法,得到不同的结果。
多态中存在向下转型是为了调用子类特有的方法。一般需要先向上转型,再经过instanceof判断,再进行向下转型

3.谈一谈深拷贝,浅拷贝和引用拷贝的区别?

引用拷贝是多个对象指向同一内存地址,操作其中一个变量会影响其他变量。浅拷贝创建新对象,但是对象中引用类型成员仍然指向原对象,修改了会互相影响,深拷贝则是完全修改,互不影响,重写clone方法,需要自己手动添加引用类型变量的复制逻辑。

4.Object类的常见方法有哪些?

  1. getClass方法,获取当前运行对象的Class对象
    2.hashCode 返回对象的哈希码
    3.equals,比较2个对象的内存地址是否相同
    4.clone() 返回当前对象的一份拷贝
    5.toString 返回类全限定名@对象哈希码的十六进制表示
    6.finiliaze()实力被垃圾回收时候触发的操作

5.== 和equals的区别?

1.== 基本数据类型比较值,引用类型比较地址
2.equals用于引用数据类型,一般是需要重写后比较值是否相等

6.hashCode有什么用?为什么需要有hashCode?

hashCode是为了获取哈希码。哈希码是为了或许哈希表中的索引位置
把对象加入hashset,先计算hashcode,如果hashset中没有一致的就加入,有一致的再计算下equals判断是否真的存在,大大减少了equals的判断
hashcode和equals都是为了判断对象是否相等

7.为什么重写equals时同时要重写hashCode?

如果重写了equals没有重写hashCode,会导致equals判断相等,hashCode判断不一样,如果加入hashset就可能倒置出现重复元素。
equals判断两个对象是相等的,那么hashCode也要相等
hashCode相等,也不一定是同一个对象,可能存在哈希碰撞

8.String,StringBuilder,StringBuffer之间的区别?

1.String修饰的变量是不可变的,修改后是创建一个新对象并返回
2.StringBuilder线程不安全,不会返回新对象,是在原有的对象上进行操作
3.StringBuffer是线程安全的,原因是底层用了synchronied修饰(效率折中)
4.StringBuilder和StringBuffer都继承自AbstractStringBuilder
5.String不能被修改的原有,保存字符串的数组被final修饰且是私有的,String类没有暴露修改他的方法
String类被final修饰不能被继承

9.字符串常量池了解吗?

字符串常量池是JVM为了提升性能和减少内存消耗针对字符串(String类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建

10.String的intern()方法有什么作用?

1.是一个本地方法(native),处理字符串常量池中字符串的引用,常量池中有会直接返回该对象的引用,否则在常量池中先创建再引用

11.Exception和Error的区别是什么?

属于Throwable的子类。
Exception属于程序本身可以处理的异常,可以通过catch进行捕获。Exception又分为受检查异常(必须处理)和不受检查异常(可以不处理)
Error属于程序无法处理的错误,不建议通过catch捕获,如虚拟机运行错误/内存不足

12.Checked Exception和Unchecked Execption有什么区别?

checked Execption 受检查异常,如果没有被catch或者throw处理的话,就没办法通过编译。比如IO相关,SQLEXecption等
unchecked execption不受检查异常,不处理也可以通过正常的编译, RunntimeExecption及其子类。空指针,算数错误,类型转换错误,数组越界错误等。

13.Throwable常用方法有哪些?

getMessage()返回异常发生的详细信息
toString() 返回异常发生的简要描述
getLocalizedMessage()返回异常对象的本地化信息。默认情况下和getMessage()相同
printStackTrace() 返回详细的调用栈信息,快速定位位置

14.try-catch-finally如何使用?

try用于捕获异常,catch用于处理捕获到的异常,finally语句都会被执行。
不要再finally语句块中使用return,try和fianlly中都有return语句的时候,try中的语句会被忽略

15.finally代码一定会被执行吗?

不一定,当被虚拟机终止的时候,代码就不会执行。程序所在的线程死亡,关闭CPU也会不执行

16.什么是序列化和反序列化?

序列化:将对象转换为可以存储或传输的形式,比如二进制字节流,也可以是JSON,XML等形式
反序列化:序列化生成的数据形式转换为原始的对象

17.如果有些字段不想进行序列化怎么办?

1.用transient修饰。但是对象反序列化时候这个变量不会被持久化和回复,会被重置为类型的默认值,比如int重置为默认值0

18.JAVA的IO流了解吗?

1.IO 输入和输出。数据输入到计算机内存即为输入,输出到外部存储比图数据库就是输出。
IO流分为输入流和输出流
根据数据的处理方式又分为字节流和字符流
InputStream/Reader 字节输入流/字符输入流
OutputStream/Writer 字节输出流/字符输出流

19.为什么要分为字节流和字符流呢?

文件传输本质上是通过字节传输。字符流是java虚拟机将字节转换得到的,这个过程比较耗时

http://www.dtcms.com/a/122079.html

相关文章:

  • 服务器DNS失效
  • DataGear结合AI工具制作多端适配的数据看板
  • Markdown标题序号处理工具——用 C 语言实现
  • 最新Web系统全面测试指南
  • lab-foundation开源程序AI/数据科学的瑞士军刀,开箱即用的数据科学/AI 平台 |AI/数据科学的瑞士军刀
  • java设计模式-代理模式
  • C语言操作符详解:从基础到进阶
  • Vue3中watch监视ref对象方法详解
  • win10开机启动文件夹所在位置
  • MQTT-Dashboard-数据集成
  • JS 箭头函数
  • 深度了解向量引论
  • 【Linux】——文件(下)
  • 基础环境配置
  • 使用Python的Schedule库实现定时任务,并传递参数给任务函数
  • 【教学类-102-06】蛋糕剪纸图案(留白边、沿线剪)05——Python制作1图2图6图
  • linux kernel arch 目录介绍
  • 函数作为参数传递
  • 人力外包解决方案:重构企业用人成本的最优配置
  • VUE中的pinia
  • 使用切面的权限注解,可以重复修饰同一个接口
  • vue3腾讯云直播 前端拉流(前端页面展示直播)
  • Green-AI-Resources开源程序是用于环境可持续 AI 开发和部署的精选研究、工具和最佳实践集合
  • centos-LLM-生物信息-BioGPT安装
  • RecyclerView 和 ListView从 设计理念、性能优化 和 扩展能力 三个维度展开分析
  • 基于开源 AI 大模型 AI 智能名片 S2B2C 商城小程序的京城首家无人智慧书店创新模式研究
  • 编码常见的 3类 23种设计模式——学习笔记
  • python处理excel文件
  • 127.0.0.1本地环回地址(Loopback Address)
  • LeetCode 相交链表题解:双指针的精妙应用