本文提供了全面的Java副业教程,涵盖了从基础知识到实战项目的各个方面。教程详细介绍了如何安装Java开发环境、编写第一个Java程序以及核心语法讲解等内容。此外,还深入探讨了面向对象编程、常用技术栈和后端API接口开发。最后,文章分享了准备Java面试的技巧和如何展示自己的Java项目。
Java基础知识入门Java简介
Java是一种广泛使用的面向对象编程语言,由Sun Microsystems(现为Oracle公司)于1995年推出。Java以其编写一次,到处运行(Write Once, Run Anywhere)的特性,使得它在跨平台编程中极其流行。Java的应用领域从桌面应用到手机应用,再到企业级应用,几乎无所不包。
Java语言具有以下特点:
- 跨平台性:Java程序编译成字节码,可以在任何安装了Java虚拟机(Java Virtual Machine,JVM)的系统上运行。
- 面向对象:Java语言是完全面向对象的,支持封装、继承、多态等面向对象的核心特性。
- 自动内存管理:Java具有垃圾回收机制,自动管理内存,减少了内存泄漏的风险。
- 丰富的库支持:Java类库涵盖了从输入输出、网络通信、到图形界面、数据库操作等各个方面的功能。
Java的广泛应用场景包括但不限于:
- 企业级应用:Java EE技术框架,用于构建大型的分布式系统。
- Web应用:Java Servlet、JSP和JavaServer Faces技术,用于实现Web应用中动态功能。
- 移动应用:Android操作系统就是基于Java语言编写的。
- 嵌入式开发:Java ME支持在嵌入式设备中开发应用程序。
安装Java开发环境
要开始编写Java程序,首先需要设置Java开发环境。通常这包括安装Java开发工具包(JDK)、文本编辑器(如VSCode、IntelliJ IDEA、Eclipse等)与构建工具(如Gradle或Maven)。
安装JDK
- 访问Oracle官网或使用OpenJDK下载JDK安装包。推荐最新稳定版的JDK,如JDK 11或JDK 17。
- 运行安装包,按照提示完成安装。
- 安装完成后,配置环境变量。将JDK的
bin
目录(例如C:\Program Files\Java\jdk-17\bin
)添加到系统环境变量中的Path
列表。
# Windows
setx PATH "%PATH%;C:\Program Files\Java\jdk-17\bin"
# Linux or macOS
export PATH=$PATH:/usr/lib/jvm/java-17-openjdk-amd64/bin
安装文本编辑器
选择一个适合自己的编辑器,例如:
- VSCode:适用于各种语言,支持丰富的插件扩展,如Java调试、代码补全等。
- IntelliJ IDEA:专为Java开发者设计,提供了强大的代码分析与重构工具。
- Eclipse:开源免费,支持多种编程语言,内置了Java开发所需的许多工具。
安装步骤取决于编辑器,通常包括下载安装包并根据指引完成安装。
安装构建工具
最常用的构建工具是Gradle和Maven。这里以Gradle为例:
- 访问Gradle官网下载最新版本的Gradle。
- 解压下载的压缩包,将解压后的
bin
目录添加到环境变量。
# Windows
setx PATH "%PATH%;C:\path\to\gradle-7.5.1\bin"
# Linux or macOS
export PATH=$PATH:/path/to/gradle-7.5.1/bin
第一个Java程序
编写Hello World程序是学习任何编程语言的开始。首先在文本编辑器中创建一个新的.java
文件,命名为HelloWorld.java
,并编辑如下内容:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
这是Java程序的基本结构,由public class
定义类,并在类中定义main
方法,main
方法是程序的入口点。System.out.println
函数用于输出文本到控制台。
编译与运行此程序:
# 编译Java程序
javac HelloWorld.java
# 运行Java程序
java HelloWorld
运行结果:
Hello, World!
Java核心语法讲解
变量与数据类型
变量用于存储数据,可以理解为程序中的数据容器。Java中数据类型分为基本数据类型和引用数据类型。
基本数据类型
- 整型:
byte
(1字节,-128~127)、short
(2字节,-32768~32767)、int
(4字节,-2147483648~2147483647)、long
(8字节,-9223372036854775808~9223372036854775807)。 - 浮点型:
float
(4字节,单精度浮点数)、double
(8字节,双精度浮点数)。 - 字符型:
char
(2字节,用于存储单个字符,如'c')。 - 布尔型:
boolean
(1位,用于存储真/假,true或false的值)。
定义变量时可以指定类型,例如:
int age;
float height;
char letter;
boolean isMarried;
引用数据类型
引用数据类型指的是存储对象的变量,这些类型包括类、接口和数组等。
- 类:例如
String
类。 - 接口:例如
List
接口。 - 数组:例如整型数组
int[] numbers
。
示例:
String name;
List<String> list;
int[] numbers;
条件语句与循环语句
条件语句和循环语句用于实现程序逻辑的控制流。
条件语句
条件语句主要有if
、if-else
和switch
。
if
语句
int number = 5;
if (number > 0) {
System.out.println("Number is positive.");
}
if-else
语句
int number = -5;
if (number > 0) {
System.out.println("Number is positive.");
} else {
System.out.println("Number is non-positive.");
}
switch
语句
int number = 2;
switch (number) {
case 0:
System.out.println("Number is zero.");
break;
case 1:
case 2:
System.out.println("Number is either 1 or 2.");
break;
default:
System.out.println("Number is neither 0, 1, nor 2.");
break;
}
循环语句
循环语句包括for
、while
和do-while
。
for
循环
for (int i = 0; i < 5; i++) {
System.out.println("Iteration: " + i);
}
while
循环
int i = 0;
while (i < 5) {
System.out.println("Iteration: " + i);
i++;
}
do-while
循环
int j = 0;
do {
System.out.println("Iteration: " + j);
j++;
} while (j < 5);
数组与方法
数组
数组是一组相同类型数据的集合,可以在一个变量中存放多个值。Java中的数组分为一维数组和多维数组。
int[] numbers = new int[5]; // 创建一个长度为5的整型数组
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
// 多维数组
int[][] matrix = new int[3][3];
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
matrix[2][0] = 7;
matrix[2][1] = 8;
matrix[2][2] = 9;
方法
方法是完成特定功能的一组指令。方法可以返回值,也可以不返回值。定义方法的基本格式如下:
[访问修饰符] 返回类型 方法名(参数列表) {
// 方法体
// 可选项,要么有返回语句要么有void关键字
return 返回值;
}
示例:
public class MathUtil {
public static int add(int a, int b) {
return a + b;
}
public static void printHello() {
System.out.println("Hello!");
}
}
// 调用方法
int result = MathUtil.add(3, 5);
MathUtil.printHello();
Java面向对象编程
类与对象
类是对象的模板,它定义了对象的属性(数据成员)和方法(函数)。对象是类的实例,具有类定义的属性和方法。
public class Car {
// 数据成员
public String color;
public int speed;
// 方法
public void start() {
System.out.println("Car starts.");
}
public void stop() {
System.out.println("Car stops.");
}
}
// 创建对象并调用方法
Car myCar = new Car();
myCar.color = "Red";
myCar.speed = 60;
myCar.start();
myCar.stop();
继承与多态
继承允许一个类继承另一个类的属性和方法。多态则允许子类重写父类的方法,提供不同的实现。
public class Animal {
public void makeSound() {
System.out.println("Animal makes sound.");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks.");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows.");
}
}
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog();
Animal myCat = new Cat();
myAnimal.makeSound(); // 输出: Animal makes sound.
myDog.makeSound(); // 输出: Dog barks.
myCat.makeSound(); // 输出: Cat meows.
}
接口与抽象类
接口是一种完全抽象的类,只能包含常量和方法的声明。抽象类可以包含方法的实现,也可以包含抽象方法。
public interface Flyable {
public void fly();
}
public abstract class Animal {
public abstract void makeSound();
}
public class Bird implements Flyable {
@Override
public void fly() {
System.out.println("Bird flies.");
}
@Override
public void makeSound() {
System.out.println("Bird chirps.");
}
}
public static void main(String[] args) {
Bird myBird = new Bird();
myBird.fly(); // 输出: Bird flies.
myBird.makeSound(); // 输出: Bird chirps.
}
Java常用技术栈介绍
Servlet与JSP
Servlet与JSP是Java Web开发的核心技术。Servlet是运行在服务器端的Java类,用于处理客户端请求并生成动态内容;JSP则是结合HTML和Java代码的动态页面技术。
Servlet
Servlet的生命周期包括初始化、服务、销毁三个阶段。通过@WebServlet
注解可以简化Servlet的配置。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("<h1>Hello, World!</h1>");
}
}
JSP
JSP页面可以包含HTML、Java代码片段等。在JSP页面中,<% ... %>
用于编写Java代码,<%= ... %>
用于输出Java变量或表达式的结果。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<h1>Hello, <%= "World" %>!</h1>
</body>
</html>
JDBC数据库连接
JDBC是Java数据库连接的API,提供了一组接口和类来实现与多种数据库的连接。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
JavaWeb开发基础
Java Web开发包括Servlet、JSP、过滤器(Filter)、监听器(Listener)等组件。这些组件共同构建了Web应用的基本结构。
- Servlet和JSP:已在前面章节介绍。
- 过滤器:在Servlet被调用前后执行一些预处理或后处理任务。
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化代码
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("Filter before processing");
chain.doFilter(request, response);
System.out.println("Filter after processing");
}
@Override
public void destroy() {
// 清理代码
}
}
- 监听器:监听Web应用中的特定事件,如ServletContext生命周期、HttpSession等。
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session created.");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session destroyed.");
}
}
Java副业项目实战
简单的在线投票系统
在线投票系统允许用户投票并显示投票结果。
后端代码
import java.util.HashMap;
import java.util.Map;
public class VotingSystem {
private Map<String, Integer> votes;
public VotingSystem() {
votes = new HashMap<>();
}
public void addCandidate(String candidate) {
votes.put(candidate, 0);
}
public void vote(String candidate) {
if (votes.containsKey(candidate)) {
votes.put(candidate, votes.get(candidate) + 1);
} else {
System.out.println("Candidate not found.");
}
}
public void displayResults() {
for (Map.Entry<String, Integer> entry : votes.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
前端代码
<!DOCTYPE html>
<html>
<head>
<title>Voting System</title>
</head>
<body>
<h1>Voting System</h1>
<form action="/vote" method="post">
<select name="candidate">
<option value="Candidate 1">Candidate 1</option>
<option value="Candidate 2">Candidate 2</option>
<option value="Candidate 3">Candidate 3</option>
</select>
<input type="submit" value="Vote">
</form>
</body>
</html>
Servlet代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/vote")
public class VoteServlet extends HttpServlet {
private VotingSystem votingSystem;
@Override
public void init() throws ServletException {
votingSystem = new VotingSystem();
votingSystem.addCandidate("Candidate 1");
votingSystem.addCandidate("Candidate 2");
votingSystem.addCandidate("Candidate 3");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String candidate = request.getParameter("candidate");
votingSystem.vote(candidate);
response.sendRedirect("/results");
}
}
结果页面
<!DOCTYPE html>
<html>
<head>
<title>Voting Results</title>
</head>
<body>
<h1>Voting Results</h1>
<ul>
<li>Candidate 1: <%= request.getAttribute("candidate1") %></li>
<li>Candidate 2: <%= request.getAttribute("candidate2") %></li>
<li>Candidate 3: <%= request.getAttribute("candidate3") %></li>
</ul>
</body>
</html>
个人博客网站搭建
个人博客网站允许用户创建和发布博客文章。
后端代码
import java.util.ArrayList;
import java.util.List;
public class Blog {
private List<Article> articles;
public Blog() {
articles = new ArrayList<>();
}
public void addArticle(Article article) {
articles.add(article);
}
public List<Article> getArticles() {
return articles;
}
}
public class Article {
private String title;
private String content;
public Article(String title, String content) {
this.title = title;
this.content = content;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
}
前端代码
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>My Blog</h1>
<a href="/new-article">New Article</a>
<ul>
<li>
<a href="/article?title=Article 1">Article 1</a>
</li>
<li>
<a href="/article?title=Article 2">Article 2</a>
</li>
</ul>
</body>
</html>
Servlet代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/article")
public class ArticleServlet extends HttpServlet {
private Blog blog;
@Override
public void init() throws ServletException {
blog = new Blog();
blog.addArticle(new Article("Article 1", "Content of Article 1"));
blog.addArticle(new Article("Article 2", "Content of Article 2"));
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String title = request.getParameter("title");
Article article = null;
for (Article a : blog.getArticles()) {
if (a.getTitle().equals(title)) {
article = a;
break;
}
}
if (article != null) {
request.setAttribute("title", article.getTitle());
request.setAttribute("content", article.getContent());
request.getRequestDispatcher("/article.jsp").forward(request, response);
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Article not found");
}
}
}
结果页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title><%= request.getAttribute("title") %></title>
</head>
<body>
<h1><%= request.getAttribute("title") %></h1>
<p><%= request.getAttribute("content") %></p>
</body>
</html>
后端API接口开发
使用Spring Boot框架开发一个简单的RESTful API。
后端代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("John Doe", "john.doe@example.com"));
users.add(new User("Jane Doe", "jane.doe@example.com"));
return users;
}
}
public class User {
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}
前端代码
fetch('http://localhost:8080/users')
.then(response => response.json())
.then(users => {
users.forEach(user => {
console.log(`${user.name} (${user.email})`);
});
});
Java副业求职技巧
如何准备Java面试
面试前需要准备以下内容:
- 基础知识:包括Java语言的基础语法、面向对象编程、常用类库等。
- 高级特性:多线程、并发编程、集合框架、异常处理等。
- 框架与技术:Spring、Hibernate、MyBatis、Spring Boot等。
- 设计模式:单例模式、工厂模式、代理模式等。
- 问题解决能力:算法与数据结构,常见面试题如反转字符串、判断回文等。
常见面试题解析
基础语法
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = ++a + b++ + ++b + a++;
System.out.println(c); // 输出: 63
}
}
面向对象
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void makeSound() {
System.out.println("Animal makes sound.");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("Dog barks.");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Animal("Generic Animal");
Animal dog = new Dog("Buddy");
animal.makeSound(); // 输出: Animal makes sound.
dog.makeSound(); // 输出: Dog barks.
}
}
多线程
public class SimpleThread implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
}
public class Test {
public static void main(String[] args) {
SimpleThread st = new SimpleThread();
Thread t1 = new Thread(st, "Thread 1");
Thread t2 = new Thread(st, "Thread 2");
t1.start();
t2.start();
}
}
数据库连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
如何展示自己的Java项目
- 编写清晰的文档:包括项目的功能说明、技术栈、项目结构等。
- 提交代码至GitHub:利用Git托管代码,便于展示与协作。
- 演示功能:可以录制一段视频,演示项目的使用场景。
- 准备面试问题:熟悉项目的每一个细节,能够流畅地解释其架构、难点等。
通过以上步骤,可以有效地展示你的Java项目,增加求职竞争力。