自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 Java学习46-Java 流(Stream)、文件(File)和IO - 数据流 和 对象流的使用

Q:如果想要将内存中定义的变量(包括基本数据类型或引用数据类型)保存在文件中,怎么办?A: 可以使用数据流or对象流进行 [变量->文件] 存储。

2024-04-16 17:23:16 737

原创 Java学习45-Java 流(Stream)、文件(File)和IO - 转换流InputStreamReader/OutputStreamWriter的使用

UTF就是Unicode字符集,UTF-8,UTF-16,UTF-32是三种将数字转换到程序数据的编码方案,UTF-8是每次8个位传输数据,UTF-16是每次16个位,其中UTF-8是互联网上使用最广的一种Unicode的实现方式。在内存中有一个’a’或者一个中文汉字,他们都是按照char的方式进行存储,此时它们在内存中都是按照两个字节方式来存储的,当这个’a’存储到文件中时,就会按照文件编码的方式占用对应的存储空间,无论那种编码方式,存在文件时都只占用一个字节。当编码是GBK,它存入文件时占用两个字节。

2024-04-14 20:27:59 534

原创 Ubuntu安装的Joplin升级 如何update

用刚刚下刚刚下载的Joplin.AppImage新文件对这个路径下的Joplin.AppImage直接覆盖即可(可以留着之前的Joplin.AppImage文件,改个名字比如改成14_04_2024_Joplin.AppImage,用做备份)。等待下载完毕,直接替换ubuntu已经安装好的Joplin(目前运行的Joplin)的Joplin.AppImage执行文件即可。这样就能找到Joplin文件Joplin.AppImage安装的具体位置,本例中,查阅到Joplin.AppImage路径为。

2024-04-14 14:39:08 291

原创 Java学习44-Java 流(Stream)、文件(File)和IO - BufferedInputStream \ BufferedOutputStream 缓冲流的使用

读取:int read(char[] cbuf/byte[] buffer) : 每次将数据读入到cbuf/buffer数组中,并返回读入到数组中。写出:void write(String str)/write(char[] cbuf):将str或cbuf写出到文件中。举例:使用BufferedReader将sample1.txt中的内容复制给一个新的文件。举例:使用BufferedReader将sample1.txt中的内容复制在控制台上。第1步:创建File的对象,流的对象(包括文件流,缓冲流)

2024-04-12 17:21:03 278

原创 Java学习43-Java 流(Stream)、文件(File)和IO - FileInputStream \ FileOutputStream的使用

对于字节流(byte[]),通常是用来处理非文本文件的。但是,如果涉及到文本文件的复制操作,也可以使用字节流。非文本文件: .doc .xls .jpg .pdf .mp3 .mp4 .avi等。(适用于非文字类,比如图片/audio/video之类的)对于字符流,只能用来操作文本文件,不能用来处理非文本文件。文本文件: .txt .java .c .cpp .py等。在注意点的基础上,看其他的注意点。输出为:(图片copy成功)

2024-04-10 15:27:56 240

原创 Java学习42-Java 流(Stream)、文件(File)和IO - FileReader\FileWriter的使用

Java程序中,对于数据的输入输出以stream方式进行,可以看作是一种数据的流动。IO流中的IO是Input和Output的缩写,是非常实用的技术,用于处理设备之间的数据传输。读写文件,网络通讯等。(以下视角,都是站在程序(内存)内部角度观察的。输入Input:读取外部数据(磁盘,光盘等存储设备的数据)到程序(内存)中输出Output:将程序(内存)数据输出到磁盘,光盘等存储设备中。

2024-04-10 14:11:01 630

原创 Java学习41-Java 流(Stream)、文件(File)和IO

注意上述 File 对象表示的是一个目录,而不是一个文件,那么调用 length() 方法的结果可能因Java版本和文件系统而异。另外,对于目录调用 length() 可能会返回目录本身的大小(这通常是一个很小的值,因为目录本身只包含元数据,比如权限、时间戳和指向其内容的指针等)。上述代码不变,再次测试。File类中声明了新建,删除,获取名称,重命名等方法,并没有涉及到文件内容的读写操作。注意,最后使用删除directory的方法,需要保证directory里面是空的,否则返回false,文件夹删不掉。

2024-04-04 18:07:24 808

原创 Java学习40-Java 多线程安全:线程池

(这也是真正开发常选择的方式)线程池的好处:提高了程序执行效率(因为线程已经提前创建好了)提高了资源的复用率(因为执行完的线程并未销毁,二是可以继续执行其他的任务)可以设置相关的参数,对线程池中的线程使用进行资源管理。

2024-04-02 14:28:40 152 1

原创 Java学习39-Java 多线程安全:Callable接口

Callable接口能return数值回来,但是不能直接给Thread实例,需要引入中间的FutureTask实例.执行调用过程类似这样。补充,如果想要调出call方法那个返回值,用FutureTask的object调用get方法,即就是。Callable()使用了泛型参数,可以指明具体的call()的返回值类型,更灵活。如果在主线程中需要或许分线程call()的返回值,则此时的主线程是阻塞状态的。call()可以使用throws的方式处理异常,更灵活。call()可以有返回值,更灵活。

2024-04-02 12:49:51 187

原创 Java学习38-Java 多线程安全:线程的通信

线程通信主要涉及三个方法:wait():线程一旦调用执行此方法,就进入等待状态,同时会释放对同步监视器的调用。notify():一旦执行此方法,就会唤醒wait()线程中优先级最高的那个线程。如果被wait()得多个线程优先级相同,就随机唤醒一个)被唤醒的线程从当前被wait的位置继续执行。notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。注意:此三个方法的使用,必须是在同步代码块或同步方法中,即synchronized标记的模块。

2024-04-01 22:28:09 933

原创 Java学习37-Java 多线程安全:死锁

(lock出现的也更晚,理论上讲,后面出的功能肯定比早期的要更先进完善)比如:打麻将时候,A拿着3条在等B抛出7条 B拿着7条在等A抛3条,这俩就死锁了,谁也得不到想要的,卡在这里了。针对条件3:占用部分资源的线程再进一步申请其他资源时,如果在设计的时间内申请不到,就主动施放掉已经占用的资源。不同的线程分别占用对方需要的资源不放弃,都在等着对方放弃自己想要的同步资源,形成了线程的死锁。针对条件4:可以将资源改为线性顺序,申请资源时,先申请序号较小的,这样避免循环等待问题。综上所述,lock要更先进一些。

2024-04-01 08:29:23 312

原创 Java学习36-Java 多线程安全:懒汉式和饿汉式

懒汉式本身是非线程安全的,因为多个线程可能同时检查实例是否为null,并尝试同时创建实例,会导致出现多个实例。为了解决这个问题,需要额外的同步机制,如双重检查锁定(double-checked locking)或静态内部类等方式。而饿汉式最开始就static和final了天生就是线程安全的。懒汉式在类被创建时不立即创建实例,而是在第一次调用方法时才创建实例,实现了延迟加载(非线程安全)。饿汉式直接在最开始就直接创建完毕了(自带安全属性)。

2024-03-31 22:17:09 506

原创 Java学习35-Java 单例Singleton类

但在某些时候,允许其他类自由创建该类的对象可能造成系统性能下降(因为频繁的创建对象,会产生回收对象带来的系统开销问题)提供一个static public方法作为该类的访问点,用于创建该类的对象。此外需要使用一个static 成员变量(保存曾经创建过的那个唯一的对象)。大部分都把类的构造器定义成public,允许任何类自由创建该类的对象。该类的构造器加private修饰,这样把该类的所有构造器隐藏起来。如果我们要求一个类只能创建一个实例,则这个类被称为单例类。该类只能创建一个对象。

2024-03-31 20:34:00 285

原创 Java学习34-Java 多线程Thread 同步方法

说明:如果操作共享数据的代码完整的声明在了一个method方法中,那么我们就可以将此方法声明为同步方法。换言之,synchronized结构块全部包裹在method里,就把这个method叫同步method。说明:如果操作共享数据的代码完整的声明在了一个方法中,那么我们就可以经此方法声明为同步方法即可。第二种方式,同样的卖票例子,使用implements Thread完成同步method。弊端:在操作共享数据时,多线程其实是串行执行的,意味着浪费CPU性能低。静态的同步方法,默认同步监视器是当前类本身。

2024-03-31 18:18:10 183

原创 Java学习33-Java 多线程Thread 多线程安全问题

Thread的生命周期NEWRUNNABLEBLOCKEDWAITINGTERMINATED。

2024-03-31 17:16:03 274

原创 Java学习32-Java 多线程Thread 线程的常用方法

suspend()会导致线程暂停但不释放任何锁资源,其它线程都无法访问被它占用的锁,直到resume().下面的例子中括号里分别用了数字和来定义setPriority(),都是可以使用的,值得注意的是,对于多核CPU,资源抢占获得的优先级在运行结果处并不是十分明显。join():在线程A通过线程B调用join,表示线程A进入阻塞状态,CPU直接去执行线程B,直到线程B执行结束,线程A停止阻塞再继续执行。yield():静态方法,一旦调用,该线程直接释放CPU的执行权(getName():获取线程名。

2024-03-31 15:52:50 235

原创 Java学习31-Java 多线程Thread 线程的创建

如图所示,下面的红框左侧Method Area和Heap就是共享的,浅蓝色的Virtual Machine Stack, Native Method Stack, Program Counter Register是每个thread运行时自己独有的。一个process中的多个thread共享相同的内存单元,他们从同一个堆中分配对象,可以访问相同的变量和对象,但是多个thread操作共享的系统资源可能就会带来安全的隐患。多线程的创建方式二:用户创建实现Runnable接口的类,再在里面重写run方法。

2024-03-31 13:57:13 886

原创 ubuntu内存不足,用Swap扩展增加虚拟内存

Ubuntu内存不足,系统缓慢解决方法

2024-03-21 15:05:14 434

原创 Java学习30-常用类 Date类

比如下面的代码sdf.parse(“2005-09-23 14:24:43”)其中sdf就是SimpleDateFormat类型的object,而sdf.parse内部的String就是按照sdf自定义的时间的格式写的String。年月日时间等都是可以前后打乱顺序写的,后面调用format()输出时,系统就会按照用户写的那个自定义格式输出。x.get(Calendar.MONTH) 注意!x.get(Calendar.HOUR) 注意!java.util.Date 类的一个方法,用于获取日期对象表示的。

2024-03-18 14:23:09 741

原创 Java学习29--常用类 包装类wrapper & 数学类Math

学生中最高分数定义为A级,和最高分相差10分以内定义为A级,和最高分相差20分以内定义为B级,和最高分相差30分以内定义为C级,其余定义为D级。如果还想使用这类方法或者API,就急需能将基本数据类型转换成对应的object的思路,这就是包装类wrapper,其实就是定义了一个基本数据类型对应的object,其中的属性定义源自那个基本数据类型。基本类型使用快速便捷,但是有些方法或API在设计时候,输入预设为object,除了喂进去object之外,没法使用。表示读取vector[i]的具体Object。

2024-03-03 18:40:22 367

原创 Java学习28--常用类 String类和Object类

类class是java中已经定义好的一些模板,用户可以按照他们的样子建立object,这些object直接具有class内的各种功能,用户就可以直接使用。内部类(之前已经讲过,见String类包装类wrapperMathFileDataRandom。

2024-03-03 15:36:29 1034

原创 Java学习27--IDEA常用快捷键

一行上下移move line up/down(same as above): Alt+Shift+up_key/down_key。可以快速生成try catch finally模块的surround with:ctrl+alt+t(我换成了alt+c)选中的结构大小写切换(我的换成了alt+u) ctrl+shift+u。退回(或前进)去前(后)一个编辑的页面 ctrl+alt+左(右)代码自动排齐 alt+l (有些电脑设置的是ctrl+alt+l)跳转去method的方法体 ctrl+alt+b。

2024-03-01 14:32:17 296

原创 Java学习26--枚举类

枚举指的是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的集合。一个简单的程序,一年四季(比较懒惰只写了两季),注意定义enum类时只允许输出,不允许输入所以没有设置set类(同时写了final关键字的variable也不能建立getter结构)。Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。valueOf() 方法也是 Enum 类的一个静态方法,它用于将给定的字符串名称转换为对应的枚举常量。

2024-02-24 20:48:52 291

原创 Java学习25--自定义异常

刚刚建立好了自定义异常class,现在来构建判断异常被激活的method。上一步建立了“通告批评公示内容”,现在来建立一个”通告批评被触发“的规则(这一步一般会出现 if XXX语句)。比如定义了一个叫做checkage的method,位于valid_age_detect class文件之内,checkage method的功能是当age超过130或者小于0时,触发刚才建立的report_age_error class,或者age为正常范围时,就打印输出“正常”。

2024-02-20 17:43:14 927

原创 Java学习24--异常

软件运行过程中的各种意料之外叫做Exception,比如要读取的文件找不到,准备联网发现没网,等着int参数来了个String注意Error和exception不一样,error错的比较猛,一般是直接把JAVA整个搞崩了,比如内存空间异常等等,JVM只好终止线程,这一般都是大错了。Exception一般是程序员脑子暂时抽风了,修修改改程序还能救回来。举例,method a 和b互相无限调用对方,陷入无限循环。运行程序,观察系统输出什么。

2024-02-19 14:07:06 702

原创 Java学习23--内部类

内部类内部类就是在一个class里面定义另一个class,比如在A class 中定义一个 B class,那么B class相对于A class来说就称为内部类,而A类相对于B类就是外部类了。1.成员内部类2.静态内部类3.局部内部类4.匿名内部类。

2024-02-16 13:58:44 198

原创 Java学习22--接口类& Lambda 表达式

Java接口(Interface)是Java编程语言中的一个非常重要的概念。它是一个完全抽象的类,用于定义一组方法,这些方法由类来实现。接口定义了一个契约,即规定了类应该具备哪些方法,但并不实现这些方法的具体细节。normal class一般的类: 只有具体 method implementing执行abstract class抽象类: 具体method implementing和abstract method implementing。

2024-02-15 18:34:06 476

原创 Java学习21--abstract抽象类

在Java中,abstract 是一个关键字,用于定义抽象类abstract class或抽象方法abstract method。abstract class是一种特殊的class,它不能用来建立具体的object,即不能实例化对象。abstract class通常用作其他类的基类,这些child class会提供abstract class中声明的abstract method的具体实现。换言之,abstract抽象类就是搭建大框架用的,各个method具体怎么执行可以不管。先把大结构弄出来再说。

2024-02-15 11:54:15 265

原创 Java学习21--abstract抽象类

在Java中,abstract 是一个关键字,用于定义抽象类abstract class或抽象方法abstract method。abstract class是一种特殊的class,它不能用来建立具体的object,即不能实例化对象。abstract class通常用作其他类的基类,这些child class会提供abstract class中声明的abstract method的具体实现。换言之,abstract抽象类就是搭建大框架用的,各个method具体怎么执行可以不管。先把大结构弄出来再说。

2024-02-14 21:19:12 432

原创 Java学习20-- static关键字总结

在Java中,static 是一个关键字,用于修饰类的成员(包括变量、方法和内部类)。静态变量(Static Variables):也称为类变量。它们不属于任何一个对象实例,而是属于类本身。静态变量在内存中只有一个副本,无论创建多少个对象实例,它们都共享这个静态变量的副本。通常,静态变量用于跟踪与类相关的某些统计信息。count++;静态方法(Static Methods):静态方法属于类,而不是类的任何特定实例。静态方法可以直接通过类名调用,而无需创建类的实例。

2024-02-14 19:14:44 312

原创 Java学习19-- 多态Polymorphism

Java中的多态(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装(Encapsulation)和继承(Inheritance)。多态允许你使用一个接口来表示多种数据类型。在Java中,多态主要体现在以下几个方面:多态的主要好处是提高代码的灵活性和可扩展性。例如,你可以定义一个方法,该方法接受一个父类类型的参数,然后在运行时传递任何子类的对象。这样,你可以在不知道具体子类类型的情况下调用该方法,但方法内部会根据对象的实际类型执行相应的操作。

2024-02-14 13:54:25 471

原创 Java学习18-- Override方法重写【★】

重点:super类 & 方法重写★看不明白多看几遍,记住static优先级>>高于overide需要有继承关系,一般是“子类"重写"父类"的method(同名称,内芯不同)。重写是子类对父类那些允许访问的method实现过程进行重新编写(private method不行), 返回值和形参都不能改变。即外壳不变,核心重写!1.方法名必须相同2.参数列表必须相同3.修饰符:范围可以尽量用大的,但不能进一步写小了 Public > Protected > Default > Private4.抛出的异常

2024-02-13 12:29:13 674

原创 Java学习17-- super类

建立一个叫做kids的class它的上级是human class,从主程序testjan05来调用kids class里面的method my_prt它可以打印输出kids class里的变量name以及this.name和super.name。刚才举例中,介绍了当子类constructor运行时,必然会首先默认跑一遍父类的constructor,那句代码通常是隐藏在子类constructor第一行 写做super();的构造方法,肯定在构造方法的第一个出现,系统会偷偷加上。this:本身调用的这个对象。

2024-02-08 18:40:35 447

原创 Java学习16-- 面向对象学习4&5. 面向对象三大特征&抽象类和接口

提高代码的安全性隐藏代码的实现细节统一接口增加系统的可维护性。

2024-02-07 22:20:22 764

原创 Java学习15-- 面向对象学习3. 对象的创建分析【★】

(本章看不懂多读几遍,弄懂后再往下章看)

2024-02-07 14:33:29 813

原创 Java学习14-- 面向对象学习 2.method方法+constructor构造器解析

method就是仅在召唤时候才动弹的代码块,可以喂给它data或者parameter,也可以不让他有任何返回值;有特定功能的method叫做function修饰符:比如这个public static void main其中的public static就是修饰符返回类型:比如这个public static void main其中的void表示返回值为空,如果这里不是void而是int那么返回值就是int类型的举例//定义了一个叫做testjan05的class。

2024-02-04 18:02:29 753

原创 Java学习13--面向对象学习 1.初识面向对像

面向对象的本质:以class的方式组织编码,用object的组织封装数据。(如果不理解skip这里 先往下看)建立class本质就是抽象,将很多object抽出一些共同点,建立出class。比如医生class,里面可能包含有 工号 性别 姓名 科室等。class带着object们提取的共同点,制作出包含这些object的field的模板,这就是class。封装(就是有一定功能的代码块,可给它喂数据,它会吐结果)

2024-02-02 21:37:39 439

原创 Java学习12--稀疏数组

所以上图右侧第一行[0] 6 7 8 表示[0]归纳总结:这个数组共有6行7列8个有效元素。上图右侧第二行[1] 0 3 22 表示第一个有效数据是第0行 第3列 data值为22。如果一个数组大部分的值都是0或者相同的数值, 只有少量位置有特殊需要标记的数值,然后输出数组内有效数据的个数,并且输出数组的行数列数。比如这是一个6行7列的数组,其中共有8个有效数据。[0行][3列][data值为22][0行][6列][data值为15][1行][1列][data值为11][6行][7列][8个有效数据]

2024-02-02 13:56:16 207

原创 Java学习11--冒泡排序

冒泡排序是最出名的算法之一,核心是,丛数组的头部或者尾部开始,相邻两个元素比大小,把相对大的往上冒。永远追随最大的那个元素。当相邻两元素相比,新元素比当前元素大,就交换两者的位置,直到将最大的元素交换数组的另一侧。这是第一趟,一共进行n-1趟这样的交换就可以把所有的元素按大小排序。(n-1趟是因为只剩两个元素时最多只需要交换一次。举例:已有一个随机顺序的数组,要求按大小输出其元素:先由大到小,再由小到大。可能用到的命令:将数组转化成string便于输出。常用的总共有八大排序算法(后面再说)

2024-01-31 21:38:16 644

原创 Java学习10--数组

数组能够使用=声明+创建创建的语法如下变量类型[] 变量名=new 变量类型[N];(按照这一行或者上一行写)举例比如可拆分为int[] nums;比如可拆分为double[] data;数组名.length比如 nums.length。

2024-01-30 18:51:01 360

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除