- 博客(39)
- 收藏
- 关注
原创 【JVM】基础概念之内存结构介绍
通过前一节的内容我们了解了,我们的Java程序都是运行在JVM上面的,那么JVM具体内部是怎样划分的呢?我们来具体了解一下JVM内存区域可以被划分为这样几个核心部分:运行时数据区、直接内存、执行引擎、本地库接口和垃圾回收系统现在我们对这几个核心区域有了一定了解,接下来我们着重介绍一下运行时数据区和垃圾回收系统这两部分。
2025-12-03 01:09:00
632
原创 【JVM】基础概念之为什么要使用JVM
换句话讲,JVM就是在字节码和机器码之间做一个翻译的工作,不同平台的机器码存在区别,JVM存在适配不同平台的版本来解析字节码(生成的字节码都是相同的);正是因为所有平台的JVM都能解读同一份字节码,所以开发者只需编译一次就能在任何安装了JVM的平台上运行,这也就是“一次编译,到处运行”的本质。也就是打开下载好的电子书之前,里面的内容需要先加载出来,比如书里的 “前言固定说明”(类似静态变量的显式赋值)和 “开篇必读提示”(类似静态代码块),得先按规则准备好,才能让读者翻开时看到完整内容。
2025-10-21 22:20:38
797
原创 【JavaSE】多线程之CAS和原子类
CAS:compare and swap,翻译过来就是比较并交换我们可以借助伪代码来感受一下这个过程上述的CAS一整个过程是CPU的一条指令,不可拆分,因此具有原子性,指令本身也就不存在指令重排序、编译器优化等线程安全问题操作系统对这个指令进行了封装,提供了一些API供C++调用,而我们的JVM又是基于C++实现的,这样JVM也能够调用这样的CAS操作既然它是线程安全的,我们为什么之前一直没有直接调用这个指令呢?
2025-10-20 18:44:14
361
原创 【JavaSE】多线程之synchronized相关情况
前一篇文章中我们了解了几种常见的锁策略,这里我们来着重介绍一下synchronized的相关情况。
2025-10-20 16:43:49
252
原创 【JavaSE】多线程之常见的锁策略
这篇文章主要介绍一下多线程中常见的几种锁,以便大家更好的了解和使用锁tip:此处的锁策略不是和Java强相关的,其他语言只要是涉及到并发编程都可以谈到这样的锁策略。
2025-10-19 16:09:40
835
原创 【JavaSE】多线程之代码案例(四)
Java标准库定义的定时器——Timer使用的时候需要结合TimerTask类,相当于将要执行的任务放在TimerTask实例中,再调用Timer中的schedule方法,将任务和执行时间添加到任务列表中定时器,顾名思义,就是给线程设置一个时间,到点执行@Override}, 2000);运行的结果就是,依次打印hello time1000/2000/3000。
2025-08-23 20:36:30
205
原创 【JavaSE】多线程之代码案例(一)
I’m back ~ 本节将主要介绍多线程中几种常用的设计模式(类似于模板?一种编程的软性要求,能够提升代码质量和程序运行效率,总之,好啊<(^-^)>)tips:不同编程语言由于代码风格不同,有些设计模式可能在某个语言中是不适用的。
2025-08-13 01:58:42
474
原创 【JavaSE】多线程之线程安全(下)
本节是线程安全的最后一部分,当然了,线程安全这个概念本身会伴随着我们整个多线程学习部分,so,let’s begin~
2025-08-13 00:27:43
629
原创 【JavaSE】多线程之Thread类(下)
前面我们了解了Thread类中的常用属性,本节我们来介绍Thread相关的方法以及几种基本的线程操作。
2025-08-08 00:18:58
984
原创 【JavaSE】多线程之Thread类(上)
经过前面几篇文章的铺垫,相信大家对于多线程已经有了初步的了解,本篇将着重介绍多线程的封装类——Thread类。
2025-08-07 22:13:44
678
原创 【JavaSE】多线程之线程介绍
嘿嘿,是不是有点绕晕了,可以这样理解,CPU是一个工厂,进程是工厂中不同的流水线,每一条流水线上都拥有一定的机器和原料(资源)用来加工,线程则是流水线上的工人,轮流在这条流水线上工作,每条流水线的工人使用的都是这条流水线上的资源。通过前面的内容我们已经知道,计算机中运行的程序都是由操作系统来管理的,进程则是操作系统分配资源的基本单位,为了提升CPU的运行效率,我们采用分时复用、多线程等方法进行多个程序的并发、并行执行。还有可能,线程1、2在一个核心上来回切换,线程3在另一个核心上和其他进程的线程来回切换。
2025-07-29 12:15:13
734
原创 Java数组
数组表示一个相同类型元素的集合对于一个数组,可以有以下几种定义方法//并没有进行初始化对数组进行整体初始化,只能在定义数组的时候进行存储类型为引用类型时,默认值为NULL存储类型为布尔类型时,默认值为false存储类型为整型时,默认值为0。
2025-04-22 20:07:40
1008
原创 Java方法
简单来说,方法就是一个可以解决某些问题、完成某项功能的代码块(类似于C语言中的函数)规模化组织代码做到代码复用(一份代码可以在多个位置使用)让代码更具可读性、便于理解直接调用现有的方法开发,不必重复造轮子,提高效率修饰符 返回值类型 方法名称(参数类型1 形参1, 参数类型2 形参,……){方法体 //代码主体return 返回值 //不一定存在修饰符:public、private、protected、static、final等(这里后续会展开介绍)
2025-03-17 20:43:45
956
原创 Java运算符&逻辑控制&输入输出
和C逻辑相同,括号中必须是布尔表达式,注意花括号的位置(左括号和if在同一行)~是一元运算符,其余都是二元运算符,针对的是数据的某一个位(二进制位)操作数为布尔类型时,位运算和逻辑运算原理相同,但是不存在短路问题。运算规则与数学计算规则相同,需要注意以下几点。=、<、>、<=、>=分为前置++(--)、后置++(--)运算符:+=、-=、*=、/=、%=和C逻辑相同,括号中必须是布尔表达式。运算符:+、-、*、/、%运算符:<<、>>、>>>运算符:&&、||、!运算符:&、|、~、^
2024-10-11 22:35:53
1013
原创 Java数据类型&常量
定义常量,使用final关键字,后跟数据类型、常量名和初始值,例如其中MAX_WIDTH和COMPANY_NAME就是常量,他们分别被赋值为800和"Tech Corp"tips:一般将被修饰的变量大写。
2024-10-09 19:27:59
943
原创 Java关键字&标识符
abstract:抽象类型final:修饰类,表示该类不能被继承;修饰方法,表示方法不能被重写;修饰变量,表示变量不能被修改static:静态类型synchronized:修饰方法,表示只有一个方法进入临界区1.3类间关系extends:表示类之间的继承implements:表示实现了一个或多个接口1.4定义建立实例及引用实例new:创建一个对象this:表示调用本类中的变量或方法super:表示调用父类中的变量或方法instanceof:测试对象是否是类的实例。
2024-10-08 19:10:55
431
原创 Java开发环境&命名规则
源代码(Test.java)->class文件(Test.class)->JVM java虚拟机。JRE ---- Java Runtime Environment Java运行环境。JDK ---- Java Development Kit Java开发者工具。JVM ---- Java Virtual Machine Java虚拟机。注意:main不是关键字,可以将变量定义成main。文档注释中需要包含相关内容。
2024-10-08 08:20:28
562
原创 Java异常
Java中虽然已经内置了丰富的异常类,但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构自定义异常通常会继承自Exception或者RunTimeException继承自Exception的异常默认是受查异常继承自RunTimeException的异常默认是非受查异常。
2024-07-20 11:02:13
733
1
原创 Java String类
C语言中存在字符类型,但是在表示字符串的时只能使用字符数组或者字符指针,虽然可以使用标准库提供的字符串系列函数完成大部分的操作,这种将数据和操作数据方法分离开的方式却是不符合面向对象思想的。由于字符串的不可变性,Java中又提供了StingBuilder和StringBuffer两个类,用来更高效地进行字符串的修改。去除字符串中的空格:trim方法(只会去除字符串两左右端的空格,字符串中的字符不会被改变)String是一种不可变对象,字符串中的内容是不可改变的,即字符串中不可修改。
2024-06-11 22:26:45
844
原创 Java实现图书管理系统
输入需要删除的书籍名称,在书架上查找该书,若存在,查找要删除的书籍所在下标,从该下标开始,通过元素覆盖的方式,删除书籍信息,删除后要记得修改对应的usedSize的值。同样的,要是被删除的书籍不存在,输出错误信息。输入需要借阅的书籍名称,在书架上查找该书,找到后判断该书籍的借阅状态,若已被借阅,输出错误信息,若未被借阅,修改借阅状态,借阅成功,若是未找到该书,输出错误信息。和借阅图书过程类似,输入书籍名称,遍历书架,找到被借走的书籍的信息,将书籍的状态改成未借阅,如果没有找到该书,则输出错误信息。
2024-06-11 21:03:42
1085
原创 Java继承和多态
在构造子类对象的时候,先调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整。举个例子来说:若B和C都继承了A类,那么A类就称为父类/基类或者超类,B和C可以称为A的子类/派生类,继承之后,子类可以复用父类中的成员,子类在实现时只需关心自己新增加的成员即可。与继承类似,组合也是一种表达类之间关系的方式,也能够达到代码重用的效果。也成为后期绑定(晚绑定),即在编译时,不能确定方法的行为,,需要等到程序运行时 ,才能够确定具体调用哪个类的方法。
2024-05-25 17:21:17
957
原创 Java类和对象
类是用来对一个(实体)对象进行描述的,主要描述该实体(对象)具有哪些属性,哪些功能,描述完成之后计算机就可以识别了在Java中定义类时需要用到关键字class,具体定义方法如下field;//字段(属性)或者成员变量method;//行为或者成员方法其中,class为定义类的关键字,ClassName为类的名字,{}中为类的主体类中包含的内容称为类的成员,属性主要是用来描述类的,称之为类的成员变量或者类成员变量;方法主要说明类具有哪些功能,称为类的成员方法类名注意采用大驼峰定义。
2024-05-18 19:37:52
792
原创 C语言实现贪吃蛇游戏
贪吃蛇(也叫贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。游戏通过控制蛇头方向吃食物,从而使蛇变得越来越长。我们可以通过控制台程序实现简易的贪吃蛇游戏。首先设置一下控制台界面的大小,将控制台命名为贪吃蛇,隐藏光标//设置窗口的大小、名称system("title 贪吃蛇");//隐藏光标封装一个函数打印功能提醒和欢迎界面wprintf(L"欢迎来到贪吃蛇小游戏\n");wprintf(L"用↑.↓.←.→来控制蛇的移动,按F3加速,F4减速\n");
2024-04-22 19:16:29
1179
5
原创 数据结构——双向链表
双向链表,即带头双向循环链表,有头节点(哨兵位);每个节点中有两个指针,一个指向前一个节点,一个指向后一个节点;首尾相连,构成循环。
2024-04-16 18:37:43
641
原创 单链表实现通讯录
实现的代码在下面,接下来的一段在发疯,建议跳过,,,啊啊啊啊啊啊,,,不是很复杂的代码写了又改改了好几天,其他的部分都挺一气呵成的,就是从文件中读取数据怎么读都是乱码,实在搞不定去请教了老师,也是万万没想到,和代码关系不大,编码格式的问题,,,,(阴暗)(扭曲地爬行)
2024-04-14 19:54:42
258
4
原创 C语言编译与链接
编译器所能做的分析是语义的静态分析,静态语义分析通常包括声明和类型的匹配,类型的转换等。汇编器是将汇编代码转变成机器可执行的指令,每一个汇编语句机会都对应一条机器指令,就是根据汇编指令和机器指令的对照表一一的进行翻译,也不做指令优化。将源代码程序被输入扫描器,扫描器的人物就是简单的进行词法分析,把代码中的字符分割成一系列的记号(关键字、标识符、字面量、特殊字符等)编译过程就是将预处理后的文件进行一系列的词法分析、语法分析、语义分析及优化,生成相应的汇编代码文件。而且包含的头文件都被插入到.i文件中。
2024-04-05 22:29:41
1013
2
原创 C语言结构体
结构是一些值的集合,这些值成为成员变量,结构的每个成员可以是不同类型的变量,如: 标量、数组、指针,甚⾄是其他结构体。结构体成员的直接访问是通过点操作符(.)访问的。匿名的结构体类型,如果没有对结构体类型重命名,基本上只能使用一次。结构体在对⻬⽅式不合适的时候,我们可以⾃⼰更改默认对⻬数。总体来说:结构体的内存对⻬是拿空间来换取时间的做法。可以使用结构体指针间接访问结构体中的变量。在声明结构体的时候,可以不完全的声明。结构体传参的时候,要传结构体的地址。使⽤⽅式:结构体指针->成员名。
2024-03-19 19:33:40
828
2
原创 C语言内存函数模拟实现
函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。这个函数在遇到 '\0' 的时候并不会停下来。memcpy函数的模拟实现。memmove的模拟实现。
2024-03-17 22:30:13
175
2
原创 C语言中数据在内存中的存储
超过一个字节的数据在内存中存储的时候,就存在了存储顺序的问题,按照不同的存储顺序,我们呢将其分为大端字节序存储和小端字节序存储大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,数据的高位字节内容保存在内存的低地址处小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,数据的高位字节内容保存在内存的高地址处。
2024-03-17 18:31:36
354
4
原创 C语言指针
内存空间的管理是将内存划分为一个个的内存单元,每个内存单元的大小取一个字节;一个字节可以存放八个比特位,每个比特位可以存储一个2进制的1或0;每个内存单元有一个编号,通过这个编号可以迅速找到一个内存空间。在计算机中将内存单元的编号称为地址,C语言中给地址起名为指针也就是说,内存单元的编号==地址==指针存放的是数组的地址,能够指向数组的指针变量。
2024-03-10 19:55:12
851
3
原创 扫雷游戏的分析与实现
扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。
2024-01-22 18:28:32
615
1
原创 C语言分支循环
其中,表达式1,2,3分别对应初始化,条件,更新。具体执行过程为:计算表达式1的值,若满足表达式2,则开始执行语句块的内容,一次循环后执行表达式3,达到变量更新的效果。如果表达式的值为假,则不进入循环,执行while语句的下一条语句。先执行语句,后判断表达式的真假,若为真,则继续执行语句块,否则执行do...while的下一条语句。continue只是提前结束本层循环体的运行,忽略循环体内其后面的语句,然后重新判断循环条件,其含义是:如果表达式为真,则执行语句块1,否则执行语句块2。
2023-12-05 18:19:33
916
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅