- 博客(152)
- 问答 (1)
- 收藏
- 关注
原创 【Python】——使用python实现GUI图书管理系统:Tkinter+SQLite实战
本文将通过一个完整的python项目——图书管理系统,演示如何利用Tkinter构建GUI 界面,结合SQLite数据库实现增删改查功能。代码简洁易懂,适合python初学者学习和二次开发。
2025-03-04 15:50:20
608
原创 CentOS7 安装MySQL
按照以上步骤,你应该能够在CentOS 7系统上成功下载并安装MySQL。如果遇到任何问题,请检查日志文件以获取更多信息,并参考MySQL的官方文档进行故障排除。如果遇到公钥不匹配,需要更新GPG密钥,执行以下命令,过期可前往repo.mysql.com获取新的密钥。这个操作用于设置简单的数据库密码,降低MySQL的安全性。
2024-12-25 17:25:40
804
原创 【Java】—— 网络编程:网络通讯三要素--IP地址和域名、端口号、通信协议
Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
2024-10-17 17:54:15
963
原创 【Java】—— File类与IO流:对象流与数据流
在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常(InvalidCastException)。运行test4方法,从文件中读取到对象中。如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,该类必须实现。说明:对象流的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
2024-10-16 16:06:19
712
原创 【Java】—— File类与IO流:处理流之转换流
Unicode在很长一段时间内无法推广,直到互联网的出现,为解决Unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现。由于IDEA设置中针对项目设置了UTF-8编码,当读取Windows系统中创建的文本文件时,如果Windows系统默认的是GBK编码,则读入内存中会出现乱码。使用指定的字符集将字符编码为字节。,此外数学符号、罗马希腊的字母、日文的假名们都编进去了,这就是常说的"全角"字符,而原来在127号以下的那些符号就叫"半角"字符了。
2024-10-16 00:00:51
1266
原创 【Java】—— File类与IO流:处理流之缓冲流
查询API,缓冲流读写方法与基本的流是一致的,我们通过复制大文件(121MB),测试它的效率。字符缓冲流的基本方法与普通字符流调用方式一致,不再阐述,我们来看它们具备的特有方法。其实在开发中,只需要关闭最外层的流即可,因为在关闭外层流时,内层的流也会被关闭。涉及到嵌套的多个流时,如果都显式关闭的话,需要先关闭外层的流,再关闭内层的流。缓冲流的基本原理:在创建流对象时,内部会创建一个缓冲区数组(缺省使用。:创建一个 新的字节型的缓冲输入流。: 创建一个新的字节型的缓冲输出流。// 创建字节缓冲输出流。
2024-10-15 17:10:34
1035
原创 【Java】—— File类与IO流:FileReader\FileWriter、FileInputStream\FileOutputStream
从输入流中读取一些字符,并将它们存储到字符数组 cbuf中,从cbuf[off]开始的位置存储。如果已经到达流末尾,没有数据可读,则返回-1。:从输入流中读取一些字节数,并将它们存储到字节数组 b中,从b[off]开始存储,每次最多读取len个字节。:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。
2024-10-11 01:08:05
1296
原创 【Java】—— File类与IO流:File类的实例化与常用方法
File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。File对象可以作为参数传递给流的构造器。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
2024-10-10 12:46:55
980
原创 【Java】 —— 数据结构与集合源码:Vector、LinkedList在JDK8中的源码剖析
查找和添加(尾部添加)操作效率高,时间复杂度为O(n)(有可能添加操作是O(1))链表底层的物理结构是链表,因此根据索引访问的效率不高,即查找元素慢。删除和插入操作效率低,时间复杂度 为O(n)。如果开发中,大体确认数组的长度,则推荐使用ArrayList(int capacity)这个构造器,避免底层的扩容、复制数组的操作。2、ArrayList底层使用数组结构:查找和添加(尾部添加)操作效率高,时间复杂度为O(1)。LinkedList底层使用双向链表结构:删除和插入操作效率高,时间复杂度为O(1)。
2024-10-09 16:07:05
747
原创 【Java】—— 数据结构与集合源码:ArrayList在JDK7和JDK8中的源码解析
因为很多方法的返回值是ArrayList类型,需要返回一个ArrayList的对象,例如:后期从数据库查询对象的方法,返回值很多就是ArrayList。,而ArrayList在JDK 6.0 及之前的版本也是10,JDK8.0 之后的版本ArrayList初始化为长度为0的空数组,之后在添加第一个元素时,再创建长度为10的数组。数组的初始化容量,如果在构建ArrayList与Vector的集合对象时,没有显式指定初始化容量,那么Vector的内部数组的。进行存储的,例如,存元素的顺序是11、22、33。
2024-10-09 15:29:39
938
原创 【Java】—— 数据结构与集合源码:数据结构概述与线性表、二叉树
*单链表中的节点。节点是单向链表中基本的单元。每一个节点Node都有两个属性:一个属性:是存储的数据。另一个属性:是下一个节点的内存地址。*/// 存储的数据// 下一个节点的内存地址Node next;/*链表类(单向链表)*/// 头节点// 向链表中添加元素的方法(向末尾添加)// 创建一个新的节点对象// 让之前单链表的末尾节点next指向新节点对象。// 有可能这个元素是第一个,也可能是第二个,也可能是第三个。// 说明还没有节点。
2024-10-09 01:07:09
859
原创 【Java】—— 泛型:自定义泛型类、泛型方法
1、这种语法形式就叫泛型。的形式我们称为类型参数,这里的"类型"习惯上使用T表示,是Type的缩写。即:。:代表未知的数据类型,我们可以指定为,,等。类比方法的参数的概念,我们把,称为类型形参,将称为类型实参,有助于我们理解泛型这里的T,可以替换成K,V等任意字母。2、在哪里可以声明类型变量声明类或接口时,在类名或接口名后面声明泛型类型,我们把这样的类或接口称为泛型类或泛型接口。
2024-10-05 23:32:13
2525
原创 【Java】—— 泛型:泛型的理解及其在集合(List,Set)、比较器(Comparator)中的使用
举例1:中药店,每个抽屉外面贴着标签举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签举例3:家庭厨房中:Java中的泛型,就类似于上述场景中的标签。
2024-10-05 20:40:29
1651
原创 【Java】—— 集合框架:集合框架随堂复习
java.util.Collection:存储一个一个的数据|-----子接口:List:存储有序的、可重复的数据 ("动态"数组)|---- ArrayList(主要实现类)、LinkedList、Vector|-----子接口:Set:存储无序的、不可重复的数据(高中学习的集合)|---- HashSet(主要实现类)、LinkedHashSet、TreeSet。
2024-10-05 14:14:28
960
原创 【Java】—— 集合框架:Collections工具类的使用
int binarySearch(List list,T key,Comparator c)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定。int binarySearch(List list,T key)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且必须是可比较大小的,即支持自然排序的。sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序。
2024-10-05 13:33:47
1393
原创 【Java】—— 集合框架:Map接口的常用方法和主要实现类HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
Map与Collection并列存在。用于保存具有映射关系的数据:key-valueCollection集合称为单列集合,元素是孤立存在的(理解为单身)。Map集合称为双列集合,元素是成对存在的(理解为夫妻)。Map 中的 key 和 value 都可以是任何引用类型的数据。但常用String类作为Map的“键”。HashMapTreeMap和。其中,HashMap是 Map 接口使用频率最高的实现类。HashMap是 Map 接口使用频率最高的实现类。HashMap是线程不安全的。
2024-10-03 23:57:08
1557
原创 【Java】—— 集合框架:Collection子接口:Set不同实现类的对比及使用(HashSet、LinkedHashSet、TreeSet)
Set接口是Collection的子接口,Set接口相较于Collection接口没有提供额外的方法Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。Set集合支持的遍历方式和Collection集合一样:foreach和Iterator。Set的常用实现类有:HashSet 是 Set 接口的主要实现类,大多数时候使用 Set 集合时都使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存储、查找、删除性能。
2024-10-03 14:18:35
693
原创 【Java】—— 集合框架:List接口常用方法与List接口的实现类
举例:List集合存储数据,就像银行门口客服,给每一个来办理业务的客户分配序号:第一个来的是“张三”,客服给他分配的是0;) 方法返回的 List 集合,既不是 ArrayList 实例,也不是 Vector 实例。注意:在JavaSE中List名称的类型有两个,一个是java.util.List集合接口,一个是java.awt.List图形界面的组件,别导错包了。定义学生类,属性为姓名、年龄,提供必要的getter、setter方法,构造器,toString(),equals()方法。
2024-10-02 20:39:31
1376
原创 【Java】—— 集合框架:Collection接口中的方法与迭代器(Iterator)
一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用数组存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点数组初始化以后,长度就确定了。数组中的添加的元素是依次紧密排列的有序的,可以重复的。数组声明的类型,就决定了进行元素初始化时的类型。不是此类型的变量,就不能添加。可以存储基本数据类型值,也可以存储引用数据类型的变量数组在存储数据方面的弊端数组初始化以后,长度就不可变了,
2024-10-02 00:06:30
1183
原创 【Java】—— 常用类和基础API:数学相关类Math
返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。,Long类也是有限的,最大为2^63-1。:返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。:返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。:返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
2024-10-01 17:44:11
610
原创 【Java】—— 常用类和基础API:系统相关类System
时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。: 该方法的作用是获得系统中属性名为key的属性对应的值。由于该类的构造器是private的,所以无法创建该类的对象。System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。此方法返回的值可能随时间的推移而变化,这取决于主机环境。: 返回与当前 Java 应用程序相关的运行时对象。,所以也可以很方便的进行调用。
2024-10-01 17:33:12
580
原创 【Java】—— 常用类和基础API:JDK8:新的日期时间API
由于地球自转的不均匀性和长期变慢性(主要由潮汐摩擦引起的),会使世界时(民用时)和原子时之间相差超过到±0.9秒时,就把协调世界时向前拨1秒(负闰秒,最后一分钟为59秒)或向后拨1秒(正闰秒,最后一分钟为61秒);说明:新的 java.time 中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。(了解)本地化相关的格式。// 本地化相关的格式。
2024-09-30 00:46:17
697
原创 【Java】—— 常用类和基础API:JDK8之前日期时间API的使用:Date、SimpleDateFormat、Calendar
在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。toString(): 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。将控制台获取的年月日(比如:2022-12-16)的字符串数据,转换为java.sqL.Date的对象。
2024-09-28 20:09:17
938
原创 【Java】—— 常用类和基础API:String、StringBuffer、StringBuilder
因为字符串对象设计为不可变,那么所以字符串有常量池来保存很多常量对象。JDK6中,字符串常量池在方法区。JDK7开始,就移到堆空间,直到目前JDK17版本。
2024-09-28 15:34:36
807
原创 【Java】—— 多线程:随堂复习
如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。> join(): 在线程a中通过线程b调用join(),意味着线程a进入阻塞状态,直到线程b执行结束,线程a才结束阻塞状态,继续执行。分时调度:所有线程`轮流使用` CPU 的使用权,并且平均分配每个线程占用 CPU 的时间。- public Thread(String name) :分配一个指定名字的新的线程对象。线程(thread):进程可进一步细化为线程,是程序内部的一条执行路径。同步监视器(保证唯一性)
2024-09-27 16:10:38
800
原创 【Java】—— 多线程:线程的创建方式3、4___实现Callable与线程池
如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。那么有没有一种办法使得线程可以复用,即执行完一个任务,并不被销毁,而是可以继续执行其他的任务?缺点:在获取分线程执行结果的时候,当前线程(或是主线程)受阻塞,效率较低。:一个线程池的工厂类,通过此类的静态工厂方法可以创建多种类型的线程池对象。:创建一个可根据需要创建新线程的线程池。
2024-09-27 01:01:35
766
原创 【Java】—— 多线程:线程间的通信机制与生产者消费者案例
要解决该问题,就必须让生产者线程在缓冲区满时等待(wait),暂停进入阻塞状态,等到下次消费者消耗了缓冲区中的数据的时候,通知(notify)正在等待的线程恢复到就绪状态,重新开始往缓冲区添加数据。比如:线程A用来生产包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,此时B线程必须等到A线程完成后才能执行,那么线程A与线程B之间就需要线程通信,即——在有多个线程进行等待时,如果需要,可以使用。,比如去争夺锁,但这并不是故事的全部,线程间也会有协作机制。
2024-09-26 03:16:28
1188
原创 【Java】—— 多线程:线程安全的懒汉式_ 死锁_ ReentrantLock的使用
锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。ReentrantLock类实现了 Lock 接口,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。Lock是显式锁(手动开启和关闭锁,别忘记关闭锁),synchronized是隐式锁,出了作用域、遇到异常等自动解锁。不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。
2024-09-25 17:42:46
749
原创 【Java】—— 多线程:线程安全问题及解决
也就是说在某个线程修改共享资源的时候,其他线程不能修改该资源,等待修改完毕同步之后,才能去抢夺CPU资源,完成对应的操作,保证了数据的同步性,解决了线程不安全的现象。同步机制的原理,其实就相当于给某段代码加“锁”,任何线程想要执行这段代码,都要先获得“锁”,我们称它为同步锁。”对象之后,”同步锁“对象就会记录这个线程的ID,这样其他线程就只能等待了,除非这个线程”释放“了锁对象,其他线程才能重新获得/占用”同步锁“对象。同步锁对象可以是任意类型,但是必须保证竞争“同一个共享资源”的多个线程必须使用同一个“
2024-09-21 22:00:28
954
原创 【Java】—— 多线程:Thread类的常用结构与多线程的生命周期
如果处于就绪状态的线程获得了CPU资源时,开始执行run()方法的线程体代码,则该线程处于运行状态。,让系统的线程调度器重新调度一次,希望优先级与当前线程相同或更高的其他线程能够获得执行机会,但是这个不能保证,完全有可能的情况是,当某个线程调用了yield方法暂停之后,线程调度器又将其调.度出来重新执行。程序只能对新建状态的线程调用start(),并且只能调用一次,如果对非新建状态的线程,如已启动的线程或已死亡的线程调用start()都会报错IllegalThreadStateException异常。
2024-09-21 17:17:28
1102
原创 【Java】—— 多线程:相关概念、创建和启动线程
Java语言的JVM允许程序运行多个线程,使用类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Thread类的特性每个线程都是通过某个特定Thread对象的run()方法来完成操作的,因此把run()方法体称为线程执行体。通过该Thread对象的start()方法来启动这个线程,而非直接调用run()要想实现多线程,必须在主线程中创建新的线程对象。
2024-09-21 15:05:42
1183
原创 【Java】—— Java异常处理 总结
1. 什么是异常?指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。2. 异常的抛出机制Java中把不同的异常用不同的类表示,一旦发生某种异常,就`创建该异常类型的对象`,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。3. 如何对待异常对于程序出现的异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是程序员在编写程序时,
2024-09-20 15:39:34
1006
原创 【Java】—— 项目三:开发团队人员调度系统
•模拟实现一个基于文本界面的开发团队调度系统•熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧•主要涉及以下知识点:Ø类的继承性和多态性Ø对象的值传递、接口Østatic和final修饰符Ø特殊类的使用:包装类、抽象类、枚举类Ø异常处理。
2024-09-20 01:33:59
1190
原创 【Java】—— 异常处理
男主角小明每天开车上班,正常车程1小时。但是,不出意外的话,可能会出现意外。出现意外,即为异常情况。我们会做相应的处理。如果不处理,到不了公司。处理完了,就可以正常开车去公司。在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式问题读取文件是否存在网络是否始终保持通畅等等。异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。
2024-09-18 16:01:57
1528
原创 【Java】—— Java面向对象高级:包装类、包装类与基本数据类型的转换
Java提供了两个类型系统,基本数据类型与引用数据类型。使用基本数据类型在于效率,然而当要使用只针对对象设计的API或新特性(例如泛型)包装类(封装类)。有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。
2024-09-16 22:05:12
878
原创 【Java】—— Java面向对象高级:注解(Annotation)
注解(Annotation)是从JDK5.0开始引入,以“@注解名”在代码中存在。例如:@OverrideAnnotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=value” 对中。注解可以在类编译、运行时进行加载,体现不同的功能。
2024-09-16 20:28:30
1127
原创 【Java】—— Java面向对象高级:内部类(InnerClass)
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。如果成员内部类中不使用外部类的非静态成员,那么通常将内部类声明为静态内部类,否则声明为非静态内部类。[修饰符] class 外部类{[其他修饰符] [static] class 内部类{成员内部类作为类的成员的角色和外部类不同,Inner class还可以声明为private或protected;可以调用外部类的结构。
2024-09-13 22:37:43
974
原创 【Java】—— Java面向对象高级:接口(interface)
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能...”的思想。继承是一个"是不是"的is-a关系,而接口实现则是 "能不能"的has-a关系。例如:电脑都预留了可以插入USB设备的USB接口,USB接口具备基本的数据传输的开启功能和关闭功能。你能不能用USB进行连接,或是否具备USB通信功能,就看你能否遵循USB接口规范例如:Java程序是否能够连接使用某种数据库产品,那么要看该数据库产品能否实现Java设计的JDBC规范接口的本质是契约、标准、规范,就像我们的法律一样。
2024-09-13 15:55:30
1336
原创 【Java】—— Java面向对象高级:抽象类与抽象方法(或abstract关键字)
举例1:随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。举例2:我们声明一些几何图形类:圆、矩形、三角形类等,发现这些类都有共同特征:求面积、求周长。那么这些共同特征应该抽取到一个共同父类:几何图形类中。但是这些方法在父类中又无法给出具体的实现,而是应该交给子类各自具体实现。那么父类在声明这些方法时,就只有方法签名,没有方法体,我们把没有方法体的方法称为。
2024-09-12 21:40:13
1165
为什么这个程序走完输出是-1,当y=0的时候不是已经停了吗,输出不应该是0吗
2022-01-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人