首页/新闻资讯/正文详情

JavaSE知识点总结

发布时间:2026/9/27 6:54:10 来源:云帆数科 栏目:资讯中心
JavaSE知识点总结
文章目录1、intern()方法2、try...catch...finally3、hashCode和equals的关系4、什么是反射反射有什么缺点5、BIO同步阻塞、NIO同步非阻塞、AIO异步非阻塞的区别6、**面向对象的理解**7、什么是抽象类8、什么是接口9、抽象类和接口的区别10、什么是泛型11、异常12、注解13、反射14、static和final的区别以及分别存储在JVM的哪个区域15、Linux的五种IO模型16、Reactor线程模型详解17、IO零拷贝1、intern()方法“ab”.intern()这个方法会首先检查字符串常量池中是否有”ab”这个字符串如果存在则返回这个字符串常量池中的引用否则就将这个字符串在堆中的引用添加到字符串常量池中然后返回这个常量常量池中字符串的引用。以下代码是在jdk1.8中测试jdk1.6会有所不同。publicstaticvoidmain(String[]args){// 创建2个对象一个String对象在堆中一个String常量在常量池StringsnewString(2);// 判断s是否在常量池中存在则返回常量池中对象的引用此时intern指向常量池中的对象Stringinterns.intern();// s2字符串在常量池中所以返回常量池中的对象引用Strings22;// s:为堆中对象 s2:为常量池对象 所以falseSystem.out.println(ss2);// false// intern和s2都是指向常量池中的字符串所以trueSystem.out.println(interns2);// trueSystem.out.println(sintern);//falseSystem.out.println(------------------------);// 创建4个对象堆中33,3,3对象常量池:3对象Strings3newString(3)newString(3);// 判断s3是否在常量池中不存在则将s3加入常量池中并且常量池中保存的是s3的引用返回常量池中对象的引用此时s3和intern2指向同一个对象Stringintern2s3.intern();// s4字符串在常量池中所以返回常量池中的对象引用Strings433;// s3和intern2和s4指向的是同一个对象System.out.println(s3s4);// trueSystem.out.println(intern2s3);// trueSystem.out.println(intern2s4);// trueSystem.out.println(------------------------);// 创建4个对象堆中33,3,3对象常量池:3对象Strings5newString(3)newString(3);// s6字符串不在常量池中将字符串放入字符串常量池中此时与堆中的引用不同Strings633;// 判断s5是否在常量池中存在Stringintern3s5.intern();System.out.println(s5s6);// falseSystem.out.println(s6intern3);// trueSystem.out.println(s5intern3);//false}2、try…catch…finallyreturn 先把【要返回的值】保存起来然后执行 finallyfinally 里如果重新 return会覆盖返回值finally 仅修改变量不 return不会改变已经保存好的返回值。// 返回 40publicstaticintfun(){inta10;try{System.out.println(a/0);a20;// return a;}catch(Exceptione){a30;returna;}finally{a40;returna;}}// 返回 30publicstaticintfun(){inta10;try{System.out.println(a/0);a20;// return a;}catch(Exceptione){a30;returna;}finally{a40;}returna;}// 返回 30publicstaticintfun(){inta10;try{System.out.println(a/0);a20;returna;}catch(Exceptione){a30;returna;}finally{a40;}}3、hashCode和equals的关系约定如果equals(a,b) true那么a.hashCode()必须等于b.hashCode()如果a.hashCode() b.hashCode()不代表equals(a,b)true哈希碰撞如果equals重写了一定要重写 hashCode否则破坏约定使用Object.hashCode是根据随机算法生成的hashCode值(hash碰撞)无法保证两个对象equals相等的时候hashCode也相等。重写equals时必须要重写hashCode原因像一些集合容器map在进行比较两个对象相等的判定条件是hashcode和equals都相等所有在重写equals时必须要重写hashCode才能保证集合容器的正确使用。Object 默认 hashCode ()native 方法生成 identity hash code存在对象头 mark word不是内存地址Object默认equals()默认比较对象地址4、什么是反射反射有什么缺点反射是指在程序运行时动态获取类的信息、调用类的方法、访问类的属性等操作能力。在Java中反射允许程序在运行时检查和操作类、方法、字段等使得程序可以在运行时动态地创建对象、调用方法、修改属性等。优点运行时动态操作类解耦实现通用框架可以访问私有成员缺点性能低破坏封装编译不校验问题运行才暴露setAccessible(true)是修改访问权限吗答案不是修改源码的 private 修饰符只是关闭 JDK 的访问权限检查。5、BIO同步阻塞、NIO同步非阻塞、AIO异步非阻塞的区别同步应用线程主动发起 IO 拷贝将内核数据拷贝到应用内存中read/write异步内核读完数据从内核到应用内存才主动回调通知应用阻塞调用IO等API时没有数据线程挂起非阻塞没有数据直接返回不卡线程同步异步关键IO 数据拷贝是谁来做阻塞非阻塞调用 API 无数据会不会卡住线程。BIO 是同步阻塞 IO一连接一线程。来一个客户端就新建一个线程线程阻塞在 read连接多线程爆炸适合连接数少场景。NIO 是同步非阻塞 IO基于多路复用Linux 底层 epoll。少量线程监听大量连接Selector 监听 fd 就绪事件内核通知就绪后应用线程自己调用 read 拷贝数据Netty 底层就是 NIO适合高并发长连接。AIO 是异步非阻塞 IO。应用发起读请求直接返回内核把数据全部拷贝到用户缓冲区后回调通知程序Linux 原生 AIO 有缺陷Java 很少落地。6、面向对象的理解面向对象OOP是一种编程思想把程序看作多个对象的交互面向对象的核心是将现实世界的实体抽象为代码中的’对象’每个对象包含数据属性和操作数据的方法形成高内聚低耦合的模块。这样设计更符合人类思维方式让程序结构更清晰。它有四大特性封装将数据和方法封装在类内部隐藏内部细节只暴露必要接口提高安全性和维护性降低耦合。继承子类复用父类代码建立类之间的层次关系。extends关键字Java只有单继承接口可以多实现。多态同一接口行为不同对象有不同实现提高代码灵活性、拓展性。extends/implement 都是实现方式。编译时多态方法重载运行时多态方法重写。抽象抽取通用规范只定义方法签名让子类实现。抽象类abstract class、接口interface。面向过程关注怎么做步骤面向对象关注谁来做对象。在过往的项目中面向对象的思想和特性帮助我们快速响应需求变更、降低代码维护成本、提高代码质量。但我们也要平衡面向对象与其他范式函数式编程的优势防止过度设计增加系统的复杂度。7、什么是抽象类抽象类是用来捕捉子类通用特性的类它不能被实例化只能作为其他类的父类。抽象类特点用abstract关键字声明可以包含抽象方法和具体方法可以有构造方法、成员变量子类继承使用extends一个类只能继承一个抽象类单继承8、什么是接口接口是行为的抽象定义了一组方法规范实现类必须遵守这些规范。接口特点用interface关键字声明Java 8之前只能有抽象方法和常量Java 8可以有默认方法、静态方法Java 9可以有私有方法实现类使用implements一个类可以实现多个接口9、抽象类和接口的区别设计理念不同抽象类是’is-a’关系继承接口是’has-a’关系组合单继承 vs 多实现Java中类只能继承一个父类但可实现多个接口抽象类可以有构造方法和具体实现早期接口只能有抽象方法成员变量方面抽象类可以是普通变量接口只能是常量10、什么是泛型Java 泛型generics是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型也就是说所操作的数据类型被指定为一个参数。好处1.可以将运行期的异常提前到编译期2.消除强制类型转换3.提高了类型安全泛型的三种方式泛型类泛型接口泛型方法11、异常Java中所有异常和错误的根类是Throwable它有两个直接子类Error和Exception(受检异常 or 非受检异常)。定义异常是程序运行过程中发生的不正常事件会打断正常的指令流。分类分为受检异常和非受检异常错误和运行时异常。异常处理机制try-catch-finallythrow和throws。自定义异常可以通过继承Exception或RuntimeException来创建自定义异常。最佳实践例如不要吞掉异常不要使用异常控制流程使用具体的异常类型等。常见运行时异常NullPointerException空指针异常JAVA8中可用Optional来避免一般是代码中出现了空对象时抛出该异常IndexOutOfBoundsException数组下标越界异常当使用的数组下标超出数组允许范围时抛出该异常ClassCastException类型转换异常当试图将对象强制转换为不是实例的子类时抛出该异常NumberFormatException数字格式化异常当试图将一个String转换为指定的数字类型而该字符串确不满足数字类型要求的格式时抛出该异常JSONExceptionJSON异常进行JSON格式化操作时出现异常会抛出该异常ArithmeticException算术异常常见检查性异常SQLExceptionSQL异常IOExceptionIO异常在对流操作时有可能会出现的异常FileNotFoundException找不到某个文件时会抛出该异常ClassNotFoundException找不到某个类时会抛出该异常InterruptedException中断异常12、注解Java 注解Annotation又称 Java 标注是 JDK5.0 引入的一种注释机制。继承自java.lang.annotation.Annotation。注解本身不影响代码逻辑但可以通过反射获取注解信息。packagejava.lang.annotation;publicinterfaceAnnotation{booleanequals(Objectobj);inthashCode();StringtoString();Class?extendsAnnotationannotationType();}内置注解Override - 检查该方法是否是重写方法。如果发现其父类或者是引用的接口中并没有该方法时会报编译错误。Deprecated - 标记过时方法。如果使用该方法会报编译警告。SuppressWarnings - 指示编译器去忽略注解中声明的警告。SafeVarargs - Java 7 开始支持忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。FunctionalInterface - Java 8 开始支持标识一个匿名函数或函数式接口。Repeatable - Java 8 开始支持标识某注解可以在同一个声明上使用多次。自定义注解DocumentedTarget(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)publicinterfaceMyAnnotation1{}元注解元注解的作用就是负责注解其他注解Java定义了4个标准的meta-annotation类型他们被用来提供对其他annotion类型作说明。Retention - 标识这个注解怎么保存是只在代码中还是编入class文件中或者是在运行时可以通过反射访问。Documented - 标记这些注解是否包含在用户文档中。Target - 标记这个注解应该是哪种 Java 成员。Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)Retention 的取值publicenumRetentionPolicy{SOURCE,/* Annotation信息仅存在于编译器处理期间编译器处理完之后就没有该Annotation信息了 */CLASS,/* 编译器将Annotation存储于类对应的.class文件中。默认行为 */RUNTIME/* 编译器将Annotation存储于class文件中并且可由JVM读入 */}Target的取值publicenumElementType{TYPE,/* 类、接口包括注释类型或枚举声明 */FIELD,/* 字段声明包括枚举常量 */METHOD,/* 方法声明 */PARAMETER,/* 参数声明 */CONSTRUCTOR,/* 构造方法声明 */LOCAL_VARIABLE,/* 局部变量声明 */ANNOTATION_TYPE,/* 注释类型声明 */PACKAGE/* 包声明 */}注解的主要价值编译检查如Override确保正确重写方法框架配置如Spring的Autowired、Service简化配置代码生成如Lombok的Data自动生成代码测试标记如JUnit的Test13、反射反射就是在运行状态能够动态的获取该类的属性和方法并且能够任意的使用该类的属性和方法这种动态获取类信息以及动态的调用对象的方法的功能就是反射。它让Java在运行时具有像动态语言一样的特性。核心功能包括动态获取类信息Class对象创建对象newInstance调用方法invoke访问/修改字段get/set处理注解和泛型关键类Class类的元数据入口Field字段信息Method方法信息Constructor构造方法Modifier修饰符信息实际应用场景框架开发Spring通过反射实现依赖注入动态代理AOP切面编程序列化工具Jackson/GSON处理JSON测试框架JUnit发现并运行测试方法插件系统动态加载和扩展功能优点灵活性高实现动态编程框架开发的基础设施支持运行时类型检查缺点性能开销反射操作比直接调用慢安全问题可以绕过访问控制代码复杂降低可读性和维护性编译检查缺失错误在运行时才发现性能优化缓存反射对象使用setAccessible(true)减少检查避免在热点代码中使用反射获取class对象三种方式类名.class如Person.class 该方式安全可靠程序性能最高对象.getClass()如person.getClass()Class.forName(全类名)如Class.forName(“ldc.org. demo.person”)总结反射是Java在运行时动态获取和操作类信息的能力。通过Class对象可以获取字段、方法、构造器等信息并能创建对象、调用方法、访问字段。它广泛应用于框架开发如Spring、动态代理、序列化等场景。优点是灵活性高缺点是性能差、安全性低。实际使用中需要注意性能优化和安全控制。14、static和final的区别以及分别存储在JVM的哪个区域维度staticfinal语义类级成员与对象无关值/引用只能赋一次内存份数整个 JVM 只有一份与普通字段份数相同生命周期类加载即分配卸载才回收一旦赋值就冻结可变性可反复修改不可再改基本类型值不变引用类型地址不变能否叠加✅ 可单独用✅ 可单独用叠加后类级常量编译期或运行期确定仍是“只能一次”语义类型static存储位置实例 final存储位置static final存储位置优化后值直接内联到使用处引用存在堆Class对象中局部变量基本类型变量堆Class对象中堆对象中元空间运行时常量池栈字符串变量堆Class对象中的引用 堆字符串常量池堆对象的引用 -- 堆字符串常量池元空间运行时常量池– 堆字符串常量池栈引用– 堆字符串常量池对象引用堆Class对象中的引用 堆对象堆对象的引用 堆对象元空间运行时常量池– 堆对象栈引用 -- 堆对象方法元空间元空间类元空间元空间代码块元空间–15、Linux的五种IO模型https://blog.csdn.net/Linging_24/article/details/134984317?spm1001.2014.3001.550116、Reactor线程模型详解https://blog.csdn.net/Linging_24/article/details/134984818?spm1001.2014.3001.550117、IO零拷贝https://blog.csdn.net/Linging_24/article/details/134984466?spm1001.2014.3001.5501

相关推荐

怎么做下一代电池
怎么做下一代电池

论能量、原子核、电子与储能器——从“极速变向”铁律到不衰减/衰减储能的基础原理一、核心铁律:极速变向与辐照释放能量(辐照)从储能器或力里,传播出去的方式,就是极速变向基础力承载介质,放出辐照。这是你… · 2026/9/27 6:53:58

Laya-CoreML 核心概念入门:choice/score/noul 三种类型化决策,一个 Token 都不生成
Laya-CoreML 核心概念入门:choice/score/noul 三种类型化决策,一个 Token 都不生成

Laya-CoreML 核心概念入门:choice/score/noul 三种类型化决策,一个 Token 都不生成 【免费下载链接】laya-coreml Local Laya typed decisions on Apple Core ML and Neural Engine. Validated ports, ~5 ms short decisions on M3 Max, reproducible sp… · 2026/9/27 6:53:58

搞懂域名服务器后,网页浏览历史记录恢复工具怎么选不踩坑
搞懂域名服务器后,网页浏览历史记录恢复工具怎么选不踩坑

搞懂域名服务器后,网页浏览历史记录恢复工具怎么选不踩坑 做网站这行十年,我见过太多老板因为搞不清“域名”和“服务器”的关系,在恢复网页浏览历史记录时走弯路。你以为只是浏览器插件没装好?错,很多时候是服务器端的日志配置、缓存策略或者SSL证书… · 2026/9/27 6:53:58

镜面检测(Mirror Detection)介绍
镜面检测(Mirror Detection)介绍

文章目录一、镜面检测介绍二、术语表 glossary三、镜面检测模型1.通用型语义分割 / 边缘检测模型:EGNet、MINet、LDF、VST2.经典语义分割骨干网络:PSPNet、DANet、UperNet3.显著目标检测 (Salient Object Detection, SOD)4.玻璃检测 (glass detection)5.… · 2026/9/27 7:31:40

kube-prometheus 监控附加命名空间:通过 jsonnet 扩展 Prometheus 抓取范围与 ServiceMonitor 实战指南
kube-prometheus 监控附加命名空间:通过 jsonnet 扩展 Prometheus 抓取范围与 ServiceMonitor 实战指南

云原生可观测性指标监控监控大盘告警 【免费下载链接】kube-prometheus Use Prometheus to monitor Kubernetes and applications running on Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ku/kube-prometheus 点击查看 免费下载 导读 在默认部署中&… · 2026/9/27 7:31:40

Longhorn 定时快照清理:snapshot-delete 与 snapshot-cleanup 任务类型实战指南
Longhorn 定时快照清理:snapshot-delete 与 snapshot-cleanup 任务类型实战指南

云原生存储高可用容器编排 【免费下载链接】longhorn Cloud-Native distributed storage built on and for Kubernetes 项目地址: https://gitcode.com/gh_mirrors/lo/longhorn 点击查看 免费下载 导读 Longhorn 的 RecurringJob(定时任务)… · 2026/9/27 7:31:40

Linux系统管理工具supervisor使用详解!
Linux系统管理工具supervisor使用详解!

supervisor是一个进程管理工具,当进程中断的时候supervisor能自动重新启动它,同时,它也是一个客户端/服务器系统,允许用户在类unix操作系统上控制多个进程。supervisor是用Python开发的一套通用的进程管理程序,能将一个… · 2026/9/27 7:31:34

MySQL复杂查询与Union操作
MySQL复杂查询与Union操作

在日常开发中,数据查询是数据库操作的核心部分,尤其是在处理多表数据时,单一的查询方式无法满足业务的复杂需求。因此,掌握复杂查询技术变得至关重要。 本教程将介绍如何使用UNION操作进行多表数据合并查询,并通过CASE语句实现条件选择。通过对这些技巧的学习,可以轻松处… · 2026/9/27 7:31:34

用代码设计你自己的机器人:Build123d、Text-to-CAD 与 ForgeCAD 参数化建模入门指南
用代码设计你自己的机器人:Build123d、Text-to-CAD 与 ForgeCAD 参数化建模入门指南

用代码设计你自己的机器人:Build123d、Text-to-CAD 与 ForgeCAD 参数化建模入门指南 【免费下载链接】every-embodied 仅需Python基础,从0构建自己的具身智能机器人;从0逐步构建VLA/OpenVLA/SmolVLA/Pi0, 深入理解具身智能 项目… · 2026/9/27 7:31:28

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码