Java SE 总结

        Java SE(Standard Edition)是Java编程语言的标准版本,提供了基础的编程环境和API,适用于开发和运行Java应用程序。下面是Java SE的几个重要方面的知识回顾与总结。

1. Java环境基础

具体可参考这里对三者的介绍 传送门

1.1 JVM, JRE 和 JDK

  • JVM(Java Virtual Machine): 是 Java 虚拟机,负责执行 Java 字节码。JVM 提供了平台无关性,使得 Java 程序可以在不同操作系统上运行。

  • JRE(Java Runtime Environment): 是 Java 运行时环境,包括 JVM 和 Java 类库。JRE 是执行 Java 程序所需的基本软件包。

  • JDK(Java Development Kit): 是 Java 开发工具包,包含 JRE 和开发工具(如编译器 javac、Java 文档生成工具 javadoc 等)。用于开发和编译 Java 程序。

1.2 编译原理

        Java 源代码文件(.java)通过 JDK 中的编译器转换为字节码文件(.class)。这个过程使用 JIT(即时编译器)在 JVM 中将字节码转换为机器码,以实现跨平台运行。

// 示例代码:编写 Java 程序
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
// 编译命令:javac HelloWorld.java
// 运行命令:java HelloWorld

2. 运算符

具体可以参考这篇传送门

Java 包含多种运算符,包括算术运算符、关系运算符、逻辑运算符等。例如:

  • 算术运算符: +, -, *, /, %
  • 关系运算符: ==, !=, >, <, >=, <=
  • 逻辑运算符: &&, ||, !
  • 位运算符:& | ^ ~ >> << >>>
byte byteValue = 100;           // 1字节
short shortValue = 10000;      // 2字节
int intValue = 100000;         // 4字节
long longValue = 100000L;      // 8字节
float floatValue = 10.5f;      // 4字节
double doubleValue = 20.99;    // 8字节
char charValue = 'A';          // 2字节
boolean booleanValue = true;    // 1字节
int a = 5;  // 二进制:0101
int b = 3;  // 二进制:0011
System.out.println(a & b); // 输出 1  (二进制:0001)
System.out.println(a | b); // 输出 7  (二进制:0111)
System.out.println(a ^ b); // 输出 6  (二进制:0110)
System.out.println(~a);     // 输出 -6 (二进制:...11111010)
System.out.println(a << 1); // 输出 10  (二进制:1010)
System.out.println(a >> 1); // 输出 2   (二进制:0010)

3. 面向对象

3.1 三大特性

  • 封装: 将数据和方法包装在类中,通过访问控制符控制访问权限。

  • 继承: 子类继承父类的属性和方法。

  • 多态: 允许对象以多种形式存在,通常通过方法重载和重写实现。

示例代码:

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

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

3.2 重写和重载的区别

  • 重写: 子类对父类方法的实现进行修改,方法名、参数列表相同。

  • 重载: 同一个类中,方法名相同但参数列表不同。

示例代码:

class MathUtil {
    // 方法重载
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }
}

3.3 抽象类与接口

  • 抽象类: 使用 abstract 关键字声明,不能实例化,可以包含抽象方法和实现的方法。

  • 接口: 通过 interface 关键字声明,完全抽象,不能包含实现的方法(Java 8 之后可以包含默认方法)。

示例代码:

abstract class Shape {
    abstract void draw();
}

interface Drawable {
    void draw();
}

3.4 访问控制符的区别

  • public: 公开,任何类都可以访问。
  • protected: 保护,仅限同一包和子类访问。
  • default: 默认,仅限同一包访问。
  • private: 私有,仅限类内部访问。

4. 集合框架

可以参考这里传送门

Java 集合框架提供了多种数据结构的实现,主要包括:

  • List: 有序可重复集合,如 ArrayList 和 LinkedList
  • Set: 无序不可重复集合,如 HashSet 和 TreeSet
  • Map: 键值对集合,如 HashMap 和 TreeMap
  • Stack:栈(后进先出)
  • Queue:队列(先进先出)

4.1 继承关系

  • Collection 接口是所有集合的根接口。
  • List 和 Set 继承自 Collection
  • Map 和 Collection 平行存在。

4.2 equals 与 == 的区别

  • == 比较的是对象的引用(内存地址)。
  • equals() 方法比较的是对象的内容。

示例代码:

String str1 = new String("Java");
String str2 = new String("Java");

System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true

4.3 hashCode 的作用

可以参考这里传送门

hashCode() 方法返回对象的哈希码,用于哈希表中存储和查找对象。

5. IO流框架

Java IO流用于数据的输入输出操作,主要分为字节流和字符流。

具体可以参考这篇 传送门

5.1 字节流与字符流

  • 字节流: 处理原始二进制数据,InputStream 和 OutputStream 是字节流的基类。
  • 字符流: 处理文本数据,Reader 和 Writer 是字符流的基类。

5.2 序列化

Java 对象可以被序列化为字节流并通过流传输。实现 Serializable 接口即可。

示例代码:

import java.io.*;

class Person implements Serializable {
    String name;
    int age;

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

// 序列化对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
oos.writeObject(new Person("John", 30));
oos.close();

// 反序列化对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"));
Person person = (Person) ois.readObject();
ois.close();

6. Java中的常用类

  • Random: 用于生成随机数。
  • System: 包含系统级别功能,如输入输出。
  • 时间类LocalDateLocalTimeLocalDateTime 处理时间和日期。
  • String: 处理不可变字符串。
  • Arrays: 提供数组操作的方法。
  • Collection: 提供集合的操作方法。
  • 包装类: 包装基本数据类型,例如 IntegerDouble
  • 常量池: 字符串常量池用于提高内存利用率。

示例代码:

int randomNum = new Random().nextInt(100); // 生成 0-99 的随机数
String str = "Hello, World!";
String[] splitStr = str.split(", "); // 分割字符串

7. 异常处理机制

Java 提供异常处理机制,使用 trycatchfinally.

7.1 自定义异常类

class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

try {
    throw new MyException("自定义异常");
} catch (MyException e) {
    System.out.println(e.getMessage());
}

8. 多线程编程

Java 支持多线程,通过 Thread 类和 Runnable 接口实现。

8.1 线程安全的三大特性

  • 原子性
  • 可见性
  • 有序性

8.2 线程锁与关键字

使用 synchronized 关键字实现同步,确保线程安全。

class Counter {
    private int count = 0;

    synchronized void increment() {
        count++;
    }
}

9. 网络编程

Java 提供了强大的网络编程支持,主要使用 Socket 和 ServerSocket 类。

9.1 端口与监听

  • 端口: 用于区分不同的网络应用程序。
  • 监听: 服务器通过 ServerSocket 监听特定端口的连接请求。

示例代码

// 服务器端
try (ServerSocket serverSocket = new ServerSocket(8888)) {
    Socket socket = serverSocket.accept();
    // 处理客户端请求
}

// 客户端
try (Socket socket = new Socket("localhost", 8888)) {
    // 发送请求
}

 10. GUI图形界面编程

Java 提供 AWT 和 Swing 用于图形用户界面开发。

/*
 * Created by JFormDesigner on Sun Sep 29 17:23:34 CST 2024
 */

package com.ffyc.homework;

import java.awt.*;
import javax.swing.*;

/**
 * @author 20526
 */
public class UserLogin extends JFrame {
    private JButton loginButton;
    private JButton registerButton;
    private JPasswordField passwordField;
    private JTextField usernameField;
    private JLabel usernameLabel;
    private JLabel passwordLabel;

    public UserLogin() {
        super("用户登录界面");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        initComponents();
        this.setVisible(true);

        // 添加按钮的事件监听器
        loginButton.addActionListener(e -> System.out.println("登录成功!"));
        registerButton.addActionListener(e -> System.out.println("注册成功!"));
    }

    private void initComponents() {
        // 初始化组件
        loginButton = new JButton("登录");
        registerButton = new JButton("注册");
        passwordField = new JPasswordField();
        usernameField = new JTextField();
        usernameLabel = new JLabel("用户名");
        passwordLabel = new JLabel("密码");

        // 设置颜色
        Color backgroundColor = new Color(245, 245, 245);
        Color buttonColor = new Color(70, 130, 180);
        Color buttonHoverColor = new Color(100, 149, 237);

        // 设置内容面板
        Container contentPane = getContentPane();
        contentPane.setLayout(null);
        contentPane.setBackground(backgroundColor);

        // 设置按钮样式
        loginButton.setBackground(buttonColor);
        loginButton.setForeground(Color.WHITE);
        registerButton.setBackground(buttonColor);
        registerButton.setForeground(Color.WHITE);

        loginButton.setOpaque(true);
        loginButton.setBorderPainted(false);
        registerButton.setOpaque(true);
        registerButton.setBorderPainted(false);

        // 鼠标进入时改变按钮颜色
        loginButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                loginButton.setBackground(buttonHoverColor);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                loginButton.setBackground(buttonColor);
            }
        });

        registerButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                registerButton.setBackground(buttonHoverColor);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                registerButton.setBackground(buttonColor);
            }
        });

        // 设置组件位置和大小
        usernameLabel.setBounds(200, 170, 55, 40);
        usernameField.setBounds(275, 165, 200, 50);
        passwordLabel.setBounds(200, 230, 55, 40);
        passwordField.setBounds(275, 225, 200, 45);
        loginButton.setBounds(280, 295, 80, 30);
        registerButton.setBounds(400, 295, 75, registerButton.getPreferredSize().height);

        // 将组件添加到面板
        contentPane.add(usernameLabel);
        contentPane.add(usernameField);
        contentPane.add(passwordLabel);
        contentPane.add(passwordField);
        contentPane.add(loginButton);
        contentPane.add(registerButton);

        // 设置窗口大小和位置
        contentPane.setPreferredSize(new Dimension(770, 620));
        pack();
        setLocationRelativeTo(getOwner());
    }

    public static void main(String[] args) {
        new UserLogin();
    }
}

 运行结果演示

        以上就是 Java SE 简单回顾,详细内容可参考我往期博客。希望能对你理解和学习 Java SE 有所帮助。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/884877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大厂面试真题-说一下Mybatis的缓存

首先看一下原理图 Mybatis提供了两种缓存机制&#xff1a;一级缓存&#xff08;L1 Cache&#xff09;和二级缓存&#xff08;L2 Cache&#xff09;&#xff0c;旨在提高数据库查询的性能&#xff0c;减少数据库的访问次数。注意查询的顺序是先二级缓存&#xff0c;再一级缓存。…

MySQL Performance Schema 详解及运行时配置优化

引言 MySQL 的 Performance Schema 是一套性能监控与诊断工具&#xff0c;帮助开发者和数据库管理员收集、分析 MySQL 实例的运行状态&#xff0c;找出性能瓶颈并进行优化。通过 Performance Schema&#xff0c;我们能够监控不同的内部事件、线程、会话、语句执行等关键性能指…

Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )

文本目录&#xff1a; ❄️一、哈希表&#xff1a; ☑ 1、概念&#xff1a; ☑ 2、冲突-概念&#xff1a; ☑ 3、冲突-避免&#xff1a; ☞ 1&#xff09;、避免冲突-哈希函数的设计&#xff1a; ☞ 2&#xff09;、避免冲突-负载因子调节(重点)&#xff1a; ☑ 4、冲突-解决&…

cloud-(Nacos)--注册中心原理-服务注册-服务发现

并且通过(RestTemplate)Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题 在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了注册中心的概念。注册中心、服务提供者、服务消费者三者间关系如下: 流程如下: 服务启动…

Mac安装Manim并运行

1.在macOS上创建Python虚拟环境&#xff0c;可以使用venv模块&#xff0c;这是Python自带的库&#xff0c;也可以使用conda。以下是使用venv创建和使用Python虚拟环境的步骤&#xff1a; 打开终端。 创建一个新的目录来存放你的项目&#xff0c;并进入该目录&#xff1a; mk…

15.安卓逆向-frida基础-HOOK类方法1

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

WEB服务器——Tomcat

服务器是可以使用java完成编写&#xff0c;是可以接受页面发送的请求和响应数据给前端浏览器的&#xff0c;而在开发中真正用到的Web服务器&#xff0c;我们不会自己写的&#xff0c;都是使用目前比较流行的web服务器。 如&#xff1a;Tomcat 1. 简介 Tomcat 是一个开源的轻量…

【CAM350】使用总结 <二>{ 光绘Gerber 比较 }

一、 比较两份版本不同的光绘文件&#xff1a; //Analysis-Compare layers// 二、参数默认&#xff0c;比较完成给出结果 三、也可以直接在一份文件上选择“Draw on top” 四、对比差距直观可见

家中浮毛太多怎么办?希喂、米家、安德迈更推荐哪款?

在现代养宠家庭生活中&#xff0c;宠物空气净化器已经成为不可或缺的家电之一。 而在众多空气净化器类型中&#xff0c;宠物空气净化器以其独特的设计和卓越的净化效果&#xff0c;逐渐赢得了越来越多养宠家庭的青睐。 它不仅能有效地吸附空中飞舞的浮毛&#xff0c;还能高效…

基于SSM+小程序的在线课堂微信管理系统(在线课堂1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 &emsp1、管理员实现了首页、个人中心、用户管理、课程分类管理、课程信息管理、课程订阅管理、课程视频管理、公告栏管理、留言板管理、系统管理。 2、用户实现了首页、课程信息、公…

此连接非私人连接

当你手机浏览器输入网站打开提示“此连接非私人连接&#xff0c;此网站可能在冒充来窃取你的个人或财务信息。你应回到之前的页面”这是因为该网站的SSL数字证书到期导致&#xff0c;需要此网站的管理员重新申请数字证书替换之前的文件才可以实现。 注意&#xff1a;如果你不是…

实用SQL小总结

WHERE 条件 column 为纯英文字符 或 不包含任何字符 语法&#xff1a; SELECT * FROM your_table WHERE REGEXP(your_column,^[A-Za-z]$); SELECT * FROM your_table WHERE NOT REGEXP(your_column,^[A-Za-z]$);例&#xff1a; SELECT DISTINCT t.pldlibho FROM kibb_pldlyw…

LLM - 使用 vLLM 部署 Qwen2-VL 多模态大模型 (配置 FlashAttention) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142528967 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 vLLM 用…

02-ZYNQ linux开发环境安装,基于Petalinux2022.2和Vitis2022.2

petalinux安装 Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件&#xff0c;包括了 u-boot、Linux Kernel、device-tree、rootfs 等源码和库&#xff0c;以及 Yocto recipes&#xff0c;可以让客户很方便的生成、配置、编译及自定义 Linux 系统。Petalinux 支持 Ver…

uniapp EChars图表

1. uniapp EChars图表 &#xff08;1&#xff09;Apache ECharts 一个基于 JavaScript 的开源可视化图表库   https://echarts.apache.org/examples/zh/index.html &#xff08;1&#xff09;官网图例 &#xff08;2&#xff09;个人实现图例 1.1. 下载echart 1.1.1. 下…

docker - 迁移和备份

文章目录 1、docker commit1.1、查询 容器 docker ps1.2、docker commit zookeeper zookeeper:3.4.13 2、docker save -o2.1、宿主机 切换到 /opt 目录下2.2、将镜像保存到 宿主机/opt目录下 3、docker load -i 对某一个容器修改完毕以后&#xff0c;我们可以把最新的容器部署到…

【文心智能体 | AI大师工坊】如何使用智能体插件,完成一款旅游类智能体的开发,来体验一下我的智能体『​​​​​​​厦门CityWalk』

目录 1.1、智能体运行效果 1.2、创作灵感来源 1.3、如何制作智能体 1.4、可能会遇到的几个问题 1.5、快速调优指南 『厦门CityWalk&#x1f680;』我的优质智能体&#xff1a;https://0nxj3k.smartapps.baidu.com/?_swebfr1&_swebScene3621000000000000 在当今这个全…

Bytebase 2.22.3 - 一键回滚 PostgreSQL DML 变更

&#x1f680; 新功能 支持一键回滚 PostgreSQL DML 变更。 &#x1f384; 改进 优化 DML 事前备份和回滚体验&#xff1a; 引导用户创建 bbdataarchive 数据库。如果没有 bbdataarchive 数据库&#xff0c;无法开启备份功。用户现在可以在创建工单之后开启或关闭备份功能&a…

Python | Leetcode Python题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; class Solution:def pathSum(self, root: TreeNode, targetSum: int) -> int:prefix collections.defaultdict(int)prefix[0] 1def dfs(root, curr):if not root:return 0ret 0curr root.valret prefix[curr - targetSum]prefix[cu…

ROS学习笔记(四):使用 `ros2 run usb_cam usb_cam_node_exe` 启动 USB 摄像头

文章目录 前言1 安装 usb_cam 包2 启动 USB 摄像头3 订阅相机发布的节点信息并进行可视化3.1 使用 rqt_image_view3.2 使用 image_view3.3 使用 rviz 4 常见问题与解决方案4.1 摄像头未被识别4.2 相机显示异常4.3 如何指定不同的相机4.4 摄像头参数调整 5. 调试信息 5. 结论 前…