用java怎么写代码
- 后端开发
- 2025-08-23
- 6
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())); //