1. Java基础概述
Java作为一门面向对象的编程语言,自1995年由Sun Microsystems发布以来,已经成为全球最流行的编程语言之一。它的核心设计理念是"一次编写,到处运行"(Write Once, Run Anywhere),这得益于Java虚拟机(JVM)的跨平台特性。对于初学者来说,掌握Java基础是进入编程世界的重要第一步。
Java语言具有以下显著特点:
- 简单性:去除了C++中复杂的指针和多重继承等概念
- 面向对象:完全基于对象的设计理念
- 分布式:内置网络支持
- 健壮性:强类型检查和异常处理机制
- 安全性:沙箱执行模型防止恶意代码
- 可移植性:字节码可在任何支持JVM的系统上运行
- 多线程:内置对并发编程的支持
2. Java开发环境搭建
2.1 JDK安装与配置
Java开发工具包(JDK)是开发Java应用程序的核心组件。目前主流版本有Java 8、11和17(LTS版本)。安装步骤如下:
- 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包
- 运行安装程序,记住安装路径(如C:\Program Files\Java\jdk-17)
- 配置环境变量:
- JAVA_HOME:指向JDK安装目录
- Path:添加%JAVA_HOME%\bin
- 验证安装:命令行执行
java -version和javac -version
提示:建议使用IDE如IntelliJ IDEA或Eclipse进行开发,它们能自动管理JDK路径和项目依赖。
2.2 第一个Java程序
创建经典的HelloWorld程序:
java复制public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
编译运行过程:
- 保存为HelloWorld.java
- 命令行编译:
javac HelloWorld.java生成HelloWorld.class - 运行:
java HelloWorld
3. Java基础语法
3.1 数据类型
Java是强类型语言,所有变量必须先声明后使用。基本数据类型分为四类八种:
| 类型 | 关键字 | 大小 | 范围 |
|---|---|---|---|
| 整型 | byte | 1字节 | -128~127 |
| short | 2字节 | -32768~32767 | |
| int | 4字节 | -2^31~2^31-1 | |
| long | 8字节 | -2^63~2^63-1 | |
| 浮点型 | float | 4字节 | 约±3.4e38 |
| double | 8字节 | 约±1.8e308 | |
| 字符型 | char | 2字节 | Unicode字符(0~65535) |
| 布尔型 | boolean | 1位 | true/false |
引用数据类型包括类、接口、数组等。注意String是类而非基本类型。
3.2 变量与常量
变量声明语法:
java复制数据类型 变量名 [= 初始值];
常量使用final修饰:
java复制final double PI = 3.14159;
命名规范:
- 类名:大驼峰,如StudentInfo
- 方法/变量:小驼峰,如getUserName
- 常量:全大写加下划线,如MAX_SIZE
- 包名:全小写,如com.example.util
3.3 运算符
Java支持丰富的运算符:
算术运算符:+ - * / % ++ --
关系运算符:> < >= <= == !=
逻辑运算符:&& || !
位运算符:& | ^ ~ << >> >>>
赋值运算符:= += -= *= /= %=
三目运算符:条件 ? 表达式1 : 表达式2
特别注意:
- 整数除法会截断小数:5/2=2
- +可用于字符串连接:"Hello" + 123 = "Hello123"
- ==比较基本类型值,比较引用类型地址
4. 流程控制
4.1 条件语句
if-else结构:
java复制if(条件1) {
// 代码块1
} else if(条件2) {
// 代码块2
} else {
// 默认代码块
}
switch-case结构:
java复制switch(表达式) {
case 值1:
// 代码块1
break;
case 值2:
// 代码块2
break;
default:
// 默认代码块
}
注意:Java 12+支持switch表达式和箭头语法,更简洁安全。
4.2 循环结构
while循环:
java复制while(条件) {
// 循环体
}
do-while循环:
java复制do {
// 循环体
} while(条件);
for循环:
java复制for(初始化; 条件; 更新) {
// 循环体
}
增强for循环(遍历数组/集合):
java复制for(元素类型 变量 : 数组或集合) {
// 使用变量
}
循环控制:
- break:跳出当前循环
- continue:跳过本次循环
- 标签:用于嵌套循环的精确控制
5. 数组与字符串
5.1 数组
数组是相同类型数据的固定大小集合:
声明与初始化:
java复制int[] arr1 = new int[5]; // 默认值0
int[] arr2 = {1, 2, 3}; // 静态初始化
String[] names = new String[]{"Tom", "Jerry"};
多维数组:
java复制int[][] matrix = new int[3][3];
matrix[0][0] = 1;
数组工具类Arrays提供排序、搜索等方法:
java复制Arrays.sort(arr);
int index = Arrays.binarySearch(arr, key);
5.2 字符串
String是不可变字符序列,常用方法:
java复制String s = "Hello";
int len = s.length(); // 长度
char c = s.charAt(1); // 获取字符
String sub = s.substring(1,3); // 子串
String upper = s.toUpperCase(); // 大写
String concat = s.concat("!"); // 连接
boolean eq = s.equals("hello"); // 比较内容
StringBuilder/StringBuffer用于高效字符串操作,前者非线程安全但更快。
6. 面向对象基础
6.1 类与对象
类定义:
java复制public class Person {
// 字段(属性)
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void sayHello() {
System.out.println("Hello, I'm " + name);
}
// getter/setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
创建对象:
java复制Person p = new Person("Alice", 25);
p.sayHello();
6.2 封装、继承与多态
封装:通过private保护数据,提供public方法访问
java复制public class Student extends Person {
private String studentId;
public Student(String name, int age, String id) {
super(name, age); // 调用父类构造
this.studentId = id;
}
@Override
public void sayHello() {
System.out.println("I'm student " + studentId);
}
}
多态示例:
java复制Person p = new Student("Bob", 20, "S001");
p.sayHello(); // 调用子类重写方法
6.3 接口与抽象类
接口定义行为规范:
java复制public interface Drawable {
void draw();
default void resize() { // Java8默认方法
System.out.println("Resizing...");
}
}
抽象类提供部分实现:
java复制public abstract class Shape implements Drawable {
protected String color;
public Shape(String color) {
this.color = color;
}
public abstract double area(); // 抽象方法
}
实现类:
java复制public class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public void draw() {
System.out.println("Drawing a " + color + " circle");
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
7. 异常处理
Java异常体系:
- Throwable
- Error:系统错误,如OutOfMemoryError
- Exception
- RuntimeException:未检查异常,如NullPointerException
- 其他Exception:检查异常,如IOException
异常处理结构:
java复制try {
// 可能抛出异常的代码
FileInputStream fis = new FileInputStream("file.txt");
} catch (FileNotFoundException e) {
// 处理特定异常
System.err.println("文件未找到: " + e.getMessage());
} catch (Exception e) {
// 处理其他异常
e.printStackTrace();
} finally {
// 无论是否异常都会执行
System.out.println("清理资源");
}
自定义异常:
java复制public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
抛出异常:
java复制if(条件不满足) {
throw new MyException("自定义错误信息");
}
8. 常用工具类
8.1 集合框架
主要接口:
- Collection
- List:有序可重复(ArrayList, LinkedList)
- Set:无序唯一(HashSet, TreeSet)
- Map:键值对(HashMap, TreeMap)
示例:
java复制List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 5);
// Java8+遍历
list.forEach(System.out::println);
map.forEach((k,v) -> System.out.println(k+":"+v));
8.2 日期时间API
Java 8引入的java.time包:
java复制LocalDate today = LocalDate.now();
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
String formatted = now.format(formatter);
// 计算
LocalDate nextWeek = today.plusWeeks(1);
Period period = Period.between(today, nextWeek);
8.3 输入输出
文件读写:
java复制// 读取文本文件
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
// 写入文件
try (PrintWriter pw = new PrintWriter("output.txt")) {
pw.println("Hello, File IO!");
}
注意:使用try-with-resources自动关闭资源,避免内存泄漏
9. 实践建议
-
编码规范:
- 遵循Google Java Style Guide或公司规范
- 使用有意义的命名
- 保持方法短小单一职责
- 添加必要的注释和文档
-
调试技巧:
- 使用IDE调试器设置断点
- 打印关键变量值
- 使用日志框架如SLF4J+Logback
-
性能注意:
- 避免在循环中创建对象
- 使用StringBuilder拼接字符串
- 合理选择集合类型
- 注意自动装箱开销
-
学习资源:
- Oracle官方Java教程
- Effective Java(书籍)
- LeetCode算法练习
- GitHub开源项目阅读
Java基础扎实是成为优秀开发者的关键。建议通过实际项目练习巩固知识,逐步掌握面向对象设计、设计模式等进阶内容。记住编程能力的提升在于持续实践和反思。
