1. Java入门基础概述
Java作为一门面向对象的编程语言,自1995年由Sun Microsystems推出以来,已经成为全球最流行的编程语言之一。它的"一次编写,到处运行"的特性,使得Java在企业级应用、移动开发和大数据领域都有着广泛的应用。对于初学者来说,掌握Java的基础知识是进入编程世界的重要第一步。
Java语言的核心特点包括:
- 简单性:去除了C++中复杂的指针和多重继承等概念
- 面向对象:完全基于对象和类的概念构建
- 平台无关性:通过JVM实现跨平台运行
- 安全性:提供安全管理器和字节码验证机制
- 多线程:内置对多线程编程的支持
- 动态性:支持运行时加载类和反射机制
2. 开发环境搭建
2.1 JDK安装与配置
要开始Java编程,首先需要安装Java开发工具包(JDK)。目前主流的JDK版本有Oracle JDK和OpenJDK,对于初学者来说,建议选择最新的LTS(Long-Term Support)版本。
安装步骤:
- 访问Oracle官网或OpenJDK网站下载适合你操作系统的JDK安装包
- 运行安装程序,按照向导完成安装
- 配置环境变量:
- 设置JAVA_HOME指向JDK安装目录
- 将%JAVA_HOME%\bin添加到PATH环境变量中
- 验证安装:在命令行输入
java -version和javac -version,应显示正确的版本信息
提示:在Windows系统中,环境变量配置可以通过"系统属性->高级->环境变量"进行设置;在Linux/macOS系统中,可以编辑~/.bashrc或~/.zshrc文件添加export语句。
2.2 开发工具选择
对于初学者,推荐使用以下开发工具:
- 文本编辑器+命令行:适合学习基础语法,如VS Code、Sublime Text等
- 集成开发环境(IDE):
- IntelliJ IDEA:功能强大,社区版免费
- Eclipse:老牌Java IDE,插件丰富
- NetBeans:官方提供的轻量级IDE
IDE的优势在于提供了代码自动完成、调试工具、版本控制集成等功能,可以大大提高开发效率。但对于Day1的学习,建议先从简单的文本编辑器开始,以更好地理解编译和运行过程。
3. 第一个Java程序
3.1 HelloWorld示例
让我们从经典的"Hello World"程序开始:
java复制public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
这个简单程序包含了Java的几个基本概念:
public class HelloWorld:定义一个公开类,类名必须与文件名一致public static void main(String[] args):程序入口方法System.out.println():标准输出语句
3.2 编译与运行
- 将代码保存为HelloWorld.java文件
- 打开命令行,导航到文件所在目录
- 编译:
javac HelloWorld.java(生成HelloWorld.class字节码文件) - 运行:
java HelloWorld(注意不要加.class后缀)
常见问题:如果遇到"找不到或无法加载主类"错误,请检查类名是否正确、是否在正确目录执行、classpath设置是否正确。
4. Java基础语法
4.1 变量与数据类型
Java是强类型语言,所有变量都必须先声明后使用。Java的基本数据类型分为四类八种:
- 整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
- 浮点类型:float(4字节)、double(8字节)
- 字符类型:char(2字节,Unicode)
- 布尔类型:boolean(true/false)
变量声明示例:
java复制int age = 25;
double price = 19.99;
char grade = 'A';
boolean isJavaFun = true;
4.2 运算符
Java支持丰富的运算符:
- 算术运算符:+、-、*、/、%、++、--
- 关系运算符:==、!=、>、<、>=、<=
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、<<、>>、>>>
- 赋值运算符:=、+=、-=等
- 三元运算符:? :
运算符优先级需要特别注意,不确定时可以使用括号明确运算顺序。
4.3 控制结构
Java提供了标准的控制结构:
- 条件语句:
java复制if (condition) {
// 代码块
} else if (anotherCondition) {
// 代码块
} else {
// 代码块
}
- switch语句:
java复制switch (expression) {
case value1:
// 代码
break;
case value2:
// 代码
break;
default:
// 默认代码
}
- 循环结构:
java复制// while循环
while (condition) {
// 代码
}
// do-while循环
do {
// 代码
} while (condition);
// for循环
for (initialization; condition; update) {
// 代码
}
- 跳转语句:break、continue、return
4.4 数组
数组是存储固定大小同类型元素的数据结构:
java复制// 声明和初始化
int[] numbers = new int[5]; // 长度为5的整型数组
String[] names = {"Alice", "Bob", "Charlie"}; // 初始化赋值
// 访问元素
int first = numbers[0];
names[1] = "Robert";
// 多维数组
int[][] matrix = new int[3][3];
matrix[0][0] = 1;
数组长度固定,创建后不能改变大小。如果需要动态大小的集合,可以使用Java集合框架中的ArrayList等类。
5. 面向对象基础
5.1 类与对象
类是对象的蓝图,对象是类的实例。定义一个简单的类:
java复制public class Person {
// 字段(属性)
String name;
int age;
// 方法
void introduce() {
System.out.println("Hello, I'm " + name + ", " + age + " years old.");
}
}
创建和使用对象:
java复制Person person1 = new Person();
person1.name = "Alice";
person1.age = 25;
person1.introduce();
5.2 构造方法
构造方法用于初始化对象,名称与类名相同,没有返回类型:
java复制public class Person {
String name;
int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法...
}
// 使用构造方法创建对象
Person person2 = new Person("Bob", 30);
5.3 封装与访问控制
Java通过访问修饰符实现封装:
- private:仅本类可见
- (default):包内可见
- protected:包内及子类可见
- public:所有类可见
良好的封装实践:
java复制public class BankAccount {
private double balance; // 私有字段
// 公有方法访问私有字段
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
}
5.4 继承
继承允许子类继承父类的字段和方法:
java复制// 父类
public class Animal {
String name;
public void eat() {
System.out.println(name + " is eating.");
}
}
// 子类
public class Dog extends Animal {
public void bark() {
System.out.println(name + " is barking.");
}
}
// 使用
Dog myDog = new Dog();
myDog.name = "Buddy";
myDog.eat(); // 继承的方法
myDog.bark(); // 子类特有的方法
5.5 多态
多态允许使用父类引用指向子类对象:
java复制Animal myAnimal = new Dog(); // 向上转型
myAnimal.eat(); // 调用的是Dog类继承的eat方法
// 如果需要调用Dog特有的方法,需要向下转型
if (myAnimal instanceof Dog) {
Dog realDog = (Dog) myAnimal;
realDog.bark();
}
6. 常用类库介绍
6.1 String类
String是Java中最常用的类之一,表示不可变的字符序列:
java复制String str1 = "Hello";
String str2 = new String("World");
// 常用方法
int length = str1.length(); // 长度
String combined = str1.concat(str2); // 连接
boolean equal = str1.equals("Hello"); // 内容比较
String sub = str1.substring(1, 3); // 子串
int index = str1.indexOf('e'); // 字符位置
注意:String对象是不可变的,任何修改操作都会返回新的String对象。
6.2 包装类
Java为每个基本类型提供了对应的包装类:
| 基本类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
自动装箱和拆箱:
java复制Integer num = 42; // 自动装箱
int value = num; // 自动拆箱
6.3 日期时间API
Java 8引入了新的日期时间API(java.time包):
java复制// 当前日期
LocalDate today = LocalDate.now();
// 特定日期
LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
// 日期运算
LocalDate nextWeek = today.plusWeeks(1);
// 日期比较
boolean isAfter = today.isAfter(birthday);
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formatted = today.format(formatter);
7. 异常处理
7.1 异常分类
Java异常分为两大类:
- 检查型异常(Checked Exception):必须处理,如IOException
- 非检查型异常(Unchecked Exception):RuntimeException及其子类
7.2 try-catch-finally
基本异常处理结构:
java复制try {
// 可能抛出异常的代码
FileInputStream fis = new FileInputStream("file.txt");
} catch (FileNotFoundException e) {
// 处理特定异常
System.out.println("文件未找到: " + e.getMessage());
} catch (Exception e) {
// 处理其他异常
e.printStackTrace();
} finally {
// 无论是否发生异常都会执行的代码
System.out.println("清理资源");
}
7.3 抛出异常
方法可以声明抛出异常:
java复制public void readFile(String path) throws FileNotFoundException {
FileInputStream fis = new FileInputStream(path);
// ...
}
也可以主动抛出异常:
java复制public void setAge(int age) throws IllegalArgumentException {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
this.age = age;
}
8. 输入输出基础
8.1 控制台输入输出
使用Scanner类读取控制台输入:
java复制import java.util.Scanner;
public class ConsoleIO {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入你的名字: ");
String name = scanner.nextLine();
System.out.print("请输入你的年龄: ");
int age = scanner.nextInt();
System.out.printf("你好,%s!你今年%d岁。%n", name, age);
scanner.close();
}
}
8.2 文件读写
基本的文件读写操作:
java复制import java.io.*;
public class FileIO {
public static void main(String[] args) {
// 写入文件
try (PrintWriter writer = new PrintWriter("output.txt")) {
writer.println("Hello, File IO!");
} catch (FileNotFoundException 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语句可以自动关闭资源,避免资源泄漏。
9. 集合框架入门
Java集合框架提供了常用的数据结构实现:
9.1 List接口
有序集合,允许重复元素:
java复制List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add(1, "Orange"); // 在指定位置插入
List<String> linkedList = new LinkedList<>();
linkedList.add("Red");
linkedList.add("Green");
9.2 Set接口
不允许重复元素的集合:
java复制Set<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(2);
hashSet.add(1); // 重复元素不会被添加
Set<String> treeSet = new TreeSet<>(); // 有序的Set
treeSet.add("Java");
treeSet.add("Python");
treeSet.add("C++");
9.3 Map接口
键值对集合:
java复制Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
int age = hashMap.get("Alice");
Map<String, String> treeMap = new TreeMap<>(); // 按键排序
treeMap.put("USA", "Washington");
treeMap.put("China", "Beijing");
10. 学习建议与资源
10.1 学习路线建议
- 掌握基础语法和面向对象概念
- 熟悉常用类库和API
- 理解异常处理和集合框架
- 学习IO操作和多线程
- 掌握网络编程和数据库连接
- 学习常用框架如Spring
10.2 推荐资源
- 官方文档:Oracle Java Tutorials
- 在线学习平台:Codecademy、Coursera
- 书籍:《Java核心技术》、《Effective Java》
- 开发社区:Stack Overflow、GitHub
- 练习平台:LeetCode、HackerRank
10.3 实践建议
- 多写代码:从简单程序开始,逐步增加复杂度
- 阅读源码:学习标准库和优秀开源项目的实现
- 参与项目:通过实际项目积累经验
- 定期复习:巩固基础知识
- 保持好奇:关注Java生态的新发展
Java作为一门成熟且强大的语言,学习曲线可能初期较陡,但一旦掌握了基础概念,后续的学习会变得顺畅。Day1的重点是理解Java的基本语法和编程思想,建立正确的编程习惯,为后续的深入学习打下坚实基础。
