为了账号安全,请及时绑定邮箱和手机立即绑定

Java副业教程:零基础入门到实战项目

标签:
Java
概述

本文提供了全面的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

  1. 访问Oracle官网或使用OpenJDK下载JDK安装包。推荐最新稳定版的JDK,如JDK 11或JDK 17。
  2. 运行安装包,按照提示完成安装。
  3. 安装完成后,配置环境变量。将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为例:

  1. 访问Gradle官网下载最新版本的Gradle。
  2. 解压下载的压缩包,将解压后的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;

条件语句与循环语句

条件语句和循环语句用于实现程序逻辑的控制流。

条件语句

条件语句主要有ifif-elseswitch

  1. if语句
int number = 5;
if (number > 0) {
    System.out.println("Number is positive.");
}
  1. if-else语句
int number = -5;
if (number > 0) {
    System.out.println("Number is positive.");
} else {
    System.out.println("Number is non-positive.");
}
  1. 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;
}

循环语句

循环语句包括forwhiledo-while

  1. for循环
for (int i = 0; i < 5; i++) {
    System.out.println("Iteration: " + i);
}
  1. while循环
int i = 0;
while (i < 5) {
    System.out.println("Iteration: " + i);
    i++;
}
  1. 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应用的基本结构。

  1. Servlet和JSP:已在前面章节介绍。
  2. 过滤器:在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() {
        // 清理代码
    }
}
  1. 监听器:监听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面试

面试前需要准备以下内容:

  1. 基础知识:包括Java语言的基础语法、面向对象编程、常用类库等。
  2. 高级特性:多线程、并发编程、集合框架、异常处理等。
  3. 框架与技术:Spring、Hibernate、MyBatis、Spring Boot等。
  4. 设计模式:单例模式、工厂模式、代理模式等。
  5. 问题解决能力算法与数据结构,常见面试题如反转字符串、判断回文等。

常见面试题解析

基础语法

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项目

  1. 编写清晰的文档:包括项目的功能说明、技术栈、项目结构等。
  2. 提交代码至GitHub:利用Git托管代码,便于展示与协作。
  3. 演示功能:可以录制一段视频,演示项目的使用场景。
  4. 准备面试问题:熟悉项目的每一个细节,能够流畅地解释其架构、难点等。

通过以上步骤,可以有效地展示你的Java项目,增加求职竞争力。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消