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

Java主流技术学习:从入门到初级实战指南

概述

本文全面介绍了Java主流技术学习的相关内容,从Java基础入门到面向对象编程,再到常用技术框架如Spring、Hibernate和MyBatis的介绍,帮助读者快速掌握Java开发技能。文章还涵盖了JavaWeb基础、数据库操作及项目实战等内容,旨在为初学者提供一个完整的Java开发学习路径。Java主流技术学习不仅能帮助你理解Java的核心概念,还能让你深入了解企业级应用开发的最佳实践。

Java主流技术学习:从入门到初级实战指南
Java基础入门

Java简介

Java是一种面向对象的编程语言,由Sun Microsystems(现已并入Oracle)在1995年推出。Java的设计初衷是编写一次,到处运行(Write Once, Run Anywhere),因此它具有跨平台特性。Java语言广泛应用于服务器端开发、移动应用、桌面应用和嵌入式系统等领域。

安装Java开发环境

要安装Java开发环境,你需要下载并安装Java Development Kit (JDK)。以下是安装步骤:

  1. 访问Oracle官网或第三方镜像站下载最新版本的JDK。
  2. 运行下载的安装程序,按照提示完成安装。
  3. 设置环境变量。在Windows系统中,编辑System Properties,在Environment Variables中设置JAVA_HOMEPATH变量;在Linux或Mac系统中,编辑~/.bashrc~/.profile文件,添加如下行:
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

Java基本语法

Java的基本语法包括变量、数据类型、运算符、流程控制结构等。

变量与类型

Java中变量的定义格式为type variableName;,其中type是指定的数据类型,variableName是变量名称。Java支持的数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型包括byteshortintlongfloatdoublecharboolean。引用数据类型包括类、数组和接口。

示例代码:

public class VariableExample {
    public static void main(String[] args) {
        int age = 20;
        double height = 1.75;
        char gender = 'M';
        boolean isStudent = true;
        String name = "Alice";
    }
}

第一个Java程序

创建第一个Java程序需要以下步骤:

  1. 创建一个Java文件,文件名必须与类名相同。
  2. 编写程序代码。
  3. 使用JDK提供的编译器javac编译Java文件。
  4. 使用JDK提供的Java虚拟机java运行编译后的程序。

示例程序代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

编译命令:

javac HelloWorld.java

运行命令:

java HelloWorld
Java面向对象编程

类和对象

在Java中,类是一个模板,它定义了一组对象的共同属性和行为。对象是类的实例,每个对象都有自己的状态和行为。定义类的关键字是class

示例代码:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 24);
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

继承与多态

Java支持继承机制,允许一个类从另一个类继承属性和行为。使用关键字extends实现继承。

多态性指的是同一个行为在不同的对象中有不同的表现形式。

示例代码:

public class Animal {
    public void sound() {
        System.out.println("Some sound");
    }
}

public class Dog extends Animal {
    public void sound() {
        System.out.println("Bark");
    }
}

public class Cat extends Animal {
    public void sound() {
        System.out.println("Meow");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.sound();

        Animal dog = new Dog();
        dog.sound();

        Animal cat = new Cat();
        cat.sound();
    }
}

接口和抽象类

接口定义了一组抽象方法,类通过实现接口来实现这些方法。抽象类可以包含抽象方法和具体方法,子类必须实现抽象方法。

示例代码:

public interface Movable {
    void move();
}

public abstract class Vehicle {
    public abstract void start();
}

public class Car extends Vehicle implements Movable {
    @Override
    public void move() {
        System.out.println("Car is moving");
    }

    @Override
    public void start() {
        System.out.println("Car has started");
    }
}

public class Main {
    public static void main(String[] args) {
        Movable car = new Car();
        car.move();

        Vehicle car2 = new Car();
        car2.start();
    }
}

封装与数据隐藏

封装是指通过访问修饰符将对象的属性隐藏起来,通过方法提供对外访问属性的接口。这有助于保护对象的内部状态不被外部直接访问和修改。

示例代码:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 24);
        person.setName("Alice Smith");
        person.setAge(25);
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}
Java常用技术框架介绍

Spring框架基础

Spring是Java开发中最流行的框架之一,它提供了全面的依赖注入、AOP、MVC等企业级功能。

依赖注入

依赖注入是Spring的核心功能,通过配置文件或注解将对象的依赖关系交给Spring容器管理。

示例代码:

public interface MessageRenderer {
    void renderMessage();
}

public class StandardRenderer implements MessageRenderer {
    private MessageResourceLoader loader;

    public void setMessageResourceLoader(MessageResourceLoader loader) {
        this.loader = loader;
    }

    public void renderMessage() {
        System.out.println(loader.getMessage());
    }
}

public interface MessageResourceLoader {
    String getMessage();
}

public class DefaultLoader implements MessageResourceLoader {
    public String getMessage() {
        return "Default message";
    }
}

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        MessageRenderer renderer = (MessageRenderer) context.getBean("renderer");
        renderer.renderMessage();
    }
}

beans.xml:

<bean id="renderer" class="StandardRenderer">
    <property name="loader" ref="loader"/>
</bean>
<bean id="loader" class="DefaultLoader"/>

Hibernate框架简介

Hibernate是一个对象关系映射(ORM)框架,用于在Java对象和关系数据库之间进行映射。

示例代码:

public class Person {
    private int id;
    private String name;

    public Person() {}

    public Person(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class PersonDAO {
    private SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

    public void save(Person person) {
        Session session = sessionFactory.openSession();
        Transaction t = session.beginTransaction();
        session.save(person);
        t.commit();
        session.close();
    }

    public Person getPerson(int id) {
        Session session = sessionFactory.openSession();
        Person person = session.get(Person.class, id);
        session.close();
        return person;
    }
}

hibernate.cfg.xml:

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping class="Person"/>
    </session-factory>
</hibernate-configuration>

MyBatis框架入门

MyBatis是一个持久层框架,它基于SQL映射文件或注解将Java对象与数据库表映射。

示例代码:

public interface PersonMapper {
    @Select("SELECT * FROM person WHERE id = #{id}")
    Person getPerson(@Param("id") int id);

    @Insert("INSERT INTO person(name) VALUES(#{name})")
    int insertPerson(@Param("name") String name);
}

public class Main {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("MyBatisConfig.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);

        Person person = mapper.getPerson(1);
        System.out.println(person.getName());

        int result = mapper.insertPerson("Alice");
        System.out.println(result);
    }
}

MyBatisConfig.xml:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="PersonMapper.xml"/>
    </mappers>
</configuration>

PersonMapper.xml:

<mapper namespace="PersonMapper">
    <select id="getPerson" parameterType="int" resultType="Person">
        SELECT * FROM person WHERE id = #{id}
    </select>
    <insert id="insertPerson" parameterType="string">
        INSERT INTO person(name) VALUES(#{name})
    </insert>
</mapper>
JavaWeb基础

Servlet和JSP基础

Servlet是运行在Web服务器上的Java类,它可以接收和响应用户的请求。JSP(JavaServer Pages)是一种动态网页技术标准,它可以嵌入Java代码和HTML标记。

Servlet示例

创建Servlet需要继承HttpServlet类。以下是简单的HelloWorld Servlet示例:

@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body></html>");
    }
}

web.xml:

<web-app>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

JSP示例

JSP页面通常包含HTML代码和Java代码片段。以下是简单的HelloWorld JSP页面示例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h1>Hello World!</h1>
    <%
        out.println("This is a JSP page");
    %>
</body>
</html>

MVC设计模式

MVC(Model-View-Controller)是一种软件架构模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。

  • 模型:处理数据逻辑。
  • 视图:处理UI界面。
  • 控制器:处理用户输入,并调用相应的模型方法和视图。

Tomcat服务器配置

Apache Tomcat是Java Servlet和JSP技术的开源实现。以下是Tomcat的基本配置步骤:

  1. 下载并解压Tomcat到本地目录。
  2. 设置环境变量CATALINA_HOME
  3. 编辑conf/server.xml文件,配置端口等信息。
  4. 将Web应用部署到Tomcat。在webapps目录下创建应用目录,将应用文件放置在此目录下。

server.xml片段:

<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
            <Host appBase="webapps" autoDeploy="true" deployOnStartup="true" deployXML="true" name="localhost" unpackWARs="true">
                <Context path="/hello" docBase="hello" reloadable="true" />
            </Host>
        </Engine>
    </Service>
</Server>
数据库操作

SQL基础

SQL(Structured Query Language)用于管理和操作关系数据库。以下是常用的SQL语句:

  • SELECT:从表中查询数据。
  • INSERT:向表中插入数据。
  • UPDATE:更新表中的数据。
  • DELETE:删除表中的数据。
  • CREATE:创建数据库和表。
  • ALTER:修改表结构。
  • DROP:删除数据库或表。

示例代码:

CREATE TABLE person (
    id INT,
    name VARCHAR(255),
    age INT
);

INSERT INTO person (id, name, age) VALUES (1, 'Alice', 24);

SELECT * FROM person WHERE id = 1;

UPDATE person SET age = 25 WHERE id = 1;

DELETE FROM person WHERE id = 1;

DROP TABLE person;

JDBC编程

JDBC(Java Database Connectivity)是Java用于数据库连接的标准接口。

示例代码:

public class JDBCDemo {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
            stmt = conn.createStatement();
            String sql = "SELECT * FROM person";
            rs = stmt.executeQuery(sql);

            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id"));
                System.out.println("Name: " + rs.getString("name"));
                System.out.println("Age: " + rs.getInt("age"));
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

连接池技术

连接池技术可以提高数据库操作效率,减少系统开销。常见的连接池实现有c3p0、dbcp等。

示例代码:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
    <property name="user" value="root"/>
    <property name="password" value="password"/>
    <property name="initialPoolSize" value="3"/>
    <property name="maxPoolSize" value="10"/>
</bean>
Java项目实战

小项目设计与实现

设计一个简单的图书管理系统,包括图书的添加、查询、修改和删除功能。可以使用Spring Boot框架快速开发。

实现步骤

  1. 创建Spring Boot项目。
  2. 配置数据库连接。
  3. 编写数据模型类。
  4. 编写业务逻辑层。
  5. 编写控制器层。
  6. 使用Thymeleaf模板渲染页面。

示例代码

@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String author;
    private String isbn;

    // getters and setters
}

@Service
public class BookService {
    @Autowired
    private BookRepository bookRepository;

    public List<Book> findBooks() {
        return bookRepository.findAll();
    }

    public Book findBookById(Long id) {
        return bookRepository.findById(id).orElse(null);
    }

    public void saveBook(Book book) {
        bookRepository.save(book);
    }

    public void deleteBook(Long id) {
        bookRepository.deleteById(id);
    }
}

@RestController
public class BookController {
    @Autowired
    private BookService bookService;

    @GetMapping("/books")
    public List<Book> listBooks() {
        return bookService.findBooks();
    }

    @GetMapping("/books/{id}")
    public Book getBook(@PathVariable Long id) {
        return bookService.findBookById(id);
    }

    @PostMapping("/books")
    public void addBook(@RequestBody Book book) {
        bookService.saveBook(book);
    }

    @DeleteMapping("/books/{id}")
    public void deleteBook(@PathVariable Long id) {
        bookService.deleteBook(id);
    }
}

测试驱动开发

测试驱动开发(TDD)是一种开发方法,通过编写测试用例来驱动代码的编写。

示例代码

public interface BookRepository {
    List<Book> findAll();
    Optional<Book> findById(Long id);
    void save(Book book);
    void deleteById(Long id);
}

public class BookRepositoryImpl implements BookRepository {
    private List<Book> books = new ArrayList<>();

    @Override
    public List<Book> findAll() {
        return books;
    }

    @Override
    public Optional<Book> findById(Long id) {
        return books.stream().filter(book -> book.getId().equals(id)).findFirst();
    }

    @Override
    public void save(Book book) {
        books.add(book);
    }

    @Override
    public void deleteById(Long id) {
        books.removeIf(book -> book.getId().equals(id));
    }
}

public class BookServiceTest {
    @Test
    public void testFindBooks() {
        BookService service = new BookService(new BookRepositoryImpl());
        List<Book> books = service.findBooks();
        assertEquals(0, books.size());
    }

    @Test
    public void testSaveBook() {
        BookService service = new BookService(new BookRepositoryImpl());
        Book book = new Book();
        book.setTitle("Java Programming");
        book.setAuthor("John Doe");
        book.setIsbn("123456789");
        service.saveBook(book);
        assertEquals(1, service.findBooks().size());
    }
}

代码调试与错误处理

调试代码可以帮助定位和解决程序中的错误。常见的调试方法包括断点调试、日志输出和异常处理。

示例代码

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler({Exception.class})
    public ResponseEntity<ErrorResponse> handleException(Exception ex) {
        ErrorResponse error = new ErrorResponse();
        error.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
        error.setMessage(ex.getMessage());
        return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

public class ErrorResponse {
    private int status;
    private String message;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消