29 从零开始学习Java小白教程

29 从零开始学习Java小白教程

小节:构造方法与this关键字

在Java中,构造方法和this关键字是面向对象编程中的重要概念。我们将在本小节中详细讲解这两个主题。

一、构造方法

1. 什么是构造方法

构造方法是一个特殊的方法,用于初始化对象的状态。它的名字与类名相同,并且没有返回类型(甚至没有void)。构造方法在创建对象时被自动调用。

2. 构造方法的特点

  • 与类名相同:构造方法的名称必须与类名相同。
  • 没有返回值:构造方法不返回值,也不需要声明返回值类型。
  • 可以重载:可以在同一个类中定义多个构造方法,只要参数列表不同(重载)。

3. 构造方法的定义

以下是一个简单的构造方法示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Person {
private String name;
private int age;

// 构造方法
public Person(String name, int age) {
this.name = name; // 使用`this`关键字传递参数
this.age = age;
}

public void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}

在上面的例子中,Person类有一个构造方法,它接受两个参数:nameage。在构造方法内部,我们使用this关键字来引用当前对象的属性。

二、this关键字

1. this的含义

this关键字是一个引用,用于指向当前对象的实例。通过this,我们可以访问当前对象的属性和方法。

2. this的使用场景

  • 区分属性和参数:当参数名称与成员变量名称相同时,可以使用this来区分它们。
  • 调用当前对象的方法:可以使用this来调用当前对象的其他方法。
  • 传递当前对象:可以使用this作为参数传递给其他方法或构造器。

3. 使用示例

以下是一个具体示例,展示如何使用this关键字:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Car {
private String brand;
private String model;

// 构造方法
public Car(String brand, String model) {
this.brand = brand; // `this.brand`指代对象的属性,`brand`是参数
this.model = model;
}

public void displayDetails() {
System.out.println("Brand: " + this.brand + ", Model: " + this.model);
}

public void changeModel(String model) {
this.model = model; // 更新当前对象的model属性
}
}

public class Main {
public static void main(String[] args) {
Car myCar = new Car("Toyota", "Corolla");
myCar.displayDetails(); // 输出: Brand: Toyota, Model: Corolla

myCar.changeModel("Camry");
myCar.displayDetails(); // 输出: Brand: Toyota, Model: Camry
}
}

总结

  • 构造方法是用于初始化对象的特殊方法,可以有多个重载形式。
  • this关键字是一个指向当前对象的引用,常用于区分属性和参数,以及调用当前对象的方法。

通过理解构造方法和this关键字,你将能够更好地掌握Java的面向对象编程基础。继续加油!

30 Java连接数据库与执行SQL语句

30 Java连接数据库与执行SQL语句

在Java中,连接数据库和执行SQL语句是非常重要的技能。下面我们将详细介绍如何在Java中操作数据库,包括连接数据库、执行查询和更新操作等。

1. 添加数据库驱动依赖

在开始之前,你需要确保项目中包含了相应的数据库驱动。如果你使用的是 Maven,可以在 pom.xml 中添加以下依赖。例如,对于 MySQL 数据库,可以使用:

1
2
3
4
5
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version> <!-- 请根据需要选择版本 -->
</dependency>

2. 加载数据库驱动

在Java中,通常使用Class.forName方法来加载数据库驱动,以下是连接 MySQL 数据库的示例代码:

1
2
3
4
5
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

3. 连接数据库

使用 DriverManager 来建立连接。以下是一个连接到 MySQL 数据库的示例:

1
2
3
4
5
6
7
8
9
10
11
12
String url = "jdbc:mysql://localhost:3306/your_database"; // 数据库URL
String user = "your_username"; // 数据库用户名
String password = "your_password"; // 数据库密码

Connection connection = null;

try {
connection = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
} catch (SQLException e) {
e.printStackTrace();
}

4. 创建Statement对象

一旦连接成功,你可以创建 StatementPreparedStatement 对象来执行 SQL 语句。这里我们使用 Statement 对象:

1
2
3
4
5
6
7
Statement statement = null;

try {
statement = connection.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}

5. 执行SQL查询

使用 executeQuery 方法可以执行 SQL 查询,返回一个 ResultSet 对象。以下是一个执行查询的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
String sql = "SELECT * FROM your_table";
ResultSet resultSet = null;

try {
resultSet = statement.executeQuery(sql);

while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

6. 执行更新操作

使用 executeUpdate 方法可以执行 INSERT、UPDATE 和 DELETE 命令。示例代码如下:

1
2
3
4
5
6
7
8
9
String insertSQL = "INSERT INTO your_table (name) VALUES ('New Name')";
int rowsAffected = 0;

try {
rowsAffected = statement.executeUpdate(insertSQL);
System.out.println("插入成功, 受影响的行数: " + rowsAffected);
} catch (SQLException e) {
e.printStackTrace();
}

7. 关闭连接

使用完数据库后,务必要关闭连接。可以使用 finally 语句块来确保连接被关闭:

1
2
3
4
5
6
7
8
9
10
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}

示例应用

整合以上代码,可以创建一个简单的数据库操作示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseExample {

public static void main(String[] args) {
// 数据库连接参数
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";

Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;

try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连接数据库
connection = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");

// 创建Statement对象
statement = connection.createStatement();

// 查询数据
String sql = "SELECT * FROM your_table";
resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}

// 插入数据
String insertSQL = "INSERT INTO your_table (name) VALUES ('New Name')";
int rowsAffected = statement.executeUpdate(insertSQL);
System.out.println("插入成功, 受影响的行数: " + rowsAffected);

} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

总结

通过以上介绍,你可以了解到如何在 Java 中连接数据库、执行查询和更新操作。这些是与数据库交互的基本要素,希望能够帮助你在 Java 开发中更好地使用数据库。

小节包的概念与使用

小节包的概念与使用

在学习Java的过程中,了解小节包(或称为“包”)的概念和使用是至关重要的。以下是关于小节包的详细内容。

什么是小节包?

  • (Package)是用于组织类和接口的命名空间。
  • 包能够避免命名冲突,提供可管理的命名空间,允许将相关的类组织在一起。
  • 包的命名遵循反向域名的设计原则,例如com.example.myapp

创建包

在Java中创建包非常简单,主要通过在Java文件的顶部使用 package 关键字来定义。

示例

1
2
3
4
5
6
7
8
9
// 创建一个名为 com.example.demo 的包
package com.example.demo;

// 在该包中定义一个类
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

使用包

在使用其他包中的类时,我们需要导入相关的类。这可以通过 import 关键字来实现。

示例

假设我们有两个类,HelloWorld 位于 com.example.demo 包中,另一个类 Main 位于默认包中。我们可以这样导入:

1
2
3
4
5
6
7
8
9
// 使用 import 导入其他包中的类
import com.example.demo.HelloWorld;

public class Main {
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
hello.main(args); // 调用 HelloWorld 中的方法
}
}

自定义包的结构

使用包的最佳实践是将相关的类放在同一个包中,并保持良好的目录结构。推荐的文件结构如下所示:

1
2
3
4
5
6
src
└── com
└── example
└── demo
├── HelloWorld.java
└── AnotherClass.java

包的访问控制

在Java中,不同的访问修饰符(publicprotectedprivate,默认)影响一个类、方法或者变量在其他包中的访问:

  • public:可以被任何其他类访问。
  • protected:只能被同一个包中的类或子类访问。
  • private:只能被同一个类访问。
  • 默认(不写修饰符):只能被同包中的其他类访问。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.example.demo;

public class MyClass {
public void myPublicMethod() {
// 可以被其他包访问
}

protected void myProtectedMethod() {
// 只能在同包中或子类中访问
}

private void myPrivateMethod() {
// 仅能在 MyClass 内部访问
}

void myDefaultMethod() {
// 只有同包内可访问
}
}

常用的Java标准库包

Java SDK 提供了许多预定义的包,以下是一些最常用的包:

  • java.lang:包含基本的类,如 StringMath 等(默认导入)。
  • java.util:包含集合类、日期时间类等。
  • java.io:用于输入和输出操作。
  • java.net:处理与网络相关的类。

总结

在Java中,包是组织代码的一个基本构建块。通过合理使用包,可以提高代码的可读性、可维护性和重用性。在学习和编写Java程序时,务必理解包的概念及其使用方式。