![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java学习笔记
文章平均质量分 81
掌握Java语言,从无到有。
Biangbangbing
这个作者很懒,什么都没留下…
展开
-
java学习笔记(二十八)——开发一个小项目(VMeeting3.0)
上篇文章按照很规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多;挂上一篇文章java学习笔记(二十七)——开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN博客这次基于上一次的开发过程,增加了:图片传输功能 在线视频功能 文件传输功能【部分完成,下载功能待设计】需求文档部分升级,并进行内容功能——技术的更新:一、用户角色描述用户角色 用户描述 普通用户 所有使用软件的客户端 管理员 软件后台监控人员【服务器端也需要可原创 2022-02-26 23:39:32 · 1663 阅读 · 0 评论 -
java学习笔记(二十七)——开发一个小项目(VMeeting2.0)
上次文章基本描述了整个项目的设计和一些业务逻辑的细节,但是感觉有一点点怎么说都没有说清楚的感觉,其实就是细节太琐碎整体没有逻辑感。感觉对开发也有也有一定的影响。于是我找了一个产品说明文档规范,来使得自己对于项目开发的功能描述更加清晰和规范。上一篇文章↓java学习笔记(二十六)——开发一个小项目(VMeeting1.0)_Biangbangbing的博客-CSDN博客产品需求文档目录:模板和一个示例的链接我都挂链接:XXX 产品需求文档_V1.0_Build_01_2014111原创 2022-02-21 15:09:27 · 499 阅读 · 0 评论 -
java学习笔记(二十六)——开发一个小项目(VMeeting1.0)
上一次大概学习了cs架构是什么东西。这次可以着手来实现一个小项目,做一个低配版QQ。大概需要设计实现双方通信,先画个大纲。项目架构server:接收客户端A的消息,然后转发给目的客户端Bserver:做server相关任务调度。连接查询请求的客户端——启动界面——循环监听消息。 serverUI:服务器端的界面设计。 serverListener:服务器端界面的监听器。 serverReceiveMsg:服务器端接收客户端发送的消息。client:多个客户端,相互发送消息但是要经过服原创 2022-01-21 00:35:20 · 484 阅读 · 0 评论 -
Java学习笔记(二十五)——通信(cs架构)
想要设计实现通信功能。需要掌握以下知识:网络通信(计网),多线程。需要实现以下功能:将传输的数据(文字,数字,声音,图片,视频……)编码,转换成可以通信传输的数据。 实现A和B(至少是双方)的通信。<AB实质是两个进程,可以是通过公网ip相互访问连接的两个机器运行的两个进程;可以是同一局域网下的两台机器运行的两个进程;可以是一台机器跑在本机和虚拟机的两个进程;可以是同一个机器运行的两个进程>通信模式(功能2)CS结构(目前只学习这一个结构,后面再补充同级的结构)我原创 2022-01-18 20:35:28 · 2660 阅读 · 0 评论 -
Java学习笔记(二十四)—— HashMap
终于到了一个比较硬核的数据结构,其实之前数据结构课讲过如何用c++实现hashmap的思路,Java也有自带的hashmap这个数据结构。今天联系二者经验,彻底做一次梳理,并基于已有的java hashmap做一些些分析,他为什么设计思路是这样的。以及如果自己手撕一个hashmap要怎么设计。hashmap出现原因存连续的数据。一开始我们用的是数组或者链表来存储数据,但明显的:数组需要开一块连续的空间存放数据,当需要插入或删除某个数据的时候,因为需要维护连续性,所以要循环将数据进行移动,原创 2021-10-30 23:38:27 · 251 阅读 · 0 评论 -
Java学习笔记(二十三)—— io流
io使用场景当想要将某些数据存储到磁盘内,以便程序关闭、再次运行的时候还可以查到这个数据,这时我们需要用io流将这些数据写出程序写入到本地文件里、或者保存到数据库等等。iO详解查看java API文档——java.base——java.io。发现有很多接口、类、方法调用(简单来说就是有点乱七八糟) 张下面这样↓所以从宏观角度简单分分类,然后分解学习:io分类按照读取单位分:字节流(一次性传入一个字节,8bit)(可以处理任何数据)字符流(java一个字符16.原创 2021-10-30 17:39:57 · 322 阅读 · 0 评论 -
Java学习笔记(二十一)—— 线程池
线程池是什么线程池是一种线程的使用模式,管理、维护多个线程。为什么需要线程池首先了解线程的生命周期,当有一个任务来临时,启动一个线程,当任务结束之后线程被销毁。看起来很简单,但这个过程是会消耗一定的资源。当多个线程在同时工作时,短时间内频繁地创建、销毁线程则会消耗大量的资源,会影响整体性能。如何避免反复的销毁和启动操作呢?工作结束的时候如果可以让他不要被销毁,而是进行一定时间的等待,下次工作来了接着用 —— 具体为任务结束后阻塞该线程,直到任务来唤醒线程。这个工作就是由线程池来完原创 2021-10-16 22:18:56 · 179 阅读 · 0 评论 -
Java学习笔记(二十)—— 生产消费模型
生产消费模型的应用场景和线程有关的另一个话题——消费生产模型的设计。具体应用场景——例如LOL里,自动产生兵线,吃掉兵线等。一个更贴切的栗子:在俄罗斯方块中,需要自动产生一些块,如果容器满了就无法产生,当有一行被完全填满就会消掉,这就很好地运用了生产消费模型。生产消费模型设计模型实现注意点:阻塞线程使用方法:wait() 启动线程使用方法:notify() 因为有多个生产者、消费者读写仓库库存数据,因此会产生data race,需要将修改数据的操作锁起来。 锁.原创 2021-10-09 22:23:18 · 273 阅读 · 0 评论 -
Java学习笔记(十九)——线程安全问题
什么是线程安全在多个线程并发执行的时候保证不会出现错误。因为多个线程共享进程(主线程)的数据。举个栗子:典型的抢票系统,在某个时间点有多个用户同时进行抢票操作,每个用户是一个线程。假设系统内目前有10张票,线程抢到票就会执行总票数-1,但是如何保证每个线程看到的票数确实是当前真正的票数呢。存在这样的可能:最一开始A抢到票,但是还没来得及操作票数-1,B看到的票数就仍旧是10张票,继续抢票于是A和B抢到的是同一张票。如果不加以控制,可能就造成100个人都抢到票了,但实际上只有10张。原创 2021-10-06 22:27:00 · 1261 阅读 · 1 评论 -
Java学习笔记(十八)——进程、程序、线程、并发、并行
今天开始接触多线程、并发相关知识。首先先来了解一下相关概念。名词概念程序程序:一段执行的代码,有数据和指令集。进程进程:一段程序执行的过程,是程序的实体,为程序提供所需要的资源。线程线程:操作系统进行运算能调度的最小单元,是进程的实际运作单元。一个进程可以并发很多个线程执行不同的任务。(有一个主进程,可以调用多个线程)并发指某一段时间内,进程交替执行。看似同时,但某一个时刻都只有有个进程在工作。单核就可以实现。并行指某个时刻,进程与进程同时执行。需要多核。原创 2021-09-15 23:59:32 · 121 阅读 · 0 评论 -
Java学习笔记(十七)—— 开发个小项目(GoBang v5.0)
接十六,今天重点完善AI下棋以及用户登录并解决一个小问题。画个大纲(跟随慢慢开发过程不断完善)1.用户两个用户对战 一黑一白用户可以是人,也可以是AI。对战模式支持人人,人机,机机。人人对战的时候想象的场景是主用户(登录游戏的)要找一个对手进行对战,主用户要记录战局成绩,那另一方应该也记录成绩或者单纯简单玩一玩(需要满足这两种需求:对手可以是服内玩家<甚至可以考虑设计加好友功能在好友中找对手>,也可以是路人)属性本次比赛执棋颜色用户名(不同用户的用户名不能一..原创 2021-08-27 12:27:48 · 182 阅读 · 0 评论 -
Java学习笔记(十六)—— 开发个小项目(GoBang4.0)
接十二,今天重点搞定简单基础版本的AI下棋。画个大纲(跟随慢慢开发过程不断完善)1.用户两个用户对战 一黑一白用户可以是人,也可以是AI。对战模式支持人人,人机,机机。属性本次比赛执棋颜色用户名密码游戏得分(赢得局数)存档棋盘信息(二维数组,chessShape类型数组,黑、白、总棋子个数,下一次下棋的棋权) 方法 下棋输赢设置、获取属性接口2.比赛规则一黑一白交替轮流下棋可以决定哪个玩家先手不可以重复下棋到同一个位..原创 2021-08-21 16:55:00 · 210 阅读 · 0 评论 -
Java学习笔记(十五)数据结构——线性表(链表实现)
搬上上次的图,这次用链表的方式来实现简单的线性表。直接罗列功能框架Node :结点类(设计链表的一个结点要包含两部分内容,值域 and 指针域,值用来储存内容,指 针域用来指向下一个或者上一个结点的地址<单链,双链,循环都可以设置>)ByChain:链表类,指向下一个或者上一个结点的地址。Node:属性value 值域 next 下一个结点 front 上一个结点 (上一个节点的设置看自己需求实现,后面代码实现的部分没考虑...原创 2021-08-19 18:41:48 · 294 阅读 · 0 评论 -
Java学习笔记(十四)—— .hashcode()
今天来接触一下hashcode()这个方法,至于这么到这里来的 ——hashcode()上一篇有讲用数组的方式实现一个线性表,里面有一个排序的方法需要实现,但是我们只分析当数组存的元素是Interger时如何排序,当这个元素是其它类型就没办法使用'<','>'来做比较了,那么如何实现对它的比较呢。于是展开说说:String类型可以有字符串类型,他们的比较方式可以是字典序。一位一位比较ASCII码,短的在前。但是长度过长比较起来很麻烦。其他不规则的元素:例如自己设定的类对象要怎么比原创 2021-08-16 11:46:48 · 418 阅读 · 0 评论 -
Java学习笔记(十三)数据结构 —— 线性表(数组方式实现)
根据了解的基础的数据结构知识框架今天尝试实现的就是线性表,用数组的方法来实现。为啥明明有现成的数组还要“自作多情”造车轮现成数组固定大小,不能更改,不灵活 现成数组功能简单,没有增删改查、排序等buff 知道一些底层的实现方法,有利于锻炼代码能力,全面思维能力 磨刀不误砍柴工,自己写很麻烦,有需求的时候用起来很好用,很香()功能框架罗一罗interface :声明方法class :声明属性+方法实现属性maxSize :线性表可以申请的最大长度,...原创 2021-08-14 13:49:01 · 324 阅读 · 0 评论 -
Java学习笔记(十二)——开发个小项目(GoBang3.0 plus)
接上一篇,看了别的优秀作品有点感触,给自己一点灵感,完善&优化项目。画个大纲(跟随慢慢开发过程不断完善)1.用户两个用户对战 一黑一白用户可以是人,也可以是AI。对战模式支持人人,人机,机机。属性本次比赛执棋颜色用户名密码游戏得分(赢得局数)存档棋盘信息(二维数组,chessShape类型数组,黑、白、总棋子个数,下一次下棋的棋权) 方法 下棋输赢设置、获取属性接口2.比赛规则一黑一白交替轮流下棋可以决定哪个玩家先手..原创 2021-08-13 16:21:33 · 144 阅读 · 0 评论 -
Java学习笔记(十一)开发个小项目(GoBang3.0)
接上一篇,继续完善功能。画个大纲(跟随慢慢开发过程不断完善)1.用户两个用户对战 一黑一白用户可以是人,也可以是AI。对战模式支持人人,人机,机机。属性本次比赛执棋颜色用户名密码游戏得分(赢得局数) 方法 下棋输赢2.比赛规则一黑一白交替轮流下棋可以决定哪个玩家先手不可以重复下棋到同一个位置不可以将棋子下到边界外可以撤回刚刚下的棋,不可以撤回上一步的棋哪一方横竖斜到达5个棋子赢一局3.界面登录界面用户登..原创 2021-08-11 15:50:40 · 195 阅读 · 0 评论 -
Java学习笔记(十)——开发个小项目(GoBang2.0)
接上一篇,继续完善功能。画个大纲(跟随慢慢开发过程不断完善,今天分类方法改一改)1.用户两个用户对战 一黑一白用户可以是人,也可以是AI。对战模式支持人人,人机,机机。属性执棋颜色用户名游戏得分 方法 下棋输赢2.比赛规则一黑一白交替轮流下棋可以决定哪个玩家先手不可以重复下棋到同一个位置不可以将棋子下到边界外可以撤回刚刚下的棋,不可以撤回上一步的棋哪一方横竖斜到达5个棋子赢一局3.界面登录界面用户登录:用.原创 2021-08-08 16:29:38 · 206 阅读 · 0 评论 -
Java学习笔记(九)——开发个小项目(LazyGoBang)
没搞过项目,大概就是敲很多很多代码来实现某个完全的功能。这里记录开发一下过程、学到的技术和一些遇到的难题、解决方法。画个大纲(跟随慢慢开发过程不断完善)用户两个用户对战 一黑一白用户可以是人,也可以是AI。对战模式支持人人,人机,机机。属性执棋颜色用户名游戏得分方法下棋输赢比赛规则一黑一白交替轮流下棋可以决定哪个玩家先手不可以重复下棋到同一个位置不可以将棋子下到边界外可以撤回刚刚下的棋,不可以撤回上一步的棋哪一方横竖斜.原创 2021-08-05 21:42:56 · 127 阅读 · 0 评论 -
Java学习笔记(八)——了解源码之java.base下的的java.lang包
API接口文档什么是API?API是指应用程序的编程接口,用来让别人使用这个应用程序。关于API更加形象具体的说明见这里。API接口说明文档,用来告诉别人这个应用程序如何使用。我们现在想要看java的API文档说明是想看看java是怎么设计的,写java的技术人员是怎么设计一些函数、数据类型等等的。咋样能看到java的API方法一:上链接方法二:Java框架结构(后续慢慢将这个补完整)先看看java.base —— 描述java平台标准版的API功能包含一堆pack.原创 2021-08-03 11:53:23 · 1045 阅读 · 1 评论 -
Java学习笔记(七)——深入了解接口以及五大原则
接口 接口的一些基本概念在之前的笔记都讲过了(在笔记(二),看这里),今天补充一些新的知识。接口继承和类继承的区别接口可以继承接口。类可以继承类。类可以继承接口。 一个类或接口可以继承多个接口。一个类只能继承一个类。 接口的属性默认为static final属性。方法默认为 abstract 方法。杂七杂八有抽象方法不能实现实例化。=>接口、有抽象方法的类没有对象。 子类(接口类)对象有父类(接口)所有属性,子类对象既是子类又是父类对象。 父类对象没有子类的属性,也...原创 2021-07-31 11:00:55 · 213 阅读 · 0 评论 -
Java学习笔记(六)—— 答疑一些小知识点
区别重写和重载重载应用环境:同一个类中,多个重名方法 结构:访问修饰符——返回值——方法名——传入参数。 访问修饰符 :一致。 返回值类型:可以不一样,但是一定要基于参数不同(参数不同代表已经实现了重载)。 方法名 :一致。 参数 :不一致(个数或类型)。 构造方法的重载:通过参数不同的方法实现构造方法重载。通过传参个数不同调用实现不同的方法。 重写应用场景:子类重写父类方法。 结构:访问修饰符——返回值——方法名—...原创 2021-07-29 18:01:23 · 72 阅读 · 0 评论 -
Java学习笔记(五)——封装
封装啥叫封装?把属性的设置、获取改成一个特定的方法(set、get等)来实现,而不是直接访问,起到一个保护的作用。public void setName(String name){ this.name = name; //this待指本类,后面讲述细节}public String getName(){ //返回属性 return name; }封装、多态、继承是面对对象的三大特性。原创 2021-07-29 14:27:50 · 186 阅读 · 0 评论 -
Java学习笔记(四)——图形绘制进阶
命名规则命名规则 类型 规则 包 全小写 文件 和类名一致 类/接口 大驼峰命名法,首字母大写,后面的每个单词首字母大写 属性/方法(变量、对象、函数) 小驼峰命名法,首字母小写,后面的每个单词首字母大写 静态称量/常量 全大写 界面开发容器类型:(都是类)JFrame:窗体JPanel: 面板(给窗体分区)布局方式(控制面板内组件摆放的位置)边框布局(BorderLayout)————原创 2021-07-27 21:37:12 · 277 阅读 · 0 评论 -
Java学习笔记(二)——接口
接口一系列概念接口是个啥?接口:对方法的抽象(简而言之,只有方法,没有方法体)。 public void lockDoor(String input);为啥要用接口?有些场景下,假设你需要用到抽象的功能、属性,于是你用到的父类、子类来实现;当子类有自己想要实现的特殊方法,可以对父类进行重写来实现,可但现在你遇到的问题是:你写父类方法的时候有好多种情形,这些都是并列的,是你打算在子类重写的时候用,但是父类怎么办呢?你说:我可以随便写一个嘛,只要子类重写不就好了。这样的确没错,但是这样原创 2021-07-23 20:32:38 · 104 阅读 · 0 评论 -
Java学习笔记(一)——继承
定义继承是干啥的?描述类与类(影响对象与对象)的关系。因为类与类之间中有一些相同之处和不同之处,人们将这些相同的地方集合起来抽象成一个父类,便于使用一些他们共有的属性(不用每个类总是都要重写一遍相同的内容,只需要写不一样的地方就好了,省事儿!)。举个栗子:设置学生为父类,小学生,中学生,大学生都是他的父类。有一些共同属性例如,姓名学号,共同方法:学习、考试。继承有什么内容父类,子类继承关键字extends继承的格式public class 父类名{}publi原创 2021-07-22 15:38:07 · 108 阅读 · 0 评论 -
Java学习笔记(三)——图形绘制
UI —— JFrame 类思路设计一个自己的UI类。有界面初始化函数。 有运行函数,生成一个UI对象,执行初始化方法。初始化函数如何设计用到JFrame类创建窗体(窗口)。界面设计 监听事件——触发功能界面设计JFrame jf = new JFrame("窗体的名字"); //创建一个JFrame对象jf.setSize(1000,800); //窗体的大小jf.setDefa原创 2021-07-24 20:04:37 · 287 阅读 · 0 评论