Java副业教程涵盖了从基础知识到实战项目的全面内容,帮助你掌握Java编程技能。文章详细介绍了Java安装、语法、常用框架以及实战项目开发,助你提升Java技术并探索多种副业机会。此外,还提供了技能提升建议和实际案例分享,帮助你更好地应对副业中的各种挑战。
Java基础知识入门
Java简介与安装
Java 是一种广泛使用的编程语言和计算平台,由 Sun Microsystems(现为 Oracle)开发。Java 语言的主要特点包括跨平台性、安全性和网络通信能力。跨平台性意味着 Java 程序可以在多种操作系统(如 Windows、Linux 和 macOS)上运行,而不需要重新编译。
安装 Java 开发环境需要以下几个步骤:
-
下载并安装 JDK(Java Development Kit):JDK 是 Java 开发工具包,包含了编译、运行 Java 程序所需的各种工具和库。访问 Oracle 官方网站下载最新版本的 JDK(例如 JDK 17)。
-
配置环境变量:安装完成后,需要配置环境变量以确保 Java 和 Java 可执行文件可以在任何位置被调用。
- 在 Windows 系统中,打开“控制面板” -> “系统和安全” -> “系统” -> “高级系统设置”,点击“环境变量”。
- 在“系统变量”中,新建两个变量:
JAVA_HOME
和PATH
。JAVA_HOME
等于 JDK 的安装路径,例如C:\Program Files\Java\jdk-17
。PATH
添加%JAVA_HOME%\bin
。
- 验证安装:打开命令行窗口并输入
java -version
,如果能看到 Java 版本信息,说明安装成功。
第一个Java程序
编写第一个 Java 程序是了解 Java 语言的良好起点。下面我们将创建一个简单的 "Hello World" 程序。
-
创建 Java 文件:在文件夹中创建一个名为
HelloWorld.java
的文件。 - 编写 Java 代码:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
- 编译 Java 文件:打开命令行窗口,进入包含
HelloWorld.java
文件的目录,运行以下命令进行编译:
javac HelloWorld.java
- 运行 Java 程序:编译成功后,会生成一个
HelloWorld.class
文件。运行以下命令来执行程序:
java HelloWorld
此时,您将在命令行窗口中看到 "Hello, World!" 的输出。
Java基本语法与数据类型
Java 语言采用了一套严格的语法结构,下面将介绍一些基本的语法和数据类型。
-
注释:Java 支持三种类型的注释:
- 单行注释:
// 这是一条单行注释
- 多行注释:
/* 这是一条多行注释 */
- 文档注释:
/** 这是一条文档注释 */
- 单行注释:
-
变量与类型:变量是存储数据的容器,Java 中的变量类型分为基本数据类型和引用数据类型。
-
基本数据类型:包括
byte
、short
、int
、long
、float
、double
、char
和boolean
。byte b = 127; // byte 类型 short s = 32767; // short 类型 int i = 2147483647; // int 类型 long l = 9223372036854775807L; // long 类型 float f = 3.14f; // float 类型 double d = 3.14159; // double 类型 char c = 'A'; // char 类型 boolean bl = true; // boolean 类型
- 引用数据类型:包括类(class)、接口(interface)、数组等。
String str = "Hello"; int[] arr = {1, 2, 3, 4, 5};
-
-
运算符:Java 中的运算符分为以下几种:
- 算术运算:
+
、-
、*
、/
、%
- 赋值运算:
=
,+=
,-=
,*=
,/=
,%=
- 逻辑运算:
&
、|
、^
、&&
、||
、!
- 比较运算:
==
、!=
、>
、<
、>=
、<=
示例:
int a = 10; int b = 5; int sum = a + b; // 算术运算 boolean isLess = a < b; // 比较运算 boolean isTrue = true; boolean result = isTrue && (a > b); // 逻辑运算
- 算术运算:
-
控制语句:Java 支持多种控制语句,如
if
语句、switch
语句和循环结构。-
if 语句:
int age = 20; if (age < 18) { System.out.println("未成年"); } else { System.out.println("成年"); }
-
switch 语句:
int day = 3; switch (day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; default: System.out.println("其他天"); }
-
循环结构:
for (int i = 0; i < 5; i++) { System.out.println(i); } int j = 0; while (j < 5) { System.out.println(j); j++; } int k = 0; do { System.out.println(k); k++; } while (k < 5);
-
通过以上内容,你可以了解 Java 基础知识,为进一步学习 Java 奠定坚实的基础。
Java常用框架简介
常用开发框架介绍
随着 Java 技术的不断发展,出现了许多优秀的开发框架,这些框架大大简化了开发过程,提高了代码质量和开发效率。以下是几个常用的 Java 开发框架:
-
Spring:
- 简介:Spring 是一个轻量级的开源框架,其核心是依赖注入(DI)和面向切面编程(AOP)。Spring 提供了全面的面向企业应用开发的解决方案。
- 特点:
- 依赖注入:通过 XML 或注解配置对象之间依赖关系。
- AOP:可以动态地添加功能(如日志、事务管理)。
- 事务管理:提供了灵活的事务管理器。
- MVC 框架:适用于 Web 应用开发。
- 数据访问:如 JDBCTemplate、HibernateTemplate 用于简化数据库操作。
-
使用示例:
@Configuration public class AppConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("username"); dataSource.setPassword("password"); return dataSource; } }
@Service public class UserService { @Autowired private UserRepository userRepository; public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } }
-
Hibernate:
- 简介:Hibernate 是一个对象关系映射(ORM)框架,用于 Java 应用程序与数据库之间的数据持久化操作。
- 特点:
- ORM:通过注解或 XML 映射 Java 对象到数据库表。
- 事务管理:内置的事务管理功能。
- 查询语言:支持 HQL(Hibernate 查询语言)。
- 透明持久化:开发人员无需关心底层数据库操作。
-
使用示例:
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "username") private String username; @Column(name = "password") private String password; // getters and setters } public class UserRepository { @Autowired private SessionFactory sessionFactory; public User getUserById(Long id) { Session session = sessionFactory.openSession(); User user = session.get(User.class, id); session.close(); return user; } }
-
MyBatis:
- 简介:MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了典型的 JDBC 编程和手动设置参数以及获取结果集。
- 特点:
- SQL 映射文件:将 SQL 语句与 Java 代码分离。
- 动态 SQL:支持 SQL 语句的动态生成。
- 采用 XML 或注解配置。
-
使用示例:
<mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.entity.User"> SELECT * FROM users WHERE id = #{id} </select> </mapper>
public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(Long id); } public class UserService { @Autowired private UserMapper userMapper; public User getUserById(Long id) { return userMapper.getUserById(id); } }
通过以上框架的介绍,你能够更好地理解这些框架的功能和用途,并在实际项目中选择合适的框架来提高开发效率。
Java项目实战
小项目实战
在本节中,我们将通过一个简易博客系统的小项目来展示如何使用 Java 实现一个功能完整的 Web 应用。这个项目将涵盖用户注册、登录、发布博客、查看博客等基本功能。
-
项目需求分析:
- 用户注册与登录功能
- 发布博客
- 查看博客
- 管理博客(编辑和删除)
-
项目搭建:
- 使用 Spring Boot 快速搭建项目结构
- 使用 Maven 或 Gradle 作为构建工具
- 配置数据库(如 MySQL)
- 项目开发流程:
- 数据库设计:设计用户表
users
和博客表posts
。 - 后端开发:实现用户注册、登录、发布博客、查看博客等服务。
- 前端开发:使用 HTML、CSS、JavaScript 实现前端界面。
- 集成测试:确保每个功能都能正常运行。
- 数据库设计:设计用户表
数据库设计
首先,设计数据库表结构:
-
用户表
users
:id
:用户的唯一标识,自增长的主键username
:用户的用户名password
:用户的密码(建议使用哈希存储)email
:用户的邮箱地址created_at
:用户注册时间
- 博客表
posts
:id
:博客的唯一标识,自增长的主键title
:博客标题content
:博客内容author_id
:发布该博客的用户 IDcreated_at
:博客创建时间updated_at
:博客更新时间
后端开发
使用 Spring Boot 实现后端服务:
-
创建 Spring Boot 项目:
- 使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择 Web、JPA、Thymeleaf 等相关依赖。
-
配置数据库连接:
- 在
application.properties
文件中配置数据库连接信息。
spring.datasource.url=jdbc:mysql://localhost:3306/blog spring.datasource.username=root spring.datasource.password=root spring.jpa.hibernate.ddl-auto=update
- 在
-
创建实体类:
-
用户实体类
User.java
:@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique = true) private String username; @Column private String password; @Column private String email; @Column private Date created_at; // getters and setters }
-
博客实体类
Post.java
:@Entity public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String title; @Column private String content; @ManyToOne @JoinColumn(name = "author_id") private User author; @Column private Date created_at; @Column private Date updated_at; // getters and setters }
-
-
创建 Repository:
-
用户仓库
UserRepository.java
:public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); }
-
博客仓库
PostRepository.java
:public interface PostRepository extends JpaRepository<Post, Long> { List<Post> findAllByOrderByCreated_at_Desc(); }
-
-
创建 Service:
-
用户服务
UserService.java
:@Service public class UserService { @Autowired private UserRepository userRepository; public User register(User user) { user.setPassword(passwordEncoder().encode(user.getPassword())); user.setCreated_at(new Date()); return userRepository.save(user); } public User login(String username, String password) { User user = userRepository.findByUsername(username); if (user != null && passwordEncoder().matches(password, user.getPassword())) { return user; } return null; } @Autowired private PasswordEncoder passwordEncoder; }
-
博客服务
PostService.java
:@Service public class PostService { @Autowired private PostRepository postRepository; public Post createPost(Post post) { post.setCreated_at(new Date()); post.setUpdated_at(post.getCreated_at()); return postRepository.save(post); } public Post updatePost(Post post) { post.setUpdated_at(new Date()); return postRepository.save(post); } public void deletePost(Post post) { postRepository.delete(post); } }
-
-
创建 Controller:
-
用户控制器
UserController.java
:@RestController public class UserController { @Autowired private UserService userService; @PostMapping("/register") public ResponseEntity<User> register(@RequestBody User user) { User registeredUser = userService.register(user); return ResponseEntity.ok(registeredUser); } @PostMapping("/login") public ResponseEntity<User> login(@RequestBody User user) { User loggedUser = userService.login(user.getUsername(), user.getPassword()); if (loggedUser != null) { return ResponseEntity.ok(loggedUser); } else { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } }
-
博客控制器
PostController.java
:@RestController public class PostController { @Autowired private PostService postService; @PostMapping("/posts") public ResponseEntity<Post> createPost(@RequestBody Post post) { Post createdPost = postService.createPost(post); return ResponseEntity.ok(createdPost); } @PutMapping("/posts") public ResponseEntity<Post> updatePost(@RequestBody Post post) { Post updatedPost = postService.updatePost(post); return ResponseEntity.ok(updatedPost); } @DeleteMapping("/posts/{id}") public ResponseEntity<Void> deletePost(@PathVariable Long id) { postService.deletePost(postService.findById(id)); return ResponseEntity.ok().build(); } @GetMapping("/posts") public ResponseEntity<List<Post>> getAllPosts() { List<Post> posts = postService.getAllPosts(); return ResponseEntity.ok(posts); } }
-
通过上述步骤,我们已经完成了简易博客系统的后端开发。
前端开发
前端部分可以使用 HTML、CSS 和 JavaScript 实现简单的界面:
-
使用 Thymeleaf 模板引擎:
- 创建 HTML 模板文件,如
index.html
、login.html
、register.html
等。
- 创建 HTML 模板文件,如
-
实现前端页面:
index.html
:首页,展示所有博客。login.html
:登录页面。register.html
:注册页面。post.html
:博客详情页面。
- JavaScript 实现交互:
- 使用 AJAX 请求与后端 API 进行交互。
Java副业机会介绍
副业市场分析
随着互联网的快速发展和数字化转型的不断推进,Java 副业市场变得越来越热门。Java 作为一门成熟的编程语言,拥有广阔的应用场景和丰富的技术生态,使得 Java 技能在副业市场上具有很高的需求。以下是一些常见的 Java 副业机会:
- Web 开发:你可以利用自己的 Java 技能为客户提供网站开发服务,如企业官网、电商网站、社交网络等。
- 移动应用开发:利用 Java 技能在 Android 平台上开发移动应用,满足客户的移动应用需求。
- 系统开发:为公司提供定制化的系统解决方案,如 ERP、CRM、OA 等企业管理系统。
- 数据处理:为公司提供数据处理服务,如数据清洗、数据分析、数据挖掘等。
- 技术培训:如果你有丰富的 Java 开发经验,可以考虑从事技术培训,帮助其他开发者提升技能。
- 咨询顾问:为企业提供技术咨询和解决方案,帮助企业解决技术上的难题。
常见副业类型与需求
-
Web 开发:
- 技能需求:Spring Boot、MyBatis、前端框架(如 Vue.js、React)。
- 工作内容:开发企业官网、电商平台、社交网络等。
-
参考案例:
@RestController public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/users") public List<User> getUsers() { return userRepository.findAll(); } }
-
移动应用开发:
- 技能需求:Android 开发、Java、Kotlin、前端框架(如 Flutter)。
- 工作内容:开发 Android 应用程序,涉及 UI 设计、功能实现等。
-
参考案例:
public class MainActivity extends AppCompatActivity { private static final int REQUEST_IMAGE_PICK = 1; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, REQUEST_IMAGE_PICK); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) { Uri selectedImageUri = data.getData(); imageView.setImageURI(selectedImageUri); } } }
-
系统开发:
- 技能需求:Spring Boot、MyBatis、数据库设计。
- 工作内容:开发企业管理系统,如 ERP、CRM、OA 等。
-
参考案例:
@RestController public class EmployeeController { @Autowired private EmployeeRepository employeeRepository; @GetMapping("/employees") public List<Employee> getEmployees() { return employeeRepository.findAll(); } }
-
数据处理:
- 技能需求:Java、数据处理工具(如 Apache Hadoop、Apache Spark)。
- 工作内容:处理公司内部数据,进行数据清洗、分析等。
-
参考案例:
public class DataProcessor { public void processData() { // 使用 Hadoop 或 Spark 读取和处理数据 SparkSession spark = SparkSession.builder().appName("DataProcessor").getOrCreate(); DataFrameReader reader = spark.read().format("csv").option("header", "true").load("data.csv"); Dataset<Row> dataframe = reader.toDF(); dataframe.show(); } }
-
技术培训:
- 技能需求:丰富的 Java 开发经验、教学能力。
- 工作内容:编写教程、录制视频课程、在线授课等。
-
参考案例:
public class JavaBasics { public static void main(String[] args) { System.out.println("Welcome to Java Basics!"); int a = 10; int b = 20; System.out.println("Sum of a and b is: " + (a + b)); } }
-
咨询顾问:
- 技能需求:深厚的 Java 技能、丰富的项目经验、良好的沟通能力。
- 工作内容:为客户提供技术咨询,解决技术难题。
-
参考案例:
public class TechnicalConsultant { public void consult(String problem) { if (problem.contains("Spring")) { System.out.println("使用 Spring Boot 框架可以帮助您快速搭建 Web 应用。"); } else if (problem.contains("Hibernate")) { System.out.println("使用 Hibernate ORM 可以简化数据库操作。"); } else { System.out.println("请提供更多技术问题的详细描述。"); } } }
通过以上分析,你可以更好地了解 Java 副业市场的需求和机会,选择适合自己的副业类型。
Java副业技能提升
技能自我评估
为了提升 Java 副业技能,首先需要进行技能自我评估,了解自身的优势和不足。以下是一些评估步骤:
-
基础知识:
- 评估 Java 基础语法、数据类型、控制语句等是否掌握。
- 评估是否熟悉常用的开发框架,如 Spring、MyBatis、Hibernate。
-
高级技能:
- 评估是否掌握多线程编程、并发控制等高级技术。
- 评估是否有实际的项目经验,是否熟悉整个项目开发流程。
-
框架与工具:
- 评估是否熟练使用 Spring、MyBatis 等框架。
- 评估是否熟悉构建工具,如 Maven、Gradle。
-
数据库:
- 评估是否了解 SQL 语言,是否熟悉 MySQL、Oracle 等数据库。
- 评估是否了解数据库设计的基本原则,是否熟悉数据库性能优化。
-
Web 技术:
- 评估是否了解 Web 开发相关的技术栈,如 Spring Boot、Thymeleaf 等。
- 评估是否了解前端技术(如 HTML、CSS、JavaScript)和前端框架(如 Vue.js、React)。
- 团队协作:
- 评估是否熟悉敏捷开发流程,是否具备良好的团队合作能力。
- 评估是否熟悉版本控制系统(如 Git、SVN),是否熟悉代码管理工具(如 JIRA、GitLab)。
通过以上评估,你可以明确自己的优点和不足,为接下来的技能提升提供方向。
技能提升建议与资源推荐
为了提升 Java 技能,以下是针对不同方面的技能提升建议和资源推荐:
-
基础知识:
- 建议:
- 复习 Java 基础语法和数据类型。
- 通过编写简单的程序加深理解。
- 资源:
- 建议:
-
高级技能:
- 建议:
- 学习多线程编程,了解线程池、并发控制等高级技术。
- 参与实际项目,积累实际开发经验。
- 资源:
- 建议:
-
框架与工具:
- 建议:
- 深入学习 Spring 框架,掌握其核心概念和常用功能。
- 熟练使用 Maven 和 Gradle 构建工具。
- 资源:
- 建议:
-
数据库:
-
Web 技术:
- 建议:
- 深入学习 Spring Boot 和 Thymeleaf 技术栈。
- 学习前端技术(如 HTML、CSS、JavaScript),掌握常用的前端框架。
- 资源:
- 建议:
- 团队协作:
Java副业实战经验分享
成功案例分享
在本节中,我们将分享一些 Java 副业的成功案例,这些案例来自实际的开发经验,为你提供一些参考和启发。
-
案例一:Web 开发项目
- 背景:为一家创业公司开发企业官网,需要展示公司简介、产品介绍、联系方式等信息。
- 技术栈:Spring Boot、Thymeleaf、MySQL
- 解决方案:
- 使用 Spring Boot 快速搭建项目结构。
- 使用 Thymeleaf 作为前端模板引擎。
- 使用 MySQL 存储数据库。
- 开发用户注册、登录、查看产品信息等功能。
- 成果:项目成功上线,公司官网运行稳定,满足了客户的需求。
@RestController public class ProductController { @Autowired private ProductRepository productRepository; @GetMapping("/products") public List<Product> getProducts() { return productRepository.findAll(); } }
-
案例二:Android 应用开发
- 背景:为一家外卖平台开发 Android 应用,用户可以查看菜单、下单、支付等功能。
- 技术栈:Android 开发、Java、Retrofit
- 解决方案:
- 使用 Android 开发技术搭建应用框架。
- 使用 Retrofit 作为网络请求库,简化网络请求代码。
- 实现用户登录、查看菜单、下单支付等功能。
- 成果:应用成功上线,用户反馈良好,满足了用户的日常需求。
public class MenuActivity extends AppCompatActivity { private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); MenuApiService service = retrofit.create(MenuApiService.class); service.getMenuItems().enqueue(new Callback<List<Menu>>() { @Override public void onResponse(Call<List<Menu>> call, Response<List<Menu>> response) { recyclerView.setAdapter(new MenuAdapter(response.body())); } @Override public void onFailure(Call<List<Menu>> call, Throwable t) { // 处理失败情况 } }); } }
-
案例三:企业管理系统开发
- 背景:为一家企业开发企业管理系统,包括员工管理、客户管理、订单管理等功能。
- 技术栈:Spring Boot、MyBatis、MySQL
- 解决方案:
- 使用 Spring Boot 快速搭建项目结构。
- 使用 MyBatis 作为 ORM 框架。
- 使用 MySQL 存储数据库。
- 开发员工管理、客户管理、订单管理等功能。
- 成果:系统成功上线,满足了企业的日常需求,提高了工作效率。
@RestController public class OrderController { @Autowired private OrderRepository orderRepository; @GetMapping("/orders") public List<Order> getOrders() { return orderRepository.findAll(); } @PostMapping("/orders") public Order createOrder(@RequestBody Order order) { return orderRepository.save(order); } }
通过以上案例,你可以从实际项目中学习到如何使用 Java 技能解决实际问题,为自己的副业提供更多的灵感和经验。
常见问题与解决方案
在进行 Java 副业的过程中,可能会遇到各种问题。以下是一些常见问题及其解决方案:
-
问题一:性能问题
- 问题描述:在开发过程中,可能会遇到性能瓶颈,导致程序运行缓慢。
- 解决方案:
- 使用多线程编程优化程序性能。
- 采用缓存技术(如 Redis)减少数据库访问。
- 优化数据库查询,使用索引提高查询速度。
-
示例代码:
@Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable("users") public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } }
-
问题二:安全性问题
- 问题描述:在开发过程中,可能会遇到安全漏洞,导致数据泄露。
- 解决方案:
- 使用 HTTPS 加密传输数据。
- 对用户输入进行校验,防止 SQL 注入等攻击。
- 加密存储敏感数据。
-
示例代码:
@Controller public class LoginController { @PostMapping("/login") public ResponseEntity<User> login(@RequestBody User user) { User loggedUser = userService.login(user.getUsername(), user.getPassword()); if (loggedUser != null) { return ResponseEntity.ok(loggedUser); } else { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } }
-
问题三:代码质量问题
- 问题描述:在开发过程中,可能会出现代码质量不高,可读性差等问题。
- 解决方案:
- 保持代码简洁,避免冗余代码。
- 使用设计模式优化代码结构。
- 进行代码审查,确保代码质量。
-
示例代码:
@Service public class UserService { @Autowired private UserRepository userRepository; public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } public void saveUser(User user) { userRepository.save(user); } }
-
问题四:版本控制问题
- 问题描述:在团队开发过程中,可能会遇到版本控制不规范,导致代码冲突等问题。
- 解决方案:
- 使用 Git 或 SVN 等版本控制系统。
- 保持代码提交规范,编写有意义的提交信息。
- 定期合并代码,避免长期分支。
-
示例代码:
git add . git commit -m "Update user service" git push origin main
通过以上解决方案,你可以更好地解决开发过程中遇到的问题,提高 Java 副业的质量和效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章