Java基础及进阶

JAVA特性

基础语法

一、Java程序的命令行工具

在这里插入图片描述

二、final、finally、finalize

在这里插入图片描述

三、继承

在这里插入图片描述

class 父类 {
//代码
}
 
class 子类 extends 父类 {
//代码
}

四、Vector、ArrayList、LinkedList

五、原始数据类型和包装类

在这里插入图片描述

六、接口和抽象类

在这里插入图片描述

JAVA进阶

Java引用队列

在这里插入图片描述

Object counter = new Object();
ReferenceQueue refQueue = new ReferenceQueue<>();
PhantomReference<Object> p = new PhantomReference<>(counter, refQueue);
counter = null;
System.gc();
try {
    // Remove是一个阻塞方法,可以指定timeout,或者选择一直阻塞
    Reference<Object> ref = refQueue.remove(1000L);
    if (ref != null) {
        // do something
    }
} catch (InterruptedException e) {
    // Handle it
}

七、JAVA IO

三种IO方式

java.io包

也叫BIO。它基于流模型实现,在进行读取输入流或者写入输出流操作时,读、写动作完成之前,线程会一直阻塞,它们之间的调用是可靠的线性顺序优点是代码比较简单、直观,缺点是IO 效率和扩展性存在局限性。

java.nio包

NIO 框架,提供了 Channel、Selector、Buffer 等新的抽象。它可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式。

NIO2

也叫AIO(Asynchronous IO),它是NIO的进一步改进,引入了异步非阻塞 IO 方式。异步 IO 操作基于事件和回调机制,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。

IO 工具类

File

这里是引用

RandomAccessFile

这里是引用

字节流

InputStream和OutputStream。
字符流
Reader和Writer。
补充知识点
Closeable 接口:

try-with-resources、 try-finally

Cleaner 或 finalize 机制:资源释放的最后把关

在这里插入图片描述

NIO
1.主要组成

主要由Buffer、Channel、Selector、Charset四部分组成。

Buffer(缓冲区):

NIO 中,数据都是通过 Buffer 处理的; 除了布尔类型,所有原始数据类型都有相应的 Buffer 实现( ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 和 DoubleBuffer)。

Buffer详细介绍:

Buffer的几个基本属性:capacity、position、limit、mark。

capacity:	Buffer的大小,即数组的长度。
position:要操作的数据的起始位置。
limit:操作的限额。(注意,在读取和写入时,limit的意义是不同的)
mark:记录上一次position的位置,但不是必须的。(默认是0)

Channel(通道):

NIO 中被用来支持批量式 IO 操作的一种抽象,可以进行异步的 IO 操作。
常见的 Channel 类有 FileChannel、SocketChannel、ServerSocketChannel 和 DatagramChannel。

Selector(选择器):

Selector 可以用来实现 Reactor 模式,用于监听多个 Channel 的事件。因此,可以检测到注册在 Selector 上的多个 Channel 中,是否有 Channel 处于就绪状态,实现了单线程对多 Channel 的高效管理,是javaNIO 实现多路复用的基础

Charset:

提供 Unicode 字符串定义。

2.NIO的核心

Buffer 和 Channel 之间的交互:数据可以从 Channel 读取到 Buffer 中,也可以从 Buffer 写入到 Channel 中。

3.NIO的优点

NIO通过高效地定位就绪的 Channel,高效分配任务。仅select 时是阻塞的,所以可以避免大量客户端连接时,频繁切换线程。因此,应用的扩展性有了非常大的提高。

在这里插入图片描述

异常处理时的基本原则

在这里插入图片描述

补充概念

同步或异步(synchronous/asynchronous)

同步:当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步。

异步:其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系

阻塞与非阻塞(blocking/non-blocking)

阻塞状态:无法从事其他任务,只有当条件就绪才能继续。

非阻塞:不管 IO 操作是否结束,直接返回,相应操作在后台继续处理。

序列化(Serialization)

这里是引用

补充知识点

不能一概而论认为同步或阻塞就是低效。

网络编程中,比如 Socket 通信,都是典型的 IO 操作目标

在这里插入图片描述

补充

FileSystemProvider
两种特别的Buffer:Direct Buffer和MappedByteBuffer

DirectBuffer:

DirectBuffer是ByteBuffer的一种特殊形式,用于在堆外(Off-heap)内存中存储数据。

DirectBuffer创建方法:

调用ByteBuffer的allocateDirect()方法来创建。(不是使用传统的allocate()方法)

DirectBuffer的主要特点:

特点内容
直接访问因为内存是在堆外分配的,所以DirectBuffer对象可以通过JNI(Java Native Interface)直接访问,从而避免了在Java堆和本机堆之间来回复制数据的开销
堆外内存存储DirectBuffer对象分配的内存不在Java虚拟机的堆中,而是直接在操作系统的本机内存中分配的
性能优化DirectBuffer适用于需要频繁访问大量数据或需要与本地(native)代码进行交互的场景,它们可以显著提高数据访问和操作的效率,因为避免了额外的内存拷贝。

DirectBuffer的使用需要注意:

  • 它们的创建和销毁通常比普通的堆上的ByteBuffer更昂贵,因为涉及到操作系统的本机内存管理。
  • 对于小数据量的操作,并不一定比普通的堆上操作性能更好,甚至可能更差,因为操作系统在小块内存分配和释放上的开销相对较大。

垃圾收集方面的特殊性。

Buffer的基本操作

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

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

相关文章

AutoHotKey自动热键(十一)下载SciTE4AutoHotkey-Plus的中文增强版脚本编辑器

关于AutoHotkey的专用编辑器, SciTE4AutoHotkey是一个免费的基于 SciTE 的 AutoHotkey 脚本编辑器,除了 DBGp 支持, 它还为 AutoHotkey 提供了语法高亮, 调用提示, 参数信息和自动完成, 以及其他拥有的编辑特性和辅助工具.XDebugClient 是一个基于 .NET Framework 2.0 的简单开…

论文翻译:通过云计算对联网多智能体系统进行预测控制

通过云计算对联网多智能体系统进行预测控制 文章目录 通过云计算对联网多智能体系统进行预测控制摘要前言通过云计算实现联网的多智能体控制系统网络化多智能体系统的云预测控制器设计云预测控制系统的稳定性和一致性分析例子结论 摘要 本文研究了基于云计算的网络化多智能体预…

PNPM 高效入门:安装配置一本通

PNPM高效入门&#xff1a;安装配置一本通 引言Pnpm 简介安装 PNPM全局安装&#xff08;推荐&#xff09;使用 nvm&#xff08;Node Version Manager&#xff09; 配置PNPM使用PNPM管理项目初始化项目 添加依赖快速安装所有依赖查看安装的包 优化与故障排除PNPM与持续集成/持续部…

Nest.js 实战 (一):使用过滤器优雅地统一处理响应体

前言 在我们实际的业务开发中&#xff0c;我们可以看到后端接口返回格式都有一定的要求&#xff0c;假如我们统一规定接口的统一返回格式为&#xff1a; {data: any; // 业务数据code: number; // 状态码msg: string; // 响应信息timestamp: number; // 时间戳 }那么在 Nest.…

华为HCIP Datacom H12-821 卷40

1.单选题 下面是台路由器BGP错误输出信息&#xff0c;关于这段信息描述错误的是 <HUAWEI>display bgp error Error Type :Peer Error Date/Time :2010-03-22 12:40:39 Peer Address :10.1.1.5 Error Info : Incorrect remote AS A、可能是由于邻居…

Nginx的反向代理缓存

一 .Nginx的反向代理缓存 #代理缓存路径设置缓存保存的目录 #keys_zone设置共享内存占用的空间大小 #max_size缓存大小 #inactice 超过时间,则缓存自动清理 #use_temp_path 关闭临时目录proxy_cache_path /usr/local/nginx/upsteam_cache key_zone=mycache:5m max_size=…

HarmonyOS 屏幕适配设计

1. armonyOS 屏幕适配设计 1.1. 像素单位 &#xff08;1&#xff09;px (Pixels)   px代表屏幕上的像素点&#xff0c;是手机屏幕分辨率的单位&#xff0c;即屏幕物理像素单位。 &#xff08;2&#xff09;vp (Viewport Percentage)   vp是视口百分比单位&#xff0c;基于…

基于单片机的智能医疗监护系统设计

1.简介 随着社会的发展&#xff0c;智能化电子设备成为了人们生活中不可或缺的一部分&#xff0c;尤其是在人们对于身心健康更加注重的今天&#xff0c;智能医疗监护系统应运而生。本套电子监护设备集体温测量、心电采集、心率监测、血氧监测于一体&#xff0c;带有语音播报模块…

图——图的应用01最小生成树(Prim算法与Kruskal算法详解)

这篇文章就来讲一下图的最后的应用章节中的最小生成树&#xff0c;包括Prim算法与Kruskal算法两大部分&#xff0c;在实际问题当中应用很广。在对于前面的内容熟悉的情况下再学习本章比较好哦&#xff0c;图的基本概念&#xff0c;存储结构以及图的遍历。大家可以通过下面的链接…

iPhone数据恢复:如何从iPhone恢复误删除的短信

来自iPhone的意外删除的短信可能很关键。它们可能是来自您常用应用程序、银行交易、付款收据的重要通知&#xff0c;也可能是来自朋友的重要文本、孩子的学校通知等。 如果您也从iPhone丢失了此类消息&#xff0c;我们在这里分享如何在没有备份以及有备份的情况下在iPhone上恢…

JVM和类加载机制-01[JVM底层架构和JVM调优]

JVM底层 Java虚拟机内存模型JVM组成部分五大内存区域各自的作用虚拟机栈(线程栈)栈帧内存区域 本地方法栈程序计数器为什么jvm要设计程序计数器&#xff1f; 堆方法区 JVM优化-堆详解JVM底层垃圾回收机制jvm调优工具jvisualvm.exeArthas工具使用 Java虚拟机内存模型 JVM跨平台原…

go Sync.Pool

sync 包提供了一个强大且可复用的实例池&#xff0c;以减少 GC 压力。在使用该包之前&#xff0c;我们需要在使用池之前和之后对应用程序进行基准测试。这非常重要&#xff0c;因为如果不了解它内部的工作原理&#xff0c;可能会影响性能。 池的限制 type Small struct {a in…

dhtmlx-gantt甘特图数据展示

官网文档&#xff1a;甘特图文档 实现效果&#xff1a; 首先需要下载 dhtmlx-gantt组件 npm i dhtmlx-gantt //我项目中使用的是"dhtmlx-gantt": "^8.0.6" 这个版本&#xff0c;不同的版本api或是文档中存在的方法稍有差异 界面引用 <template>&l…

iOS ------ 类 父类 元类的总结

一&#xff0c;类的定义 类在OC中其实是指向objc_class的结构体指针&#xff0c;结构体构造我 typedef struct objc_class *Class; struct objc_class { Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct obj…

ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法

问题描述 Vue2 项目在使用 el-select 组件时&#xff0c;动态将disabled变更为了 true&#xff0c;元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板&#xff0c;发现&#xff0c;组件内的 input 元素被动态设置了height的样式&#xff1a; 在项目中检查后并…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1986张 标注数量(xml文件个数)&#xff1a;1986 标注数量(txt文件个数)&#xff1a;1986 标注类别数&#xff1a;7 标注类别名称&#xff1a;[crescent gap, silk spot, water spot, weld line, oil spot, punchin…

人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解。在机器学习和深度学习领域&#xff0c;模型的训练目标是找到一组参数&#xff0c;使得模型能够从训练数据中学习到有用的模式&am…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

基于springboot与vue的旅游推荐系统与门票售卖

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…