public static void main(String[] args)作为入口,遵循面向对象原则编写逻辑
Java编程基础框架
Java是一种面向对象的静态类型语言,其代码必须存在于类(Class)中,最基本的结构如下:
public class HelloWorld {
// 主方法入口:程序从这里开始执行
public static void main(String[] args) {
System.out.println("你好,世界!"); // 控制台输出语句
}
}
- 关键字解析:
public表示访问权限为公开;class定义类;static说明该方法属于类而非实例;void指无返回值;main是JVM识别的程序起点。 - 编译运行流程:需先用
javac HelloWorld.java编译生成字节码文件(.class),再通过java HelloWorld执行。
核心语法组件详解
变量与数据类型
| 类型 | 示例 | 说明 |
|---|---|---|
int |
age = 25; |
整型(32位有符号整数) |
double |
price = 99.99; |
双精度浮点数 |
boolean |
isStudent = true; |
布尔值(true/false) |
String |
name = "Alice"; |
字符串对象(需导入java.lang包) |
| 数组声明 | int[] scores = new int[5]; |
固定长度集合 |
️ 注意:Java是强类型语言,变量必须先声明后使用,且不可隐式转换类型(如从
double到int需显式强制转换)。
控制流语句
- 条件分支:
if-else实现逻辑判断:if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); } - 循环结构:
for循环遍历数组:for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }while循环持续读取用户输入直到终止条件满足:Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String input = scanner.nextLine(); // 处理逻辑... }
方法定义与调用
方法是代码复用的基本单元,包含参数传递和返回值机制,例如计算两数之和的方法:
public static int addNumbers(int a, int b) {
return a + b; // 自动类型推导(若参数为double则需调整返回类型)
}
调用方式:int result = addNumbers(3, 5);
面向对象特性实践
类与对象创建
以“学生”为例设计一个简单的POJO(Plain Old Java Object):
public class Student {
private String id; // 学号(封装性:私有字段)
private String name;
private double gpa;
// 构造函数初始化属性
public Student(String id, String name, double gpa) {
this.id = id;
this.name = name;
this.gpa = gpa;
}
// Getter/Setter方法实现受控访问
public String getId() { return id; }
public void setName(String newName) { this.name = newName; }
}
实例化对象:
Student stu = new Student("S001", "Bob", 3.8);
System.out.println("姓名:" + stu.getName()); // 输出:姓名:Bob
继承与多态
通过继承实现代码复用:
// 父类:Person
public abstract class Person {
protected String identityCard;
public Person(String id) { this.identityCard = id; }
public abstract void work(); // 抽象方法强制子类实现
}
// 子类:Teacher扩展功能
public class Teacher extends Person {
public Teacher(String id) { super(id); }
@Override
public void work() {
System.out.println("教学");
}
}
多态演示:
Person p = new Teacher("T007");
p.work(); // 实际调用Teacher类的work()方法
接口与实现
定义行为契约并分离关注点:
interface Flyable {
void fly(); // 仅声明方法签名,无实现
}
class Airplane implements Flyable {
@Override
public void fly() {
System.out.println("飞机起飞!");
}
}
任何实现该接口的类都必须提供具体逻辑。
异常处理机制
Java采用检查型异常(Checked Exception)确保程序健壮性,典型模式如下:
try {
FileReader fr = new FileReader("nonexistent.txt"); // 可能抛出IOException
} catch (FileNotFoundException e) {
System.err.println("文件未找到:" + e.getMessage());
} finally {
// 资源释放代码块(无论是否异常都会执行)
}
常用异常分类:
| 类别 | 示例 | 触发场景 |
|——————–|————————–|——————————|
| NullPointerException | 访问空对象的成员变量 | 未初始化引用直接调用方法 |
| ArrayIndexOutOfBoundsException | 越界访问数组元素 | 索引≥数组长度或<0 |
| SQLException | 数据库操作失败 | 连接超时、语法错误等 |
集合框架应用示例
使用ArrayList动态管理元素:
import java.util.ArrayList;
import java.util.List;
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
for (String fruit : fruits) { // 增强型for循环遍历集合
System.out.println(fruit);
}
对比不同集合的特点:
| 集合类型 | 底层实现 | 适用场景 |
|—————-|————————-|————————|
| ArrayList | 可变大小数组 | 随机访问效率高 |
| LinkedList | 双向链表 | 频繁插入/删除操作 |
| HashMap | 哈希表+链表解决冲突 | 键值对快速查找 |
| TreeSet | 红黑树结构 | 有序且去重的数据存储 |
输入输出流操作
文件读写基础示例:
// 写入文本到文件
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("Hello Java I/O!n");
} catch (IOException e) { e.printStackTrace(); }
// 读取文件内容
try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) { e.printStackTrace(); }
推荐使用try-with-resources语法自动关闭资源(JDK 7+特性)。
多线程编程模型
创建线程有两种主流方式:
- 继承Thread类:
class MyThread extends Thread { public void run() { System.out.println("子线程运行中..."); } } // 启动线程 new MyThread().start(); - 实现Runnable接口(更灵活的设计模式):
class Task implements Runnable { public void run() { / 任务逻辑 / } } // 交由线程池管理 ExecutorService pool = Executors.newFixedThreadPool(4); pool.submit(new Task());同步控制工具类包括
synchronized关键字、ReentrantLock、CountDownLatch等,用于解决并发安全问题。
标准库与第三方依赖管理
现代Java开发离不开构建工具Maven或Gradle,例如在Maven项目中引入Gson库处理JSON序列化:
<!-pom.xml依赖配置 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
使用示例:
Gson gson = new Gson(); MyObject obj = gson.fromJson(jsonString, MyObject.class); // JSON反序列化为对象 String jsonOutput = gson.toJson(obj); // 对象转JSON字符串
相关问答FAQs
Q1: Java为什么需要显式类型声明?与其他动态语言有何区别?
A: Java作为静态类型语言,编译期会进行严格的类型检查,这能提前捕获许多潜在错误(如类型不匹配),提高程序稳定性,相比之下,Python等动态语言允许变量随时改变类型,虽然开发灵活但运行时风险更高,静态类型的劣势是代码冗余较多,但可通过泛型(Generics)部分缓解。
Q2: 如何处理Java中的空指针异常(NullPointerException)?
A: 主要策略包括:①使用Optional类包装可能为null的值(Java 8+);②在调用对象方法前进行非空判断(如if (obj != null));③利用IDE的静态分析插件预警潜在NPE;④合理设计API避免返回null(例如改用空集合代替null)。
Optional<User> optionalUser = repository.findById(userId); optionalUser.ifPresent(user -> System.out.println(user.getName())); //
