Java 是当今最流行的编程语言之一,广泛应用于企业级应用、Android开发、大数据处理等领域。本文将系统介绍 Java 的核心概念、基础语法和实际编程技巧,帮助初学者快速入门。
一、Java 简介与特性
1.1 Java 是什么
Java 是 Sun Microsystems(现属 Oracle)于 1995 年发布的面向对象编程语言,设计目标是"一次编写,到处运行"(Write Once, Run Anywhere)。
1.2 Java 核心特性
- 面向对象:一切皆对象,支持封装、继承和多态
- 跨平台性:通过 JVM 实现跨平台运行
- 自动内存管理:垃圾回收机制(GC)
- 健壮性:强类型检查、异常处理机制
- 安全性:字节码验证、安全管理器
- 多线程支持:内置多线程编程模型
二、Java 开发环境搭建
2.1 JDK 安装
- 下载 JDK(建议 JDK 11 或 LTS 版本)
- 配置环境变量:
JAVA_HOME
:指向 JDK 安装目录PATH
:添加%JAVA_HOME%\bin
2.2 第一个 Java 程序
java// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java World!");
}
}
编译运行:
javac HelloWorld.java // 编译
java HelloWorld // 运行
三、Java 基础语法
3.1 数据类型与变量
javapublic class DataTypes {
public static void main(String[] args) {
// 基本数据类型
byte b = 100; // 8位
short s = 1000; // 16位
int i = 100000; // 32位
long l = 10000000000L; // 64位
float f = 3.14f; // 32位浮点数
double d = 3.1415926535; // 64位浮点数
char c = 'A'; // 16位Unicode字符
boolean bool = true; // 布尔值
// 引用类型
String str = "Java Programming";
System.out.println("Byte range: " + Byte.MIN_VALUE + " to " + Byte.MAX_VALUE);
}
}
3.2 运算符
javapublic class Operators {
public static void main(String[] args) {
int a = 10, b = 3;
// 算术运算符
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a / b = " + (a / b)); // 3 (整数除法)
System.out.println("a % b = " + (a % b)); // 1
// 比较运算符
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
// 逻辑运算符
boolean x = true, y = false;
System.out.println("x && y: " + (x && y)); // false
System.out.println("x || y: " + (x || y)); // true
// 位运算符
System.out.println("a & b: " + (a & b)); // 2 (二进制 1010 & 0011 = 0010)
}
}
3.3 控制结构
javapublic class ControlFlow {
public static void main(String[] args) {
// if-else 语句
int score = 85;
if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else {
System.out.println("C");
}
// switch 语句 (Java 12+ 增强版)
int day = 3;
String dayName = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
default -> "Invalid day";
};
System.out.println(dayName); // Wednesday
// for 循环
for (int i = 1; i <= 5; i++) {
System.out.print(i + " "); // 1 2 3 4 5
}
System.out.println();
// while 循环
int j = 0;
while (j < 5) {
System.out.print((j * 2) + " "); // 0 2 4 6 8
j++;
}
System.out.println();
// do-while 循环
int k = 5;
do {
System.out.println("This will run at least once");
k--;
} while (k > 0);
}
}
四、面向对象编程基础
4.1 类与对象
java// Person.java
public class Person {
// 字段
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void introduce() {
System.out.println("Hello, my name is " + name +
" and I'm " + age + " years old.");
}
// Getter 和 Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
// 创建对象
Person person1 = new Person("Alice", 25);
person1.introduce(); // Hello, my name is Alice and I'm 25 years old.
// 访问字段通过方法
person1.setAge(26);
System.out.println(person1.getName() + " is now " + person1.getAge());
}
}
4.2 继承与多态
java// Animal.java (父类)
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void makeSound() {
System.out.println("Some generic animal sound");
}
public String getName() {
return name;
}
}
// Dog.java (子类)
public class Dog extends Animal {
public Dog(String name) {
super(name); // 调用父类构造方法
}
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
// 子类特有方法
public void wagTail() {
System.out.println(getName() + " is wagging its tail");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal("Generic Animal");
Dog myDog = new Dog("Buddy");
// 多态示例
Animal animalRef;
animalRef = myAnimal;
animalRef.makeSound(); // Some generic animal sound
animalRef = myDog;
animalRef.makeSound(); // Woof! Woof! (运行时多态)
// 向下转型 (需要类型检查)
if (animalRef instanceof Dog) {
Dog dogRef = (Dog) animalRef;
dogRef.wagTail(); // Buddy is wagging its tail
}
}
}
4.3 抽象类与接口
java// Shape.java (抽象类)
public abstract class Shape {
public abstract double area(); // 抽象方法
public void display() { // 具体方法
System.out.println("This is a shape");
}
}
// Drawable.java (接口)
public interface Drawable {
void draw(); // 接口方法默认是public abstract
default void showInfo() { // Java 8+ 默认方法
System.out.println("This object can be drawn");
}
}
// Circle.java
public class Circle extends Shape implements Drawable {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
@Override
public void draw() {
System.out.println("Drawing a circle with radius " + radius);
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(5.0);
circle.display(); // 来自抽象类 Shape
circle.draw(); // 来自接口 Drawable
circle.showInfo(); // 来自接口的默认方法
System.out.println("Circle area: " + circle.area());
}
}
五、异常处理
javaimport java.util.Scanner;
public class ExceptionHandling {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Enter numerator: ");
int numerator = scanner.nextInt();
System.out.print("Enter denominator: ");
int denominator = scanner.nextInt();
int result = divide(numerator, denominator);
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Error: " + e.getMessage()); // / by zero
} catch (NumberFormatException e) {
System.out.println("Error: Please enter valid integers");
} catch (Exception e) {
System.out.println("An unexpected error occurred: " + e.getMessage());
} finally {
scanner.close();
System.out.println("Resource cleanup completed");
}
}
public static int divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("Division by zero is not allowed");
}
return a / b;
}
}
六、集合框架
6.1 List 接口
javaimport java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// ArrayList (基于动态数组)
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add(1, "Orange"); // 在索引1处插入
System.out.println("ArrayList: " + arrayList);
System.out.println("Second element: " + arrayList.get(1));
// LinkedList (基于双向链表)
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.add(20);
linkedList.addFirst(5); // 在开头添加
System.out.println("LinkedList: " + linkedList);
System.out.println("First element: " + linkedList.getFirst());
}
}
6.2 Set 接口
javaimport java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// HashSet (无序,唯一)
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // 不会重复添加
System.out.println("HashSet: " + hashSet);
// LinkedHashSet (保持插入顺序)
Set<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(3);
linkedHashSet.add(1);
linkedHashSet.add(2);
System.out.println("LinkedHashSet: " + linkedHashSet);
// TreeSet (自然排序)
Set<String> treeSet = new TreeSet<>();
treeSet.add("Orange");
treeSet.add("Apple");
treeSet.add("Banana");
System.out.println("TreeSet: " + treeSet); // [Apple, Banana, Orange]
}
}
6.3 Map 接口
javaimport java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class MapExample {
public static void main(String[] args) {
// HashMap (键唯一,无序)
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Alice", 26); // 更新值
System.out.println("HashMap: " + hashMap);
System.out.println("Alice's age: " + hashMap.get("Alice"));
// LinkedHashMap (保持插入顺序)
Map<Integer, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put(3, "Three");
linkedHashMap.put(1, "One");
linkedHashMap.put(2, "Two");
System.out.println("LinkedHashMap: " + linkedHashMap);
// TreeMap (键自然排序)
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Orange", 3);
treeMap.put("Apple", 5);
treeMap.put("Banana", 2);
System.out.println("TreeMap: " + treeMap); // {Apple=5, Banana=2, Orange=3}
// 遍历Map
for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
七、多线程编程
7.1 创建线程
java// 方式1: 继承Thread类
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName() + " is running: " + i);
try {
Thread.sleep(500); // 暂停500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}