Java关键字解析

Java关键字是编程语言中具有特殊含义的保留字,不能用作标识符(如变量名、类名等)。Java共有50多个关键字(不同版本略有差异),下面我将分类详细介绍这些关键字及其使用方式。

一、数据类型相关关键字

1. 基本数据类型

关键字大小取值范围默认值示例
byte8位-128~1270byte b = 100;
short16位-32768~327670short s = 1000;
int32位-2³¹~2³¹-10int i = 100000;
long64位-2⁶³~2⁶³-10Llong l = 100000L;
float32位IEEE 7540.0ffloat f = 3.14f;
double64位IEEE 7540.0ddouble d = 3.14159;
char16位\u0000~\uffff\u0000char c = 'A';
boolean-true/falsefalseboolean flag = true;

2. 引用类型

关键字用途示例
class定义类class Person {}
interface定义接口interface Runnable {}
enum定义枚举enum Color {RED, GREEN}

二、流程控制关键字

1. 条件语句

// if-else
if (condition) {// 代码块
} else if (anotherCondition) {// 代码块
} else {// 代码块
}// switch (Java 12+支持表达式形式)
switch (value) {case 1 -> System.out.println("One");case 2 -> System.out.println("Two");default -> System.out.println("Other");
}

2. 循环语句

// for循环
for (int i = 0; i < 10; i++) {// 代码块
}// 增强for循环
for (String item : collection) {// 代码块
}// while循环
while (condition) {// 代码块
}// do-while循环
do {// 代码块
} while (condition);

3. 跳转控制

关键字用途示例
break退出循环/switchwhile(true) { break; }
continue跳过本次循环for(int i=0;i<10;i++) { if(i%2==0) continue; }
return方法返回值return x * 2;

三、访问控制关键字

关键字类内部同包子类其他包说明
public完全开放
protected子类可访问
默认(无)包级私有
private仅类内部

示例:

public class AccessExample {public int publicVar;protected int protectedVar;int packagePrivateVar;private int privateVar;
}

四、类与对象相关关键字

1. 类定义与继承

// extends - 继承
class Animal {}
class Dog extends Animal {}// implements - 实现接口
interface Runnable {void run();
}
class Runner implements Runnable {public void run() {}
}// abstract - 抽象类/方法
abstract class Shape {abstract void draw();
}// final - 不可继承/不可修改
final class Constants {final double PI = 3.14159;
}

2. 对象操作

// new - 实例化对象
Object obj = new Object();// this - 当前对象引用
class Person {String name;Person(String name) {this.name = name;}
}// super - 父类引用
class Student extends Person {Student() {super("Unknown");}
}// instanceof - 类型检查
if (obj instanceof String) {String s = (String) obj;
}

五、异常处理关键字

// try-catch-finally
try {// 可能抛出异常的代码
} catch (IOException e) {// 处理特定异常System.err.println("IO错误: " + e.getMessage());
} catch (Exception e) {// 处理通用异常System.err.println("错误: " + e.getMessage());
} finally {// 总会执行的代码System.out.println("清理资源");
}// throw - 抛出异常
if (value < 0) {throw new IllegalArgumentException("值不能为负");
}// throws - 声明可能抛出的异常
public void readFile() throws IOException {// 方法实现
}

六、修饰符关键字

关键字适用目标用途
static变量/方法/代码块类级别成员
final类/方法/变量不可继承/不可重写/不可修改
synchronized方法/代码块线程同步
volatile变量保证变量可见性
transient变量不参与序列化
native方法本地方法(JNI)
strictfp类/方法严格浮点计算

示例:

class ModifierExample {static int classVar;          // 类变量final int constant = 100;     // 常量synchronized void safeMethod() {}  // 同步方法transient String tempData;    // 不序列化native void nativeMethod();   // 本地方法strictfp double preciseCalc() { return 0.1 + 0.2; }
}

七、包与导入关键字

// package - 定义包
package com.example.myapp;// import - 导入类/包
import java.util.List;
import static java.lang.Math.PI;  // 静态导入

八、Java 10+新增关键字

1. var (局部变量类型推断)

var list = new ArrayList<String>();  // 推断为ArrayList<String>
var stream = list.stream();          // 推断为Stream<String>

2. record (Java 16+, 数据载体类)

record Point(int x, int y) {}  // 自动生成构造器、getter、equals等Point p = new Point(10, 20);
System.out.println(p.x());     // 自动生成的getter

3. sealed (Java 17+, 密封类)

sealed interface Shape permits Circle, Rectangle, Square { /*...*/ }final class Circle implements Shape { /*...*/ }
non-sealed class Rectangle implements Shape { /*...*/ }

九、保留关键字(未使用)

以下关键字在Java中保留但未使用:

  • goto (保留但不允许使用)
  • const (保留但未实现,用final替代)

十、关键字使用最佳实践

  1. 访问控制

    • 优先使用最严格的访问级别(从private开始)
    • 只有需要被继承的方法才用protected
  2. final使用场景

    • 所有常量应该用final
    • 不被设计为继承的类应该标记为final
    • 不会被重写的方法应该标记为final
  3. 异常处理

    • 不要用try-catch处理业务逻辑
    • 不要捕获Exception这种太通用的异常
    • 自定义业务异常应继承RuntimeException
  4. static使用准则

    • 工具方法适合声明为static
    • 避免滥用静态变量(特别是可变静态变量)
    • 静态工厂方法优于构造器
  5. 现代Java特性

    • Java 10+ 在局部变量中使用var提高可读性
    • Java 16+ 对数据载体类使用record
    • Java 17+ 使用sealed控制类继承

十一、常见问题解答

1. finalfinallyfinalize()的区别

  • final:修饰符,表示不可变
  • finally:异常处理块,确保代码执行
  • finalize():Object类的方法,垃圾回收前调用(已废弃)

2. abstract类与interface的区别

特性abstract类interface
多继承不支持支持
方法实现可以有Java 8前不能有
变量任意类型默认public static final
构造器
设计目的代码复用定义契约

3. 什么时候用static方法?

  • 方法不依赖实例状态时
  • 工具类方法
  • 工厂方法
  • 当方法语义上与类相关而非实例相关时

十二、关键字思维导图

Java关键字
├── 数据类型
│   ├── 基本类型: byte, short, int, long, float, double, char, boolean
│   └── 引用类型: class, interface, enum
├── 流程控制
│   ├── 条件: if, else, switch, case, default
│   ├── 循环: for, while, do
│   └── 跳转: break, continue, return
├── 访问控制
│   └── public, protected, private
├── 类与对象
│   ├── 继承: extends, implements
│   ├── 实例化: new
│   ├── 引用: this, super
│   ├── 类型检查: instanceof
│   └── 修饰: abstract, final, static
├── 异常处理
│   └── try, catch, finally, throw, throws
├── 包管理
│   └── package, import
└── 其他├── 同步: synchronized├── 变量修饰: volatile, transient├── 本地方法: native└── 严格浮点: strictfp

掌握这些关键字及其正确用法是成为Java开发者的基础。随着Java版本的更新,关键字也在不断增加和演变,建议定期关注新特性以充分利用现代Java的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue自定义表头内容excel表格导出

1、安装 npm install xlsx file-saver 2、使用 import * as XLSX from xlsx import { saveAs } from file-saverconst exportAccounts (data) > {// 将对象数组转换为 worksheetconst worksheet XLSX.utils.json_to_sheet(data)// 创建 workbook 并附加 sheetconst wor…

鸿蒙NEXT开发组件截图和窗口截图工具类SnapshotUtil(ArkTs)

import { image } from kit.ImageKit; import { componentSnapshot, window } from kit.ArkUI; import { AppUtil } from ./AppUtil; import { ArrayUtil } from ./ArrayUtil;/*** 组件截图和窗口截图工具类* author 鸿蒙布道师* since 2025/04/28*/ export class SnapshotUtil…

C#与SVN的深度集成:实现版本控制自动化管理​

目录 1. 环境准备 2. 创建 C# 工程 3. 引用 SharpSvn 库 4. 编写代码 1. 环境准备 2. 创建 C# 工程 3. 引用 SharpSvn 库 4. 编写代码 5. 代码说明 6. 注意事项 1. 环境准备 首先&#xff0c;需要安装 SharpSvn 库。可以从 SharpSvn 官方网站 下载适合 .NET Framewor…

本文不定期更新,用于收录各种怪异的python脚本

1.计算自然数对数底 a b 1 for n in range(1, 1001):a a * n 1b b * n t a % br . for i in range(1, 1001):t 10if t < b:r 0else:r str(t // b)t % bprint(str(a//b) r) 得到 2.7182818284590452353602874713526624977572470936999595749669676277240766303…

日志之ClickHouse部署及替换ELK中的Elasticsearch

文章目录 1 ELK替换1.1 Elasticsearch vs ClickHouse1.2 环境部署1.2.1 zookeeper 集群部署1.2.2 Kafka 集群部署1.2.3 FileBeat 部署1.2.4 clickhouse 部署1.2.4.1 准备步骤1.2.4.2 添加官方存储库1.2.4.3 部署&启动&连接1.2.4.5 基本配置服务1.2.4.6 测试创建数据库和…

2025年大一ACM训练-搜索

2025年大一ACM训练-搜索 前期知识&#xff1a;DFS&#xff0c;本文搜索题解法以深度优先搜索为主 1.1 DFS 的定义 深度优先搜索&#xff08;Depth-First Search&#xff09;是一种用于遍历树或图的算法。核心思想是尽可能“深入”访问图的每个节点&#xff0c;直到无法继续前进…

Nginx核心功能02

目录 一&#xff0c;正向代理 1&#xff0c;编译安装Nginx &#xff08;1&#xff09;安装支持软件 &#xff08;2&#xff09;创建运行用户&#xff0c;组和日志目录 &#xff08;3&#xff09;编译安装Nginx &#xff08;4&#xff09;添加Nginx系统服务 2&#xff0c…

rk3568安全启动功能实践

本文主要讲述笔者在rk3568芯片上开发安全启动功能实践的流程。其中主要参考瑞芯微官方文档《Rockchip_Developer_Guide_Secure_Boot_for_UBoot_Next_Dev_CN.pdf》。文档中描述逻辑不是很清晰而且和当前瑞芯微的sdk中安全启动的流程匹配度不高。本文就不再对瑞芯微官方文档的内容…

[操作系统] 线程互斥

文章目录 背景概念线程互斥的引出互斥量锁的操作初始化 (Initialization)静态初始化动态初始化 加锁 (Locking)阻塞式加锁非阻塞式加锁 (尝试加锁/一般不考虑) 解锁 (Unlocking)销毁 (Destruction)设置属性 (Setting Attributes - 通过 pthread_mutex_init) 锁本身的保护互斥锁…

【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异

引言 从深度学习应用到数据分析的多元化需求出发&#xff0c;Python 提供了丰富的工具和模块&#xff0c;其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同&#xff0c;使得这两种方式各显优势。本文将通过深…

Electron 入门指南

Electron 入门指南 Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架。通过 Electron&#xff0c;你可以利用 Web 技术开发出功能强大的桌面应用程序&#xff0c;并且能够运行在 Windows、Mac 和 Linux 系统上。 本文将带你从零开始构建一个简单的 Ele…

编程中如何与AI交互-结构化输入和理解确认机制

一 结构化输入是什么 &#x1f4cc; 结构化输入的定义&#xff1a; 结构化输入是指以清晰、分层、有逻辑的格式向 AI 输入信息&#xff0c;使其更容易解析内容、抓住重点&#xff0c;并准确回答问题。 &#x1f4e6; 举个例子&#xff08;编程场景&#xff09;&#xff1a; 非…

13:傅里叶变换

傅立叶变换(FT, Fourier Transform)的作用是将一个信号由时域变换到频域。其实就是把数据由横坐标时间、纵坐标采样值的波形图格式&#xff0c;转换为横坐标频率、纵坐标振幅(或相位)的频谱格式。换后可以很明显地看出一些原先不易察觉的特征。 有些信号在时域上是很难看出什么…

基于单片机的音频信号处理系统设计(一)

项目名称:基于单片机的音频信号处理系统设计学院名称:信息学院学生姓名:学号专业年级:指导教师:教师职称:教授企业导师:目 录 摘 要 Abstract 1 前言 1.1研究背景与意义 <

机器学习实操 第一部分 机器学习基础 第8章 降维技术

机器学习实操 第一部分 机器学习基础 第8章 降维技术 内容概要 第8章探讨了降维技术&#xff0c;这些技术在处理高维数据时至关重要。高维数据不仅会使训练过程变得极其缓慢&#xff0c;还会增加找到良好解决方案的难度&#xff0c;这就是所谓的维度灾难问题。幸运的是&#…

微信小程序 XSS 防护知识整理

场景1&#xff1a;用户输入表单&#xff08;如评论框&#xff09; 错误做法&#xff1a;直接渲染未过滤的用户输入 // WXML <view>{{ userInput }}</view>// JS&#xff08;用户输入了恶意内容&#xff09; Page({data: { userInput: <script>alert("…

MySQL 服务搭建

&#x1f4a2;欢迎来到张翊尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 在线安装Ubuntu/Debian更新系统包索引安装 MySQL …

【Java面试笔记:进阶】23.请介绍类加载过程,什么是双亲委派模型?

Java的类加载机制是JVM的核心组成部分,其过程分为三个阶段,并采用双亲委派模型来保证类加载的安全性和一致性。 1.类加载过程 1.加载阶段(Loading) 核心任务:查找并加载类的二进制字节流(如.class文件)。具体行为: 将字节码数据从不同数据源(如文件系统、网络等)读…

UN R79 关于车辆转向装置形式认证的统一规定(正文部分1)

UN R79法规是针对转向装置的型式认证法规&#xff0c;涉及A/B1/C类的横向控制辅助驾驶功能&#xff0c;对各功能的功能边界、性能要求、状态提示、故障警示以及型式认证要提交的信息做了规范&#xff0c;本文结合百度文心一言对法规进行翻译&#xff0c;并结合个人理解对部分内…

[随笔] 升级uniapp旧项目的vue、pinia、vite、dcloudio依赖包等

汇总 # 升级uniapp项目dcloudio整体依赖&#xff0c;建议执行多次 # 会顺带自动更新/升级vue的版本 npx dcloudio/uvmlatest alpha# 检查 pinia 的最新版本 npm view pinia version# 更新项目 pinia 到最新版本 npm update pinia# 更新项目 pinia 到特定的版本 # 首先&#xf…