Java SE 总结

news2024/9/30 15:38:04

        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.coloradmin.cn/o/2179985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后端-对表格数据进行添加、删除和修改

一、添加 要求&#xff1a; 按下添加按钮出现一个板块输入添加的数据信息&#xff0c;点击板块的添加按钮&#xff0c;添加&#xff1b;点击取消&#xff0c;板块消失。 实现&#xff1a; 1.首先&#xff0c;设计页面输入框格式&#xff0c;表格首行 2.从数据库里调数据 3.添加…

SpringBoot助力墙绘艺术市场创新

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

数字化智能工厂应用场景

数字化智能工厂的应用场景广泛&#xff0c;涵盖了多个行业和领域。以下是一些主要的应用场景&#xff1a; 一、制造业 汽车制造&#xff1a;数字化智能工厂在汽车制造业中得到了广泛应用。通过自动化生产线、机器人、物联网和人工智能等技术&#xff0c;汽车制造商能够实现高…

三分钟速览:Node.js 版本差异与关键特性解析

Node.js 是一个广泛使用的 JavaScript 运行时环境&#xff0c;允许开发者在服务器端运行 JavaScript 代码。随着技术的发展&#xff0c;Node.js 不断推出新版本&#xff0c;引入新特性和改进。了解不同版本之间的差异对于开发者来说至关重要。以下是一个快速指南&#xff0c;帮…

Redis篇(应用案例 - 附近商户)(持续更新迭代)

目录 一、GEO数据结构的基本用法 二、导入店铺数据到GEO 三、实现附近商户功能 一、GEO数据结构的基本用法 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。 Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来…

【高性能内存池】基本框架 + 固定长度内存池实现 1

高性能内存池 1. 基本框架2. 定长内存池的实现2.1 介绍定长内存池2.2 T* New()2.3 void Delete(T* obj) 3. 源码&#xff08;附赠测试&#xff09;4. 总结 1. 基本框架 高并发内存池主要由三个部分构成&#xff1a; 1.thread cache:用于小于256KB的内存的分配。线程缓存是每个…

opencv实战项目(三十):使用傅里叶变换进行图像边缘检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一&#xff0c;什么是傅立叶变换&#xff1f;二&#xff0c;图像处理中的傅立叶变换&#xff1a;三&#xff0c;傅里叶变换进行边缘检测&#xff1a; 一&#xff0c…

适合初学者的[JAVA]: 基础面试题

目录 说明 前言 String/StringBuffer/StringBuilder区别 第一点: 第二点: 总结&#xff1a; 反射机制 JVM内存结构 运行时数据区域被划分为5个主要组件&#xff1a; 方法区&#xff08;Method Area&#xff09; 堆区&#xff08;Heap Area&#xff09; 栈区&#x…

局部整体(七)利用python绘制圆形嵌套图

局部整体&#xff08;七&#xff09;利用python绘制圆形嵌套图 圆形嵌套图&#xff08; Circular Packing&#xff09;简介 将一组组圆形互相嵌套起来&#xff0c;以显示数据的层次关系&#xff0c;类似于矩形树图。数据集中每个实体都由一个圆表示&#xff0c;圆圈大小与其代…

Spring Task 调度任务

Spring Task是调度任务框架&#xff0c;通过配置&#xff0c;程序可以按照约定的时间自动执行代码逻辑&#xff0c;基于注解方式实现需要如下注解&#xff1a; Component 任务调度类交给Spring IOC容器管理EnableScheduling 启用 Spring 的定时任务&#xff08;Scheduling&…

专业学习|随机规划概观(内涵、分类以及例题分析)

一、随机规划概览 &#xff08;一&#xff09;随机规划的定义 随机规划是通过考虑随机变量的不确定性来制定优化决策的一种方法。其基本思想是在决策过程中&#xff0c;目标函数和约束条件可以包含随机因素。 &#xff08;1&#xff09;重点 随机规划的中心问题是选择参数&am…

最新版ingress-nginx-controller安装 使用host主机模式

最新版ingress-nginx-controller安装 使用host主机模式 文章目录 最新版ingress-nginx-controller安装 使用host主机模式单节点安装方式多节点高可用安装方式 官方参考链接&#xff1a; https://github.com/kubernetes/ingress-nginx/ https://kubernetes.github.io/ingress-ng…

05_中断与数码管动态显示

中断是单片机系统重点中的重点&#xff0c;因为有了中断&#xff0c;单片机就具备了快速协调多模块工作的能力&#xff0c;可以完成复杂的任务。本章将首先带领大家学习一些必要的 C 语言基础知识&#xff0c;然后讲解数码管动态显示的原理&#xff0c;并最终借助于中断系统来完…

VS code user setting 与 workspace setting 的区别

VS code user setting 与 workspace setting 的区别 引言正文引言 相信有不少开始接触 VS code 的小伙伴会有疑问,user setting 与 workspace setting 有什么区别呢?这里我们来说明一下 正文 首先,当我们使用 Ctrl + Shift + P 打开搜索输入 setting 后,可以弹出 4 个se…

SSM+Vue家教平台系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作…

网站建设中,https协议和http协议分别是什么,有什么区别?

HTTP&#xff08;超文本传输协议&#xff09;和 HTTPS&#xff08;安全超文本传输协议&#xff09;是互联网通信中两种非常关键的协议&#xff0c;它们在安全性、性能以及证书等方面存在区别。以下是具体分析&#xff1a; 安全性 HTTP&#xff1a;数据传输以明文形式进行&#…

宝塔搭建nextcould 30docker搭建onlyoffic8.0

宝塔搭建nextcould 宝塔搭建nextcould可以参考这两个博文 我搭建的是30版本的nextcould&#xff0c;服务组件用的是下面这些&#xff0c;步骤是一样的&#xff0c;只是版本不一样而已 nginx 1.24.0 建议选择nginx&#xff0c;apache没成功。 MySQL 8.0以上都可以 php 8.2.…

“你好BOE”重磅亮相首届上海国际光影节 打造“艺术x科技”顶级影像盛宴

黄浦江畔,北外滩胜地。作为首届上海国际光影节虹口区分会场的重点项目之一,9月29日-10月5日,BOE(京东方)年度标杆性品牌巡展IP“你好BOE”Super O SPACE影像科技展在上海北外滩滨江5米平台盛大启幕,BOE(京东方)携手上海电影、上影元、OUTPUT、新浪微博、海信、OPPO、京东等众多…

信创产品测试报告有什么作用?测试依据是什么?

一、信创产品测试报告是什么&#xff1f; 针对于某一款具体的软件产品或硬件产品进行的产品测试&#xff0c;验证其是否符合信创的要求。这一类产品&#xff0c;主要分为四类&#xff1a; 三类九款产品&#xff08;计算机终端、操作系统、数据库&#xff09;&#xff1b;通用…

【Python快速学习笔记02】基础语法学习(变量等)

目录 1.标识符与代码书写注意点 2.变量类型 1.标识符与代码书写注意点 &#xff08;1&#xff09;组成&#xff1a;字母&#xff0c;下划线&#xff0c;数字 &#xff08;2&#xff09;注意点&#xff1a;但是不能由数字开头&#xff0c;区分大小写 &#xff08;3&#xff…