Skip to content
JAVA笔记2026年7月19日
# Java

第一阶段:Java 基础入门


一、Java 简介

Java 的标志是一杯热咖啡,喝上一杯热咖啡是否有助于敲代码,或许你们可以尝试一下。

1.1 发展历史

Java 语言是美国 Sun 公司(Stanford University Network)在 1995 年推出的高级编程语言。所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。

  • 2009 年:Sun 公司被甲骨文(Oracle)公司收购,所以现在访问 oracle 官网即可:https://www.oracle.com
  • Java 之父:詹姆斯·高斯林(James Gosling),被称为 "Java 之父"

java之父

1.2 版本演进时间线

年份版本里程碑事件
1995-Sun 公司推出 Java 语言
19961.0发布首个正式版
19971.1引入内部类、JDBC
19981.2引入集合框架、Swing
20001.3改进性能、引入 JNDI
20021.4引入 assert、NIO
20045.0引入泛型、枚举、注解、自动装箱
20066.0改进编译性能、脚本语言支持
2009-Oracle 收购 Sun 公司
20117.0引入 try-with-resources、Switch 支持 String
20148.0里程碑版本:Lambda、Stream API、Optional
20179.0模块化系统、JShell
2018.310.0局部变量类型推断(var)
2018.911.0LTS 版本,引入 HttpClient
202117.0LTS 版本,密封类、模式匹配
202521+持续演进,虚拟线程等

二、Java 语言的特点

  1. 简单性:Java 语法与 C 语言相近,舍弃了 C++ 中难以理解的特性(如指针、多重继承),使编程更简单。

  2. 跨平台性:通过 Java 编写的应用程序在不同的操作系统上都可以运行——"一次编写,到处运行"(Write Once, Run Anywhere)。

  3. 面向对象:Java 是一种面向对象的语言,支持封装、继承、多态三大特性。

  4. 多线程:Java 支持多个线程同时执行,并提供多线程之间的同步机制。

  5. 分布性:支持数据分布和操作分布,通过 URL 访问网络对象,方式与访问本地文件系统相似。

  6. 高性能:随着 JIT(Just In Time)即时编译技术的发展,Java 的运行速度越来越高。

  7. 健壮性:强类型机制、异常处理、垃圾回收机制等,使 Java 成为一种可靠的语言。

  8. 安全性:运行在虚拟机中,有安全管理器和类加载机制,防止恶意代码访问本地系统。


三、编译与运行基础

3.1 编译型和解释型语言

Java 语言是人为规定的由英文字符组成的,而计算机只能识别 01 二进制指令。因此需要一个转换过程,让计算机读懂代码。

类型工作方式优缺点
编译型编译器将源代码一次性编译成二进制机器码执行快,但不跨平台
解释型解释器逐行读取代码并实时翻译执行跨平台,但执行慢

Java 是 先编译后解释 的语言:

  1. .java 源文件 → javac 编译.class 字节码文件
  2. .class 字节码 → JVM 解释执行 → 机器指令

3.2 JVM(Java Virtual Machine)

JVM 是 Java 虚拟机(Java Virtual Machine)的缩写,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。

为什么使用 JVM?

Java 语言最重要的特点就是可以在任何操作系统中运行。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 语言编译程序只需生成在 JVM 上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

3.3 JDK、JRE、JVM 的关系

┌─────────────────────────────┐
│          JDK                │
│   (Java Development Kit)    │
│  ┌───────────────────────┐  │
│  │        JRE            │  │
│  │ (Java Runtime Env.)   │  │
│  │  ┌─────────────────┐  │  │
│  │  │      JVM        │  │  │
│  │  │ (Java Virtual    │  │  │
│  │  │   Machine)       │  │  │
│  │  └─────────────────┘  │  │
│  └───────────────────────┘  │
└─────────────────────────────┘
  • JDK = Java Development Kit(开发工具包),包含 JRE + 开发工具(javac、jar、javadoc 等)
  • JRE = Java Runtime Environment(运行环境),包含 JVM + 核心类库
  • JVM = Java Virtual Machine(虚拟机),负责执行字节码

一句话总结:使用 JDK 开发 Java 程序,交给 JRE 中的 JVM 去运行程序。


四、开发环境配置

4.1 安装 JDK

访问 Oracle 官网 下载对应操作系统的 JDK,推荐使用 JDK 17(LTS)JDK 21(LTS)

4.2 配置环境变量

Windows 环境下需要配置以下环境变量:

JAVA_HOME = C:\Program Files\Java\jdk-17
Path      = %JAVA_HOME%\bin

验证安装:

bash
java -version
javac -version

4.3 第一个 Java 程序

java
// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

编译与执行:

bash
javac HelloWorld.java    # 编译 → 生成 HelloWorld.class
java HelloWorld          # 运行 → 输出 Hello, Java!

五、标识符、关键字与变量

5.1 什么是标识符?

标识符是我们给类、方法、变量取的名字。

命名规则

  • 由字母、数字、下划线(_)、美元符($)组成
  • 不能以数字开头
  • Java 区分大小写

5.2 什么是关键字?

关键字是 Java 中具有专门意义和用途的单词,不能当做标识符使用

abstract  assert  boolean  break  byte  case  catch  char  class
const*  continue  default  do  double  else  enum  extends  final
finally  float  for  goto*  if  implements  import  instanceof  int
interface  long  native  new  package  private  protected  public
return  short  static  strictfp  super  switch  synchronized  this
throw  throws  transient  try  void  volatile  while

开发工具(如 IDEA)会自动高亮关键字,遇到异常提示时查看即可,无需死记硬背。

5.3 命名规范

元素规范示例
项目名首字母大写MyProject
包名全部小写,域名反写com.example.demo
类名大驼峰(每个单词首字母大写)HelloWorld
变量名小驼峰(首单词小写,后续大写)userName
方法名小驼峰getUserName()
常量名全部大写,下划线分隔MAX_VALUE

5.4 变量

什么是变量?

编程的本质是对内存中数据的访问和修改。变量是程序中最基本的存储单元。

java
int i = 10;  // 在栈中开辟空间存放 10,名字叫 i
int j = 20;  // 在栈中开辟空间存放 20,名字叫 j
int z = i + j;  // 计算 i+j 并存放到 z 中

变量的本质:带有名字的可操作的内存空间,可以存放不同类型的数据。

变量的组成:变量名、数据类型、变量值、作用域。

5.5 字符集

Java 使用 Unicode 字符集(统一字符集),包含世界上大部分字符(中文、日文、英文等)。

java
int 年龄 = 18;  // 语法正确,但不建议使用中文命名

计算机只能存储 0 和 1,Unicode 字符集提供了字符到二进制的翻译标准。ASCII 码是 Unicode 的前身,如字母 a 的二进制是 1100001(十进制 97)。

补充:常见字符集对比

字符集说明
ASCII7 位编码,表示 128 个字符
ISO-8859-18 位编码,支持西欧语言
GBK中文编码,兼容 ASCII
Unicode (UTF-8)统一字符集,可变长编码

六、数据类型

6.1 数据类型的分类

数据类型
├── 基本数据类型(8种)
│   ├── 整数型:byte, short, int, long
│   ├── 浮点型:float, double
│   ├── 布尔型:boolean
│   └── 字符型:char
└── 引用数据类型
    ├── 类(class)
    ├── 接口(interface)
    └── 数组(array)

6.2 八大基本数据类型

bit(位)是计算机最小存储单元,1 字节(byte)= 8 bit

类型位数取值范围默认值备注
byte8-128 ~ 1270字节单位
short16-32,768 ~ 32,7670少用
int32-2^31 ~ 2^31-10整数默认
long64-2^63 ~ 2^63-10L需加 L/l 后缀
float32±3.4e-45 ~ ±1.4e380.0f需加 F/f 后缀
double64±4.9e-324 ~ ±1.8e3080.0d小数默认,精度更高
booleanJVM 定true / falsefalse逻辑判断
char160 ~ 65,535(Unicode)'\u0000'单引号包裹

进制转换

6.3 类型转换

自动类型转换(隐式转换)

范围小的类型自动提升为范围大的类型:

java
byteshortintlongfloatdouble

               char
java
int a = 10;
double b = a;  // 自动转换:10.0

强制类型转换(显式转换)

范围大的类型转为范围小的类型,需手动强转,可能丢失精度:

java
double d = 9.99;
int i = (int) d;  // 结果为 9,精度丢失

运算时的类型提升

java
byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2;  // 编译错误!byte 运算自动提升为 int
int i = b1 + b2;        // 正确

6.4 浮点数精度问题

Java 中浮点数运算可能会发生精度丢失:

java
System.out.println(0.1 + 0.2);  // 0.30000000000000004

解决方案:使用 BigDecimal

java
import java.math.BigDecimal;

public class PrecisionDemo {
    public static void main(String[] args) {
        BigDecimal bi1 = new BigDecimal("0.3");
        BigDecimal bi2 = new BigDecimal("3");
        BigDecimal bi3 = bi1.multiply(bi2);
        System.out.println("bi1 * bi2 = " + bi3);
    }
}

6.5 Scanner 输入(新增补充)

使用 Scanner 可以从控制台读取用户输入:

java
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("请输入姓名:");
        String name = sc.nextLine();

        System.out.print("请输入年龄:");
        int age = sc.nextInt();

        System.out.println("你好," + name + ",你今年 " + age + " 岁了。");
        sc.close();
    }
}

七、运算符

7.1 算术运算符

一元运算符

java
int a = 5;
int b = ++a;  // 前++:a 先加 1 变为 6,再赋值给 b → b=6
int c = a++;  // 后++:先将 a(6) 赋给 c,a 再加 1 → c=6, a=7
运算符名称示例结果
++自增a++ / ++a值加 1
--自减a-- / --a值减 1

二元运算符

java
int a = 10, b = 3;
System.out.println(a + b);   // 13
System.out.println(a - b);   // 7
System.out.println(a * b);   // 30
System.out.println(a / b);   // 3(整数除法,舍弃小数)
System.out.println(a % b);   // 1(取余)

+ 除了加法运算外,还可以做字符串拼接:"Hello" + "World" → "HelloWorld"

7.2 赋值运算符

运算符示例等价于
=x = 1赋值
+=x += 2x = x + 2
-=x -= 2x = x - 2
*=x *= 2x = x * 2
/=x /= 2x = x / 2
%=x %= 2x = x % 2

7.3 关系运算符

关系运算的结果是布尔值(true / false)。

运算符含义示例
==等于a == b
!=不等于a != b
>大于a > b
<小于a < b
>=大于等于a >= b
<=小于等于a <= b

7.4 逻辑运算符

运算符含义说明
&&短路与两边都为 true 才 true;左边 false 则右边不执行
||短路或有一边 true 即 true;左边 true 则右边不执行
!取反:true 变 false,false 变 true

易错点:不要将 && 写成 &,或将 || 写成 |,后者是位运算符,不支持短路。

java
public class LogicDemo {
    public static void main(String[] args) {
        int a = 5, b = 10;
        boolean r1 = (a < b) && (b < 20);  // true
        boolean r2 = (a > b) || (b == 10);  // true
        boolean r3 = !(a == 5);             // false
        System.out.println(r1 + ", " + r2 + ", " + r3);
    }
}

7.5 位运算符

位运算符直接操作二进制位,效率极高。

运算符含义说明
&位与对应位都为 1 则结果为 1
|位或对应位有 1 则结果为 1
^异或对应位不同则结果为 1
~取反按位取反(包括符号位)
<<左移低位补 0,相当于乘以 2^n
>>右移带符号右移,高位补符号位
>>>无符号右移高位补 0
java
public class BitDemo {
    public static void main(String[] args) {
        int x = 6;   // 0000 0110
        int y = 3;   // 0000 0011
        System.out.println(x & y);   // 2  (0000 0010)
        System.out.println(x | y);   // 7  (0000 0111)
        System.out.println(x ^ y);   // 5  (0000 0101)
        System.out.println(~x);      // -7 (按位取反)
        System.out.println(x << 1);  // 12 (左移1位,相当于×2)
        System.out.println(x >> 1);  // 3  (右移1位,相当于÷2)
        System.out.println(x >>> 1); // 3  (无符号右移)
    }
}

7.6 运算符优先级(补充)

优先级运算符
1(最高)() [] .
2++ -- ! ~(一元)
3* / %
4+ -
5<< >> >>>
6< <= > >= instanceof
7== !=
8&(位与)
9^(异或)
10|(位或)
11&&
12||
13? :(三目)
14(最低)= += -= 等赋值

建议:不确定优先级时使用 () 明确指定运算顺序。


第一阶段小结:本阶段学习了 Java 的发展历史、跨平台原理、开发环境搭建、变量与数据类型、以及各类运算符。这些是 Java 编程的基石,请务必熟练掌握。

网站运行 ,站长活了: