- 博客(81)
- 收藏
- 关注
原创 Java重修笔记 项目开发流程简介
1. 架构师/项目经理负责设计工作,UML 图、流程图、模块设计、数据库设计、架构选择等。1. 测试工程师编写测试用例,完成单元测试、白盒测试、黑盒测试、集成测试等。2. 需求分析报告(白皮书)包含该项目应该包含的功能,以及客户具体的要求。1. 实施工程师将项目正确的部署到客户的平台,并保证运行正常。1. 需求分析师分析产品需求,出具需求分析报告(白皮书)1. 程序员完成架构师的模块功能并测试。1. 维护系统,发现BUG,项目升级等。3. 需求分析师需要懂技术懂行业。2. 项目的原型开发。
2024-10-20 16:44:06 202
原创 Java重修笔记 UDP 网络通信
2. UDP 数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达,所以 UDP 是不可靠的。3. DatagramPacket 对象封装了 UDP 数据报,在数据报中包含了发送端的 IP 地址和端口号以及接收端的 IP 地址和端口号。1. 类 DatagramSocket 和 DatagramPacket [数据包/数据报] 实现了基于 UDP协议网络程序。4. 调用DatagramSocket的发送、接收方法。
2024-10-19 14:56:24 423
原创 Java重修笔记 netstat 命令、TCP 通信的注意事项
4. netstat -anb 命令必须在管理员权限下才能执行,还可以显示出哪一个程序正在监听。2. netstat-an | more 可以分页显示,空格显示下一页。一个 Socket 的建立就等于一个新的随机的端口。1. netstat -an 可以查看当前主机网络情况,包括。3. 要求在 dos 控制台下执行。
2024-10-18 20:02:40 277
原创 Java重修笔记 InetAddress 类和 Socket 类
异常:UnknownHostException - 如果没有找到 host IP地址,或者是否为全局IPv6地址指定了scope_id。4. Socket 允许程序把网络连接当成一个流,让数据在两个 Socket 之间通过 IO 流来传输。1. Socket 被称为套接字,在开发网络应用程序时被广泛采用,以至于成为事实上的标准。5. 主动发起通信的应用程序被称为客户端,等待通信请求的为服务端。2. 通信的两端都要有 Socket,是两台机器间通信的端点。返回值:本地主机的名字和地址。
2024-10-16 06:52:45 491
原创 Java重修笔记 网络的相关概念
2. TCP/IP 协议:Transmission Control Protocol 传输控制协议(网络通讯协议),是 Internal 国际互联网的基础,由。2. 表现形式:两个字节即 [0, 65535] 之间的整数,不过 [0, 1024] 已被其他网络程序提前占用,尽量不要再去使用。应用层(应用层、表示层、会话层)---> 传输层 ---> 网络层 ---> 物理+数据链路层。5. IP 地址的组成 = 网络地址(前三个字节)+ 主机地址(后一个字节)(5)传输完毕后需要释放已建立的连接,故而。
2024-10-16 05:42:07 430
原创 Java重修笔记 第六十七天 坦克大战(完结)
判断两个坦克是否重叠,8个状态直接烧脑,根据坦克的行进方向和来判断4个边共8个点,将 this 的 x 和 y 分别做出限制,而 enemy 又有上下和左右两种状态,光判断的 if 语句就写了16个,这是最难的部分,我单独写了2天都没写出来,只是模糊的感觉到和方向有关很复杂,不知道什么方向该判断那条边,直到现在都有点蒙的,不过好歹学会了判断两个矩形是否重叠的方法。总结:收获很大,反复刷了有三四遍,几乎把前面学习到的知识全部串联起来了,学不烦看不厌,独此一家了。6. IO 流存储数据意识。
2024-10-14 12:50:16 363
原创 Java重修笔记 第六十五天 IO 流 - 打印流、PrintStream 和 PrintWriter、properties 类
说明:底层调用的是 HashTable 的 put() 方法,不过将 key 和 value 的类型限制为 String。comments - 属性列表的描述,会打印到该配置文件的第一行。comments - 属性列表的描述,会打印到该配置文件的第一行。2. 字节打印流和字符打印流都是包装流,字节打印流是 FilterOutputStream 类的子类。返回值:key 对应的 value 值,若文件中没有对应的键值对,则返回 null。参数:key - 要放入此属性列表的关键字。
2024-10-11 01:29:45 637
原创 Java重修笔记 第六十四天 坦克大战(十四)IO 流 - 标准输入输出流、InputStreamReader 和 OutputStreamWriter
本质上是一个OutputStream,对应显示器,不过被包装成了PrintStream,表示在显示器上输出。参数:out - 一个 OutputStream 子类下的输出流。本质上是一个InputString,对应键盘,表示从键盘输入。参数:in - 一个 InputStream 子类下的输入流。1. 为了解决使用读写源文件时出现的乱码问题(字符编码不一致),引出转换流。说明:不管包装了多少个流,只需要关闭最外层的流就行。,如果不关闭或刷新流,东西写不进去。是 Writer 的子类,可以。
2024-10-10 01:24:19 881
原创 Java重修笔记 第六十三天 坦克大战(十三)IO 流 - ObjectInputStream 和 ObjectOutputStream、对处理流的细节整理
InvalidClassException - 类的序列化版本与从流中读取的类描述符的类型不匹配,或者在加载序列化类的过程中找不到该类。OptionalDataException - 没有读取完前面的元素,或者前面的元素使用的readXXX方法读错了原始数据。反序列化读取顺序,必须和序列化顺序一致,如果要调用该类的特有方法需要获得该类的定义,并向下转型。5. 序列化对象时,该对象的所有属性也都必须实现序列化接口,除了static 和 transient。参数:obj - 要写入的对象。
2024-10-09 05:46:15 404
原创 Java重修笔记 第六十二天 坦克大战(十二)IO 流 - BufferedInputStream 和 BufferedOutputStream、序列化和反序列化
3. 要让对象支持序列化机制,必须实现两个接口之一:Serializable 或者 Externalizable。2. 反序列化就是在恢复数据时,1. 序列化就是在保存数据时,
2024-10-09 03:33:29 205
原创 Java重修笔记 第六十一天 坦克大战(十一)IO 流 - 节点流和处理流、BufferedReader 和 BufferedWriter
3. 处理流(包装流)对节点流进行包装,使用的是修饰器设计模式,通在处理流类中定义一个父类的 reader/writer ,调用相关方法来操作传入的对应子类,而包装流则不会与数据源直接相连。2. 处理流是经过包装过后的节点流,也叫包装流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。1. 修饰器模式强调的是增强自身,通过增强类的方法来调用原有类的方法,调用时不改变原有类的方法,只是。2. 代理模式通过实现目标类的接口实现静态或动态的代理,通过继承或实现原有类,
2024-10-07 02:55:04 987
原创 Java重修笔记 第六十天 坦克大战(十)IO 流 - FileReader 和 FileWriter
一旦流已关闭,进一步的read(),ready(),mark(),reset()或skip()调用将抛出IOException。异常:FileNotFoundException - 如果命名文件不存在,是一个目录,而不是常规文件,或者由于某些其他原因无法打开读取。异常:FileNotFoundException - 如果命名文件不存在,是一个目录,而不是常规文件,或者由于某些其他原因无法打开读取。FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件。
2024-10-05 05:21:27 832
原创 Java重修笔记 第五十九天 坦克大战(九)IO 流 - FileInputStream 和 FileOutputStream
说明:append 为 true 时,文件写入是以追加的方式写入,append 为 false 时,文件写入是以覆盖的方式写入(不写默认覆盖),且如果指定的文件路径不存在时会创建该文件。参数:b - 要写入的目标字节数组 off - 数据中的起始下标偏移量 len - 要写入的长度。说明:向目标文件以构造器制定的形式写入 b 中的数据,从 off 下标开始写入 len 长度的数据。异常:IOException - 发生 IO 错误时会抛出此异常。
2024-09-26 19:26:44 980
原创 Java重修笔记 第五十八天 坦克大战(八)IO 流
文件就是保存数据的地方,既可以保存视频,也可以保存声音、图片等等文件在程序中是以流的形式来操作的1. 输入流:数据从数据源(文件)到 程序(内存)之间的路径2. 输出流:数据从程序(内存)到 数据源(文件)之间的路径。
2024-09-25 11:28:32 437
原创 Java重修笔记 第五十七天 坦克大战(七)多线程基础 - 编程练习
【代码】Java重修笔记 第五十七天 坦克大战(七)多线程基础 - 编程练习。
2024-09-16 07:26:20 427
原创 Java重修笔记 第五十六天 坦克大战(六)多线程基础 - 线程同步、死锁
多线程编程中,一些敏感数据可能会被多个线程同时访问造成数据混乱(例如票数),使用线程同步机制,通过锁对象(对象实例或类实例)的方式来保证该段代码在任意时刻,最多只能由一个线程来访问,从而保证了数据的安全性。多个线程都占用了对方的锁资源,即 A 线程想要 B 线程持有的锁资源,而 B 线程想要 A 线程持有的锁资源,且双方互不释放,就会导致死锁的发生。运行结果:(结果不固定)运行结果:(结果不固定)运行结果:(结果不固定)运行结果:(结果不固定)运行结果:(结果不固定)运行结果:(结果不固定)
2024-09-16 04:58:03 861
原创 Java重修笔记 第五十五天 坦克大战(五)多线程基础
尝试将此线程让出 CPU 资源去执行其他线程,若CPU资源不紧张,则可能礼让不成功,是否礼让取决于 CPU 同一调度。将调用这个方法后将该线程标记为守护线程,当其他所有线程全部退出后,只剩下守护线程时,守护线程线程自动退出。一般为工作线程服务,只有当所有的用户线程结束后,守护线程最后才结束。也叫工作线程,只有当该线程执行完毕,或者以外部通知的方式才会结束。将该线程标记为守护线程,只有当其他用户线程全部退出以后,此线程自动最后退出。正在等待另一个线程执行特定动作的线程处于此状态。尚未启动的线程处于此状态。
2024-09-14 06:18:59 927
原创 Java重修笔记 第五十四天 坦克大战(四)多线程基础
当点击运行按钮运行程序时,就相当于启动了一个进程,虚拟机进入 mian 方法后会开启一个名为 mian 的主线程,main 方法体中创建一个线程对象,调用该线程对象的 start 方法又创建一个子线程,只有调用线程对象 start 方法才能创建出一个子线程,子线程不影响主线程的执行,如果只调用线程对象的 run 方法,那就不会创建新线程,还是在主线程中运行,阻塞主线程直到 run 方法执行完毕。主线程结束后并不会影响进程的结束,只有当该进程下的所有线程全部结束后,该进程才会结束。
2024-09-12 22:49:56 1016
原创 Java重修笔记 第五十四天 坦克大战(三)事件处理机制
(3)keyReleased 方法监听抬起动作,当某个键松开后触发。在画框类的构造方法中加入 addKeyListener(mp);(2)keyPressed 方法监听按下动作,当按键按下后触发。(1)keyTyped 方法监听字符输出,当字符输出后触发。
2024-09-12 01:43:45 309
原创 Java重修笔记 第五十四天 坦克大战(二)常用的绘图方法、画出坦克图形
参数:x - 要绘制的椭圆的左上角的 x坐标。y - 要绘制的椭圆的左上角的 y坐标。参数:x - 要填充的椭圆的左上角的 x坐标。y - 要填充的椭圆的左上角的 y坐标。参数:x - 要绘制的矩形的 x坐标。y - 要绘制的矩形的 y坐标。width - 要绘制的矩形的宽度。height - 要绘制的矩形的高度。参数:x - 要填充的矩形的 x坐标。y - 要填充的矩形的 y坐标。width - 要填充的矩形的宽度。y2 - 第二点的 y坐标。注:g.drawString 方法的横纵坐标指的是字体的。
2024-09-11 22:23:48 535
原创 Java重修笔记 第五十三天 坦克大战(一)绘图入门
在 JFrame 框架类中定义一个 JPanel 画板对象作为属性,并在 JFrame 类的构造方法中给 JPanel 画板对象开辟空间,即初始化面板。在 JFrame 框架类的构造方法中初始化好 JPanel 对象后,调用框架类继承过来的add方法,将 JPanel 对象加入到该框架类中。在画板类中调用 paint 方法,并传入一个 Graphics g 对象,通过对 g 对象的操作来实现画画的过程。定义一个框架类,通过继承 JFrame 类来创建一个框架,让 JPanel 画板能够在此框架中显示出来。
2024-09-11 03:19:51 328
原创 Java重修笔记 第五十二天 Junit
User{id=555, age=78, name='小小'}, User{id=456, age=45, name='小三'}, User{id=345, age=66, name='小钟'}, User{id=123, age=23, name='小米'}]2. 在方法上面加上 @Test 并引用 5.X 版本。1. 为了方便程序员测试某一个方法而使用。3. 就能在方法前面看到可运行的按钮。
2024-09-10 01:36:59 358
原创 Java重修笔记 第五十一天 泛型
1. 在类名后面跟上 <泛型列表> 表示该类所使用的使用泛型,具体是什么类型在编译的时候确定2. 可以在属性定义时使用3. 也可以当做返回值E s;V v;this.s = s;return s;this.s = s;
2024-09-10 00:18:55 419
原创 Java重修笔记 第五十天 HashSet 和 TreeSet 的去重机制比较
通过运算得到 key ,也就是该对象的哈希值,再通过哈希值得到该对象在 table 表上的索引位置,若该位置上没有链表数据就直接存放,若有数据则调用 equals() 方法一个一个比较,比较到末尾仍没有重复的则直接插入到链表末尾,如果有重复数据就不插入。2. TreeSet 的去重机制:通过在构造方法中传入一个 Comparator 比较器进行比较,在比较器中自定义比较规则,返回一个整数,若返回0,则代表比较的两个对象是相同的元素,就不会加入到 TreeSet 集合中。
2024-09-08 10:13:27 258
原创 Java重修笔记 第四十九天 Collections 工具类
将集合自然排序,该 List 集合元素必须实现Comparable接口。根据自定义的比较器对 List 集合进行比较。将集合里的元素顺序打乱。反转集合中元素的顺序。
2024-09-06 18:08:50 391
原创 Java重修笔记 第四十八天 TreeSet 类、TreeMap 类
如果根据比较器比较出的结果是相同的,即 compare() 方法返回0的话,判定相同的元素则不会添加到 TreeSet 中,这点尤为重要!4. 可以在构造器中传入一个 Comparator 比较器来手动制定比较规则,之后传入的数据会根据改规则自动进行比较排序,3. TreeSet 类实现了 Set 接口,所以有着 Set 接口的特性,例如添加的值不可重复。经过比较器比较,相同的 key 添加进去,会把旧的 value 替换为新的 value。3. 如果添加的是字符串或数字,它们。
2024-09-06 15:01:51 360
原创 Java重修笔记 第四十七天 HashTable 类、Properties 类、如何选择集合
2. 因为是 HashTable 的子类,所以继承 HashTable 的所有特性,线程不安全,但效率高,可以存储 null 的键和值。1. Properties 类继承自 Hashtable 类并且实现了 Map 接口,也是使用一种键值对的形式来保存数据。无序:HashSet 类(底层是HashMap,数组 + 链表 + 红黑树的哈希表)键无序:HashMap 类(数组 + 链表 + 红黑树的哈希表)1. HashTable 线程安全,但效率较低,不可以存储 null 的键和值。
2024-09-06 11:36:27 269
原创 Java重修笔记 第四十六天 Map 接口、HashMap 类
6. Key-Value 是放在 HashMap$Node 中的,又因为 Node 类实现了 Map.Entry 接口,所以有些书上也说 一对 Key-Value 就是一个 Entry 结点。5. HashMap 的 key 和 value 都可以传入 Object 类型的数据, 但常用 String 类型的数据来当做 key。添加一组新的键值对,如果 key 的值冲突,则会将就得 value 值替换为新的 value 值。1. 增强for循环取出所有的 key ,再通过 key 取 value。
2024-09-04 21:06:06 483
原创 Java重修笔记 第四十五天 LinkedHashSet 类
3. LinkedHashSet 根据元素的 hashCode 值来决定元素在 table 数组上的存储位置,同时使用链表结构来维护元素的次序(after 引用指向下一个插入的结点,而 before 引用指向上一个插入的结点),这使得元素添加顺序和取出顺序是一样的。5. LinkedHashSet 数组是 HashMap$Node[] ,但里面实际存放的类型为 LinkedHashMap$Entry,它俩是继承关系。6. 其扩容逻辑和树化逻辑和 HashSet 一样,因为都是调用相同的方法。
2024-08-29 03:49:17 189
原创 Java重修笔记 第四十四天 HashSet 添加元素规则、树化规则和扩容规则
1. 在Java8中,树化规则是,如果其中一条链表的元素个数超过 TREEIFY_THRESHOLD(默认是 8),并且 table 的大小 >= MIN TREEIFY_CAPACITY(默认64),满足这两点后就会进行树化(转成红黑树)5. 如果有,则调用对象的 equals() 方法逐一进行比较,如果有相同的,就放弃添加,如果都不相同,则添加到最后,如果这条链表的元素个数超过 TREEIFY_THRESHOLD(默认是 8),则会尝试树化。2. 添加一个元素时,先得到 hash 值再转成索引值(
2024-08-28 04:40:29 211
原创 Java重修笔记 第四十三天 Set 集合、HashSet 类
3. HashSet 不保证元素是有序的,取决于hash之后,再确定索引的结果(即不保证存放元素的顺序和取出顺序一致)2. Set 接口也是 Collection 的子接口,所以继承了 Collection 的方法。3. Set 接口的遍历方式有两种,迭代器和增强 for 循环,但是不能使用索引遍历。1. 底层是一个 HashMap,可以把 HashSet 看成 HashMap。添加元素,如果此元素已经存在,则返回false。删除元素,删除成功返回true。查询元素,若存在返回true。
2024-08-28 02:38:44 243
原创 Java重修笔记 第四十二天 LinkedList 类、ArrayList 和 LinkedList 比较
4. 双向链表只需要操作 prev 和 next 的指向就可以完成添加的删除操作,不存在数组扩容和数据前移的情况,所以 LinkedList。1. 查询和修改的操作多就用 ArrayList , 修改和删除的操作多就用 LinkedList。增加和删除的效率高,因为 LinkedList 只需要修改指针指向即可,不存在扩容。修改和查询的效率低,因为 LinkedList 要从头结点一个一个遍历才能找到。增加和删除的效率低,因为 ArrayList 要进行扩容。删除链表中指定位置的元素。
2024-08-25 21:42:01 566
原创 Java重修笔记 第四十一天 ArrayList的扩容机制、ArrayList和Vector的区别
1. ArrayList 中维护了一个 Object 类型的数组 elementData,其数据就存放在里面。无参构造默认0,第一次扩容为10,以后每次按1.5倍扩容。无参构造默认10,以后每次按2倍扩容。有参构造按1.5倍扩容;有参构造按2倍扩容;
2024-08-24 01:07:18 197
原创 Java重修笔记 第四十天 List集合、ArrayList集合
返回从 fromIndex (包含)到 toIndex (不包含)的元素集合,左开右闭。4. ArrayList 的方法没有 synchronized 修饰,是线程不安全的,效率比较高。1. ArrayList 是 List 的实现类,继承 List 接口的所有方法。返回指定对象在集合中首次出现的位置,若找不到则返回-1。将 index 位置的元素替换为新的元素。2. ArrayList 可以接受一个 null 的元素。在 index 位置上插入将指定元素。即添加的顺序和取出的顺序是一致的。
2024-08-23 17:31:37 349
原创 Java重修笔记 第三十九天 集合的体系、Collection方法、迭代器遍历集合、增强for循环遍历集合
判断该集合是否存在下一个元素,如果不存在下一个元素,则返回ture。1. for(用来接收的变量 : 目标集合) { ...... }如果此集合包含指定集合中的所有元素,则返回true。添加元素,添加基本数据类型的元素有自动装箱的过程。添加一个集合到末尾,添加成功返回ture。判断集合是否为空,如果为空返回ture。返回迭代的下一个元素,返回Object。删除指定元素,删除成功返回true。查询指定元素,查询成功范围true。2. 增强for循环本质是一个简化版的迭代器遍历。返回集合中元素的个数。
2024-08-23 15:53:08 293
原创 Java重修笔记 第三十七天 日期类
1. Calendar是一个抽象类,构造器是私有的,通过静态方法 getInstance() 来获取实例。2. 为特定数据提供了获取方法,例如TEAR、MONTH、DAT_OF_MONTH等。2. 通过 SimpleDateFormat 对象来格式化时间的输出。1. 通过 new 一个 Date 对象来获取当前时间。
2024-08-18 23:12:18 185
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人