java八股文04 final 在 java 中有什么作用?

本文详细介绍了Java中的final关键字,包括其用于修饰类、成员变量和成员方法时的特点。final修饰的类不可被继承,成员变量为常量且必须初始化,成员方法不能被子类重写。同时,对比了final与private的区别,final注重防止改变,而private则强调访问控制。理解final的使用有助于提升代码的稳定性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.final 在 java 中有什么作用?

final是一个关键字,可以用于修饰类,成员变量,成员方法。

特点:

它修饰的类不能被继承。
它修饰的成员变量是一个常量。
它修饰的成员方法是不能被子类重写的。
final修饰的常量定义一般都有书写规范,被final修饰的常量名称,所有字母都大写。

final修饰成员变量,必须初始化,初始化有两种

显示初始化;
构造方法初始化。
但是不能两个一起初始化
final和private的区别:

final修饰的类可以访问;
private不可以修饰外部类,但可以修饰内部类(其实把外部类私有化是没有意义的)。
final修饰的方法不可以被子类重写;
private修饰的方法表面上看是可以被子类重写的,其实不可以,子类是看不到父类的私有方法的。
final修饰的变量只能在显示初始化或者构造函数初始化的时候赋值一次,以后不允许更改;
private修饰的变量,也不允许直接被子类或一个包中的其它类访问或修改,但是他可以通过set和get方法对其改值和取值。

<think>好的,我现在需要回答用户关于Java八股文的问题。首先,用户想知道Java八股文的含义及具体内容。根据之前的引用,用户已经得到了一些信息,比如常见的面试题、基础篇的内容、以及数据库和网络相关的知识点。现在需要更详细地解释这个概念,并列举具体内容。 首先,要明确“八股文”在编程面试中的含义。原意是指固定格式的文章,现在用来指代面试中常见、模式化的问题。Java八股文通常涉及语言特性、集合框架、多线程、JVM、数据库、框架等。 然后,结合用户提供的引用内容,比如引用[1]提到涵盖多个重要知识点,引用[2]和[3]分别涉及基础概念和数据库区别。需要将这些内容整合,分门别类地解释Java八股文的主要内容。 接下来,按照用户要求的格式,回答要结构清晰,分点说明。需要确保使用正确的中文表达,行内公式用$...$,独立公式用$$...$$,但可能这个问题中公式较少,但如果有涉及例如算法复杂度的话需要注意。 用户可能需要更详细的分类,比如语言基础、集合、多线程、JVM、数据库、框架等。每个部分举几个例子,如自动装箱拆箱、HashMap原理、synchronized关键字、垃圾回收机制、InnoDB和MyISAM区别等。 同时,需要生成相关问题,参考用户示例中的三个问题,可能需要类似的问题,如如何准备、常见题目、应用场景等。 最后,检查引用是否正确添加,引用[1]、[2]、[3]在回答中的适当位置标注,比如在提到基础知识点时引用[2],在数据库调优时引用[3]。 现在开始组织内容,确保每个部分都有对应的引用支持,并且内容准确、全面。注意避免技术错误,例如正确区分装箱和拆箱,解释JVM内存模型时准确,数据库部分正确引用InnoDB和MyISAM的区别等。</think>### Java八股文的含义及内容 **Java八股文**是编程面试中对常见、模式化问题的统称,类似于传统科举考试中的固定格式文章。这类问题通常覆盖Java开发的核心知识点,考察候选人对基础理论、设计原理及实际应用的掌握程度。以下是其核心内容分类及示例: --- #### 一、语言基础 1. **数据类型与特性** - **自动装箱/拆箱**:基本类型与包装类的自动转换,例如: ```java Integer i = 10; // 装箱:int → Integer int n = i; // 拆箱:Integer → int ``` 引用自基础语法解析[^2]。 - **String不可变性**:通过`final char[]`实现,修改时会生成新对象。 2. **运算符与关键字** - `&`与`&&`的区别:前者是位运算符或非短路逻辑运算符,后者是短路逻辑运算符[^2]。 - `final`的作用:修饰类(不可继承)、方法(不可重写)、变量(不可修改)。 --- #### 二、集合框架 1. **HashMap原理** - **数据结构**:数组+链表/红黑树(JDK8+),负载因子默认0.75。 - **哈希冲突解决**:拉链法(链表)与树化(链表长度≥8时转为红黑树)。 - 线程不安全,需用`ConcurrentHashMap`替代多线程场景。 2. **ArrayList vs LinkedList** - **ArrayList**:基于动态数组,随机访问快($O(1)$),增删慢(需移动元素)。 - **LinkedList**:基于双向链表,增删快($O(1)$),随机访问慢($O(n)$)。 --- #### 三、多线程与并发 1. **线程同步机制** - `synchronized`关键字:修饰方法或代码块,基于监视器锁实现互斥。 - `ReentrantLock`:显式锁,支持公平锁、条件变量等高级功能。 2. **JMM(Java内存模型)** - **可见性**:通过`volatile`关键字禁止指令重排序,保证变量修改对其他线程立即可见。 - **原子性**:`AtomicInteger`等原子类基于CAS(Compare-And-Swap)实现无锁线程安全。 --- #### 四、JVM原理 1. **内存区域划分** - **堆**:存储对象实例,是垃圾回收的主要区域。 - **方法区**:存储类信息、常量池(JDK8后由元空间实现)。 2. **垃圾回收算法** - **标记-清除**:产生内存碎片;**复制算法**:适合新生代;**标记-整理**:适合老年代。 - **GC Roots**:包括栈中局部变量、静态变量等,用于判断对象存活。 --- #### 五、数据库与调优 1. **InnoDB vs MyISAM** - **事务支持**:InnoDB支持ACID,MyISAM不支持[^3]。 - **索引结构**:InnoDB为聚簇索引(数据与主键索引绑定),MyISAM为非聚簇索引[^3]。 2. **SQL优化策略** - **索引优化**:避免`LIKE '%前缀'`导致索引失效,遵循最左匹配原则[^3]。 - **分库分表**:水平分表(按数据行拆分)、垂直分表(按列拆分)[^3]。 --- #### 六、框架与设计模式 1. **Spring IOC/AOP** - **IOC**:控制反转,通过容器管理对象生命周期(如`@Autowired`依赖注入)。 - **AOP**:面向切面编程,通过动态代理实现日志、事务等横切关注点。 2. **单例模式实现** - **双重检查锁**:结合`synchronized`和`volatile`确保线程安全与延迟加载。 - **枚举单例**:天然防止反射攻击,推荐写法。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值