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 {@Overridevoid 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.mzph.cn/pingmian/55011.shtml

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

相关文章

C++【类和对象】(取地址运算符重载与实现Date类)

文章目录 取地址运算符重载const成员函数取地址运算符重载 Date类的实现Date.hDate.cpp1.检查日期合法性2. 构造函数/赋值运算符重载3.得到某月的天数4. Date类 - 天数的操作4.1 日期 天数4.2 日期 天数4.3 日期 - 天数4.4 日期 - 天数 5. Date的前后置/--5.1 前置5.2 后置5.…

ORM的了解

什么是ORM&#xff1f;为什么要用ORM&#xff1f;-CSDN博客 C高级编程&#xff08;99&#xff09;面向资源的设计思想&#xff08;ORM&#xff09;_c orm-CSDN博客 ORM:Object-Relational-Mapping 对象关系映射 -------------------------- 我想对数据库中的表A进行增删改…

天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端

今天给大家带来一款单机游戏的架设&#xff1a;天龙八部怀旧单机微改人面桃花。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xf…

【Mybatis篇】动态SQL的详细带练

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 文章目录 &#x1f3af;一.动态SQL简单介绍 &#x1f6a6;动态S…

【深度】为GPT-5而生的「草莓」模型!从快思考—慢思考到Self-play RL的强化学习框架

原创 超 超的闲思世界 2024年09月11日 19:17 北京 9月11日消息&#xff0c;据外媒The Information昨晚报道&#xff0c;OpenAI的新模型「草莓」&#xff08;Strawberry&#xff09;&#xff0c;将在未来两周内作为ChatGPT服务的一部分发布。 「草莓」项目是OpenAI盛传已久的…

全网最全软件测试面试题(含答案解析+文档)

一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计&#xff0c;到开发成功投入使用&#xff0c;并在使用中不断地修改、增补和完善&#xff0c;直到停止该软件的使用的全过程(从酝酿到…

YOLO V8半自动标注工具设计

前提&#xff1a; 对于某些边界不明确的小目标&#xff0c;要是目标由比较多的话&#xff0c;标注起来就会非常麻烦。 如何利用已有训练模型&#xff0c;生成框&#xff0c;进行预标注。再通过调节预标注框的方式&#xff0c;提高标注的效率。 1 通过预先训练的模型生成yolo 格…

一文上手SpringSecurity【七】

之前我们在测试的时候,都是使用的字符串充当用户名称和密码,本篇将其换成MySQL数据库. 一、替换为真实的MySQL 1.1 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</v…

Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像

1.定义参数&#xff1a; 使用 booleanParam 定义一个布尔参数&#xff0c;示例如下 booleanParam(name: BUILD_DOCKER, description: 是否构建Docker镜像, defaultValue: false)2.使用参数&#xff1a; 在 stage 中&#xff0c;根据参数的值决定构建方式&#xff1a; stage(编…

python基础库

文章目录 1.研究目的2.platform库介绍3.代码4.结果展示 1.研究目的 最近项目中需要利用python获取计算机硬件的一些基本信息,查阅资料,.于是写下这篇简短的博客,有问题烦请提出,谢谢-_- 2.platform库介绍 platform 库是 Python 的一个内置库&#xff0c;可以让我们轻松地获取…

spring boot 项目中redis的使用,key=value值 如何用命令行来查询并设置值。

1、有一个老项目&#xff0c;用到了网易云信&#xff0c;然后这里面有一个AppKey&#xff0c;然后调用的时候要在header中加入这些标识&#xff0c;进行与服务器进行交互。 2、开发将其存在了redis中&#xff0c;一开始的时候&#xff0c;我们测试用的老的key&#xff0c;然后提…

ValueError: Out of range float values are not JSON compliant

可能原因一 可能原因二 数据里面有NaN

算法: 滑动窗口题目练习

文章目录 滑动窗口长度最小的子数组无重复字符的最长子串最大连续1个个数 III将x减到0的最小操作数水果成篮找到字符串中所有字母异位词串联所有单词的子串最小覆盖子串 总结 滑动窗口 长度最小的子数组 做这道题时,脑子里大概有个印象,知道要用滑动窗口,但是对于滑动窗口为什…

2016年国赛高教杯数学建模D题风电场运行状况分析及优化解题全过程文档及程序

2016年国赛高教杯数学建模 D题风电场运行状况分析及优化 风能是一种最具活力的可再生能源&#xff0c;风力发电是风能最主要的应用形式。我国某风电场已先后进行了一、二期建设&#xff0c;现有风机124台&#xff0c;总装机容量约20万千瓦。请建立数学模型&#xff0c;解决以下…

探索私有化聊天软件:即时通讯与音视频技术的结合

在数字化转型的浪潮中&#xff0c;企业对于高效、安全、定制化的通讯解决方案的需求日益迫切。鲸信&#xff0c;作为音视频通信技术的佼佼者&#xff0c;凭借其强大的即时通讯与音视频SDK&#xff08;软件开发工具包&#xff09;结合能力&#xff0c;为企业量身打造了私有化聊天…

MySQL Mail服务器集成:如何配置发送邮件?

MySQL Mail插件使用指南&#xff1f;怎么优化 MySQL发邮件性能&#xff1f; MySQL Mail服务器的集成&#xff0c;使得数据库可以直接触发邮件发送&#xff0c;极大地简化了应用架构。AokSend将详细介绍如何配置MySQL Mail服务器&#xff0c;以实现邮件发送功能。 MySQL Mail&…

【YashanDB知识库】如何配置jdbc驱动使getDatabaseProductName()返回Oracle

本文转自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7352676.html?templateId1718516 问题现象 某些三方件&#xff0c;例如 工作流引擎activiti&#xff0c;暂未适配yashandb&#xff0c;使用中会出现如下异常&#xff1a; 问题的风险及影响 …

【STM32】江科大STM32笔记汇总(已完结)

STM32江科大笔记汇总 STM32学习笔记课程简介(01)STM32简介(02)软件安装(03)新建工程(04)GPIO输出(05)LED闪烁& LED流水灯& 蜂鸣器(06)GPIO输入(07)按键控制LED 光敏传感器控制蜂鸣器(08)OLED调试工具(09)OLED显示屏(10)EXTI外部中断(11)对射式红外传感器计次 旋转编码器…

K8S服务发布

一 、服务发布方式对比 二者主要区别在于&#xff1a; 1、部署复杂性&#xff1a;传统的服务发布方式通常涉及手动配置 和管理服务器、网络设置、负载均衡等&#xff0c;过程相对复 杂且容易出错。相比之下&#xff0c;Kubernetes服务发布方式 通过使用容器编排和自动化部署工…

QT----Creater14.0,qt5.15无法启动调试,Launching GDB Debugger报红

问题描述 使用QT Creater 14.0 和qt5.15,无法启动调试也没有报错,加载debugger报红 相关文件都有 解决方案 尝试重装QT,更换版本5.15.2,下载到文件夹,shift鼠标右键打开powershell输入 .\qt-online-installer-windows-x64-4.8.0.exe --mirror http://mirrors.ustc.edu.cn…