Java基础数据类型与核心概念(java基础数据类型口诀)
myzbx 2025-06-23 20:56 4 浏览
一、Java基础数据类型与核心概念
1. 八大基础数据类型及其包装类
- 基础类型:byte、short、int、long、float、double、char、boolean。
- 包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean。
- 区别:基础类型直接存值于栈中,包装类是对象(堆内存),支持null和额外方法(如类型转换)。
- 应用场景:集合框架(如HashMap)要求对象类型,需用包装类;性能敏感场景优先用基础类型。
2. Java三大特性
- 封装实现:通过private修饰属性,提供getter/setter方法。例如BankAccount类隐藏balance字段。场景:保护敏感数据(如密码)、控制数据有效性(如金额非负)。
- 继承实现:extends关键字,子类复用父类方法/属性。例如Dog继承Animal并重写makeSound()。场景:代码复用(如UI组件复用)、多态基础。
- 多态实现:方法重写(@Override)、接口实现。例如父类引用指向子类对象Animal animal = new Dog()。场景:动态行为(如策略模式)、接口统一(如List与ArrayList/LinkedList)。
3. 重载(Overload)与重写(Override)
- 区别
- 重载重写同一类中,方法名相同、参数列表不同子类覆盖父类方法,需相同签名编译时多态运行时多态返回类型可不同访问权限不能比父类严格示例:setRadius(float)与setRadius(int)示例:Dog重写Animal的makeSound()
- 应用场景:重载用于方法多样性(如不同参数类型),重写用于扩展行为(如子类特有逻辑)。
4. 访问修饰符作用范围
修饰符 | 作用范围 |
public | 全局可见(跨包、跨类) |
protected | 同包+子类(跨包子类) |
private | 仅当前类 |
默认(包私有) | 同包内 |
- 场景:private保护核心算法,protected允许子类扩展,public暴露API。
5.==与equals()
- 区别
- ==equals()基础类型比值,对象比内存地址对象内容比较(需重写)默认行为(Object中==比较地址)默认与==一致,但可重写(如String)
- 正确使用:基础类型用==,对象优先用equals(),避免直接==比较对象(除非确定同一实例)。
6.hashCode()相同,equals()是否一定为true?
- 答案:否。哈希冲突可能导致不同对象hashCode()相同,但equals()返回false。例如,仅按部分字段生成hashCode()时。
- 示例:Person类hashCode()仅用年龄,但equals()比较姓名和年龄。
7. 重写equals()必须重写hashCode()的原因
- 一致性要求:Java规范规定,若a.equals(b)为true,则a.hashCode()必须等于b.hashCode()。否则,哈希表(如HashMap)无法正确存储/检索对象。
- 场景:自定义对象需存入集合时,必须保证equals和hashCode逻辑一致。
8.short s = 1; s = s + 1;与s++的区别
- 区别:s + 1:1是int,运算结果为int,需强制转换(s = (short)(s + 1))。s++:自动类型转换,等价于s += 1。
- 错误示例:s = s + 1会编译失败,而s += 1合法。
9. 浅拷贝与深拷贝
- 区别
- 浅拷贝深拷贝仅复制对象引用递归复制所有嵌套对象修改引用字段影响原对象完全独立
- 实现:浅拷贝:Clone()方法默认实现(如Person.clone())。深拷贝:重写clone()递归复制,或通过序列化/反序列化。
- 场景:浅拷贝用于简单对象,深拷贝用于含复杂引用(如Address字段)。
10. 线程安全单例模式
- 实现方式饿汉式:类加载时初始化,线程安全但浪费资源。双重检查锁:private volatile Singleton instance; + 同步块。静态内部类:延迟加载,线程安全(如DoubleCheckedLockSingleton)。枚举:天然线程安全,防反射破坏。
- 场景:资源池(如数据库连接)、配置中心。
11.final、finally、finalize
- 区别
- finalfinallyfinalize修饰不可变类/方法/变量try块后必执行代码Object方法,GC前调用(已过时)示例:final String NAME = "常量"示例:关闭资源(如IO流)建议用try-with-resources替代。
- 场景:final定义常量,finally释放资源,finalize避免使用。
12. JVM内存区域
区域 | 作用 | 示例 |
程序计数器 | 记录当前线程执行位置 | 多线程切换时恢复执行 |
Java堆 | 存储对象实例 | new Object() |
方法区 | 存储类元数据、常量池 | static变量、String.intern() |
虚拟机栈 | 方法调用栈帧 | 局部变量表、操作数栈 |
13. 类加载机制
- 双亲委派模型:类加载器优先委派给父类加载,最后由子类加载器加载(如AppClassLoader加载应用类)。
- 类加载器类型:启动类加载器(BootstrapClassLoader):加载rt.jar。扩展类加载器(ExtensionClassLoader):加载ext目录。应用类加载器(AppClassLoader):加载CLASSPATH。
- 场景:热部署(自定义类加载器)、插件化架构。
14. 反射机制
- 定义:运行时动态获取类信息、调用方法/构造器。核心类:Class、Method、Field。
- 应用:框架(如Spring依赖注入)。动态代理(如JDK Proxy)。反序列化(通过Class.forName())。
- 性能:反射比new慢10倍以上,建议缓存Class对象。
15. 多态实现
- 方式:继承+重写:子类重写父类方法(如Dog重写Animal的makeSound())。接口:多类型实现同一接口(如Flyable接口的Bird和Airplane)。
- 动态绑定:JVM在运行时根据实际对象类型调用方法。
16. 抽象类 vs 接口
抽象类 | 接口 |
可含方法实现 | 仅声明方法(Java 8+允许默认方法) |
单继承 | 多实现 |
适合状态管理 | 适合定义规范(如Serializable) |
- 选择:抽象类:代码复用(如AbstractList提供基础实现)。接口:多角色扩展(如Robot同时实现Worker和Rechargeable)。
17. Error vs Exception
- 区别
- ErrorException严重系统错误(如OOM)程序可处理的异常(如NullPointerException)不可恢复分为Checked(必须处理)和Unchecked(可选处理)
- 处理:Error通常不捕获,Exception需通过try-catch或声明throws。
18.NoClassDefFoundErrorvsClassNotFoundException
- 区别
- NoClassDefFoundErrorClassNotFoundException类加载时初始化失败(如依赖缺失)反射加载类时未找到类文件Error(不可恢复)Exception(需处理)
- 场景:NoClassDefFoundError常见于动态代理或插件加载失败,ClassNotFoundException常见于反射调用错误类名。
19.try中return与finally执行顺序
- 规则:try中return前,先执行finally,再返回结果。finally中有return会覆盖try的返回值。
- 示例:public int test() { try { return 1; } finally { return 2; } // 最终返回2 }
20. 异常处理与自定义异常
- 机制:try-catch-finally:捕获异常,释放资源。自定义异常:继承Exception(受检)或RuntimeException(非受检)。例如:class OrderException extends Exception { // 业务异常 public OrderException(String msg) { super(msg); } }
- 场景:自定义异常区分错误类型(如InvalidOrderStateException)。
基于原始20个问题,可以延伸出以下进阶问题(按技术领域分类),每个问题均包含核心考点和典型应用场景:
一、数据类型与类型系统扩展
- 自动装箱/拆箱的原理及陷阱考点:Integer缓存机制(-128~127)、NPE风险场景:高并发场景下频繁装箱的性能损耗(如阿里巴巴Java规范禁止在循环中装箱)
- 类型擦除与泛型边界考点:List<String>与List<Integer>本质相同、通配符<?>与<? extends T>场景:Collections.unmodifiableList()的实现原理
- 数值类型优化技巧考点:byte[]替代String传输、BitSet节省内存空间场景:大数据量缓存设计(如Redis键值对存储)
二、面向对象设计扩展
- 组合优于继承的实践案例考点:Java序列化漏洞(readObject方法)、里氏替换原则破坏场景:策略模式实现支付系统(如支付宝/微信/银联支付组件)
- 多态的底层实现机制考点:虚方法表(vtable)、invokevirtual指令场景:JVM性能调优(如热点代码内联优化)
- 设计模式与特性关联考点:装饰器模式(动态组合功能)、代理模式(Spring AOP实现)场景:微服务权限控制链(RBAC模型实现)
三、内存与并发扩展
- JVM参数调优场景考点:-XX:MetaspaceSize与-XX:MaxMetaspaceSize、G1垃圾回收器参数场景:Elasticsearch集群堆外内存配置
- 线程安全实现范式考点:AtomicInteger与LongAdder选择依据、StampedLock读写分离场景:秒杀系统库存扣减(Redis+Lua vs 分布式锁)
- 内存模型与可见性考点:volatile三特性(可见性/禁止指令重排/不保证原子性)场景:双重检查锁单例的volatile必要性
四、反射与元编程扩展
- 反射性能优化方案考点:MethodHandle替代传统反射、CGLIB动态代理场景:MyBatis XML解析性能优化
- 元空间(Metaspace)溢出排查考点:类加载链分析(-XX:+TraceClassLoading)、动态代理类膨胀场景:Dubbo SPI扩展机制导致的内存泄漏
- JDK动态代理原理考点:InvocationHandler调用链、Proxy类生成逻辑场景:Spring事务管理的AOP实现
五、集合框架扩展
- HashMap源码级解析考点:红黑树阈值(8/64)、ConcurrentHashMap分段锁演进场景:线程安全Map选择(Collections.synchronizedMap vs ConcurrentHashMap)
- 队列实现对比考点:ArrayBlockingQueue数组实现 vs LinkedBlockingQueue链表实现场景:Kafka消息队列的环形缓冲区设计
- 自定义集合实现考点:Comparable与Comparator区别、TreeSet红黑树维护场景:订单系统按创建时间排序展示
六、异常体系扩展
- Checked/Unchecked异常设计哲学考点:RuntimeException的传播特性、@ControllerAdvice全局处理场景:REST API统一错误码返回(如HTTP 400/500)
- OOM异常细分类型考点:java.lang.OutOfMemoryError: GC overhead limit exceeded场景:Full GC频繁导致的响应时间抖动排查
- 异常链机制考点:initCause()方法、Exception构造函数参数场景:分布式链路追踪(如SkyWalking异常堆栈透传)
七、JVM高级特性
- 类加载器双亲委派破坏场景考点:Tomcat多Context类隔离、spi机制(java.util.ServiceLoader)场景:Kafka多版本共存部署
- JIT编译优化策略考点:热点代码探测(Counter/Timer)、方法内联阈值场景:高并发服务性能调优(如支付宝交易链路)
- GC算法对比实践考点:CMS并发收集停顿时间 vs G1预测停顿场景:JVM监控工具选择(VisualVM vs Arthas)
八、生态工具扩展
- AOP实现原理对比考点:AspectJ编译时织入 vs Spring运行时代理场景:Spring Boot Actuator监控指标采集
- 字节码增强工具对比考点:Javassist动态修改字节码 vs ASM底层操作场景:MyBatis XML映射文件编译过程
- JVM监控体系构建考点:JMX远程监控、jstack线程dump分析场景:生产环境Full GC根因分析(如大对象堆积)
扩展问题应用场景矩阵
技术领域 | 企业级应用场景 | 性能指标影响 | 常见问题类型 |
反射机制 | ORM框架动态SQL生成 | CPU占用率↑10-20% | 堆栈溢出(StackOverflow) |
并发编程 | 分布式锁实现 | 响应时间P99↑500ms | 死锁、活锁 |
JVM调优 | 大数据ETL任务 | GC时间占比从40%→15% | OOM、频繁Full GC |
设计模式 | 微服务网关路由策略 | QPS提升3倍 | 版本兼容性问题 |
集合框架 | 缓存系统设计 | 内存占用减少30% | 并发修改异常( |
相关推荐
- 轻松!午休十分钟搞懂 Vue 组件 data 为啥是函数,悄悄涨知识
-
上午敲代码敲得肩膀发酸?来,端起咖啡,咱在午休时间唠点轻松的——一道让无数前端人又爱又恨的Vue面试题:为啥组件里的data必须是个函数,写成对象就报错?别慌,这事儿没你想的复杂,就像拆...
- 你知道吗,python编程中,有哪些数据类型是不可变的?
-
在Python中,不可变数据类型是指对象一旦创建后,其值或内容不能被修改。若尝试修改,Python会创建一个新对象。以下是不可变数据类型的详细分类及验证方法:一、不可变数据类型清单1.整数(...
- 12 有符号Byte数据类型(1byte有符号整数取值范围)
-
有符号Byte数据类型。来看一下有符号Byte数据。如果需要同时存储、正值和复制,那就需要有一个符号位来表示它是正数还是负数,Byte数据类型是这样的数据类型,它是有八位表示,最高位是符号位,它表示的...
- Redis数据类型介绍(redis数据类型详解)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- C语言的数据类型(c语言的数据类型有哪些)
-
C语言的数据类型在C语言中,数据类型用于定义变量存储的数据种类和大小,主要分为以下几类:1.基本数据类型(PrimaryDataTypes)(1)整数类型类型存储大小(通常)取值范围说明cha...
- Java基础数据类型与核心概念(java基础数据类型口诀)
-
一、Java基础数据类型与核心概念1.八大基础数据类型及其包装类基础类型:byte、short、int、long、float、double、char、boolean。包装类:Byte、Short、I...
- 没想到bind的功能这么强大,赶紧来看看,助你掌握新技能
-
std::bind是C++11中一个函数模版,就像函数适配器,接受一个可调用对象(callableobject),生成一个新的可调用对象。通过它,我们可以实现类似传统的函数指针,函数回调等功能,并且...
- C#数据结构 串(c语言数据结构串)
-
串是一种数据元素为字符的特殊的线性表。1.串的定义零个或多个字符(字母、数字或其他字符)组成的有限序列。记为S="a1a2...an"S="a1a2...an",长...
- 2025-05-14:统计能获胜的出招序列数。用go语言,Alice 和 Bob 玩一
-
2025-05-14:统计能获胜的出招序列数。用go语言,Alice和Bob玩一个回合制幻想战斗游戏,游戏共进行n轮。每轮双方同时召唤一种魔法生物,三种生物分别是火龙(F)、水蛇(W)和地精...
- vue 基础- nextTick 的使用场景(vuenexttick的原理浅析简书)
-
前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...
- FANUC 0iF 用户宏程序——用户宏程序调用(自变量赋值)
-
自变量的赋值又2种方式:自变量赋值I和自变量赋值Ⅱ。第I类使用G、L、O、N、P以外的字母,每个用一次;第Ⅱ用A、B、C,每个用一次,还可使用10组I、J、K,自变量的指定种类是根据所用的字母自动决定...
- 为什么 JS 开发者更喜欢 Axios 而不是 Fetch?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!本文我会解释为什么在开发中Axios是...
- JVM- 类的加载过程、类加载器,看这就够了。
-
一、类的加载过程类从加载到内存中开始,到卸载出内存位置,为类的生命周期。包括加载(loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始...
- 解锁ES6宝藏:用这些新特性让你的JavaScript代码更优雅!
-
各位技术爱好者们!有没有觉得,JavaScript这门语言更新迭代的速度快得惊人?仿佛一眨眼,就又冒出了好多新概念、新语法。特别是从2015年开始,JavaScript迎来了一次里程碑式的升级——ES...
- C语言 | 将一个二维数组行列元素互换
-
例24:C语言实现将一个二维数组行和列的元素互换,存到另一个二维数组中。例如:a数组的序列: 123  ...
- 一周热门
- 最近发表
-
- 轻松!午休十分钟搞懂 Vue 组件 data 为啥是函数,悄悄涨知识
- 你知道吗,python编程中,有哪些数据类型是不可变的?
- 12 有符号Byte数据类型(1byte有符号整数取值范围)
- Redis数据类型介绍(redis数据类型详解)
- C语言的数据类型(c语言的数据类型有哪些)
- Java基础数据类型与核心概念(java基础数据类型口诀)
- 没想到bind的功能这么强大,赶紧来看看,助你掌握新技能
- C#数据结构 串(c语言数据结构串)
- 2025-05-14:统计能获胜的出招序列数。用go语言,Alice 和 Bob 玩一
- vue 基础- nextTick 的使用场景(vuenexttick的原理浅析简书)
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)