跳转至

Java 概述

本页汇总 Java 的语言定位与入门概念:教程如何组织、语言有哪些主要特性、与 C++ 的区别、数据类型、字符编码和运算符。语言的由来、第一个程序以及 JDK、JRE、JVM 的关系见 Java。

Java 教程概览

Java 教程通常按以下顺序展开,对应本栏目的分类:

教程阶段 主要内容 对应栏目
入门 历史、特性、环境与第一个程序 Java、本页
语言基础 数据类型、变量、运算符、流程控制 核心:基本语法等
面向对象 类、继承、多态、抽象与封装 核心:面向对象
标准库 字符串、集合、异常、IO 核心知识
进阶机制 反射、并发、网络、JVM 进阶
应用开发 框架与第三方库 框架、第三方库

Java 的主要特性

特性 含义 实际情况
简单 语法接近 C++,去掉了指针、运算符重载等 上手容易,但仍需理解静态类型和类结构
面向对象 以类和对象组织数据与行为 基本类型等少数值不是对象
可移植、平台无关 编译为字节码,由各平台的 JVM 执行 JVM 本身按平台实现;原生依赖、路径等仍需注意
安全 不暴露指针,运行时校验字节码,类加载器隔离来源 SecurityManager 在现代版本中已弃用,安全边界依赖模块与平台机制
健壮 垃圾回收、异常处理、编译期类型检查 逻辑错误仍需测试;GC 不负责所有资源
架构中立 基本类型的大小固定,不随平台变化 具体内存布局仍由实现决定
解释执行 字节码由 JVM 解释 HotSpot 等实现通过 JIT 把热点编译为机器码
高性能 字节码接近机器码,JIT 持续优化 通常慢于 C、C++ 等直接编译的语言
多线程 语言与标准库内置线程支持 共享状态仍需同步设计,见并发编程
分布式 网络 API 与远程调用能力 RMI 使用有限,现代应用多使用 HTTP 和 RPC
动态 类按需加载,支持反射 模块系统会限制部分动态能力

这些特性描述的是设计倾向,不是绝对承诺。实际开发中应结合具体场景判断。

C++ 与 Java 的对比

比较项 C++ Java
运行方式 编译为平台相关机器码 编译为字节码,由 JVM 执行
内存管理 手动 new/delete 垃圾回收自动回收
指针 支持,可直接操作内存 语言层面不暴露指针
多重继承 类支持多重继承 类不支持,接口可以多实现
运算符重载 支持 不支持
泛型机制 模板 泛型与类型擦除
默认参数 支持 不支持,通常用重载代替
头文件 使用 #include 使用 import 引入类型
异常处理 支持,可选 受检异常必须处理或声明
线程支持 传统上依赖第三方库 语言与标准库内置
继承体系 可以存在多个根 所有类都直接或间接继承 Object
goto 支持 保留关键字,没有对应功能

两者都能用于面向对象编程,但设计目标不同:C++ 更接近系统与硬件,Java 更强调跨平台运行和自动内存管理。

数据类型

Java 是静态类型语言,变量需要先声明类型。类型分为基本类型和引用类型。

类型 大小 范围或说明 默认值
boolean 由实现决定 true 或 false false
char 16 位 '\u0000' 到 '￿',无符号 '\u0000'
byte 8 位 -128 到 127 0
short 16 位 -32,768 到 32,767 0
int 32 位 约 ±21 亿 0
long 64 位 约 ±9.2 × 10^18,后缀 L 0L
float 32 位 IEEE 754 单精度,约 6—7 位有效数字,后缀 F 0.0F
double 64 位 IEEE 754 双精度,约 15 位有效数字 0.0D

float 不适合需要精确小数位数的场景(如金额),应使用 BigDecimal 或整数单位。Java 8 起可以通过 Integer、Long 的 API 按无符号数解释对应的 32 位、64 位值。

类、接口、数组和 String 属于引用类型,默认值为 null。基本类型的大小固定,这也是“架构中立”特性的体现。详细用法见核心:基本语法。

Unicode 与字符编码

计算机内部用二进制表示字符,这一映射关系称为编码。早期编码互不兼容:ASCII 用于美国,ISO 8859-1 用于西欧语言,GB18030、BIG-5 用于中文,不同编码的同一字节序列可能表示不同字符。

Unicode 为世界上大多数书写系统统一分配码点。常见转换格式:

格式 编码单元 说明
UTF-8 8 位 变长编码,兼容 ASCII,网络传输常用
UTF-16 16 位 Java 的 char 与 String 内部使用的编码单元
UTF-32 32 位 定长,每个码点占 4 字节

Java 源码中可以用转义序列书写 Unicode 字符,\u 后跟 4 位十六进制:

UnicodeDemo.java
public class UnicodeDemo {
    public static void main(String[] args) {
        char a = 'A';
        char b = 'B';
        System.out.println(a + "" + b);
    }
}

输出:

AB

char 是 16 位,最多表示 65,536 个码点,不足以覆盖全部 Unicode 字符。超出 16 位的字符称为增补字符,在 Java 中用一对 char(代理对)表示,因此 "😀".length() 为 2 而不是 1。按码点处理文本的方法见核心:字符串与数组。

运算符

类别 运算符 说明
一元 +、-、!、~、++、-- 单个操作数,++、-- 有前缀与后缀之分
算术 +、-、*、/、% 整数除法向零截断
移位 <<、>>、>>> 操作二进制位,>>> 高位补 0
关系 ==、!=、>、>=、<、<= 结果为 boolean
位运算 &、\|、^、~ 按位与、或、异或、取反
逻辑 &&、\|\|、! &&、\|\| 短路求值
条件 条件 ? 值一 : 值二 三元运算符
赋值 =、+=、-= 等 复合赋值隐含窄化转换

运算符的优先级、类型提升与完整示例见核心:基本语法。

参考资料