JAvaSe
文章平均质量分 55
DeityHzl
这个作者很懒,什么都没留下…
展开
-
生产者与消费者模型
1 生产者和消费者模式概述【应用】 概述 生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。 所谓生产者消费者问题,实际上主要是包含了两类线程: 一类是生产者线程用于生产数据 一类是消费者线程用于消费数据 为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库 生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为 消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为原创 2021-09-23 18:51:24 · 174 阅读 · 0 评论 -
Java线程安全的可见性与原子性
1.1 可见性代码分析:public class Demo { static int money = 1000;//初始钱数 public static void main(String[] args) { Thread women = new Thread(()->{ while(money < 200000); System.out.println("我们可以结婚了"); .原创 2021-09-23 18:46:39 · 106 阅读 · 0 评论 -
Java线程池
1.基本原理提到池,大家应该能想到的就是水池。水池就是一个容器,在该容器中存储了很多的水。那么什么是线程池呢?线程池也是可以看做成一个池子,在该池子中存储很多个线程。线程池存在的意义:系统创建一个线程的成本是比较高的,因为它涉及到与操作系统交互,当程序中需要创建大量生存期很短暂的线程时,频繁的创建和销毁线程对系统的资源消耗有可能大于业务处理是对系统资源的消耗,这样就有点"舍本逐末"了。针对这一种情况,为了提高性能,我们就可以采用线程池。线程池在启动的时,会创建大量空闲线程,当我们向线程池提.原创 2021-09-23 17:36:49 · 98 阅读 · 0 评论 -
Java实现多线程的三种方式
1.实现多线程方式一:继承Thread类【应用】 方法介绍 方法名 说明 void run() 在线程开启后,此方法将被调用执行 void start() 使此线程开始执行,Java虚拟机会调用run方法() 实现步骤 定义一个类MyThread继承Thread类 在MyThread类中重写run()方法 创建MyThread类的对象 启动线程 代码演示 public原创 2021-09-22 19:13:49 · 72 阅读 · 0 评论 -
Properties集合
我们或许见过以.properties结尾文件,这种文件通常用做于配置文件,通常用作于加载mysql配置信息,在Java中有一种Properties集合. Properties介绍 是一个Map体系的集合类 Properties可以保存到流中或从流中加载 属性列表中的每个键及其对应的值都是一个字符串 Properties基本使用 public class PropertiesDemo01 { public static void m..原创 2021-09-18 16:18:14 · 280 阅读 · 0 评论 -
Java的IO流使用
1.流的分类* 1.操作数据单位:字节流、字符流* 2.数据的流向:输入流、输出流* 3.流的角色:节点流、处理流2.流的体系结构3.输入、输出的标准化过程3.1 输入过程① 创建File类的对象,指明读取的数据的来源。(要求此文件一定要存在)② 创建相应的输入流,将File类的对象作为参数,传入流的构造器中③ 具体的读入过程: 创建相应的byte[] 或 char[]。④ 关闭流资源说明:程序中出现的异常需要使用try-catch-fina...原创 2021-09-17 20:09:24 · 218 阅读 · 0 评论 -
Java利用File类实现copy复制操作
在实现复制操作前先要掌握io操作,如果不熟悉请看我的相关文章在熟悉io流后,我们利用io实现文件的复制public static void copy(File oldFile, File newFile){ try ( InputStream in = new FileInputStream (oldFile); OutputStream out = new FileOutputStream ( newFile )) {原创 2021-09-17 20:03:12 · 8113 阅读 · 0 评论 -
Java的File类删除功能
delete()方法可以删除文件或文件夹,但要注意:java的删除不走回收站,删除后就真的没了! 要删除一个文件目录,请注意该文件内不能包含文件或文件目录1.删除文件或空文件夹2.删除有内容的文件夹必须采用递归的方式,直接到达最底层,一级一级删除,很简单的一个递归逻辑public static void del(File file){ File[] files = file.listFiles ();//将目录下的内容变成文件数组...原创 2021-09-17 19:52:48 · 1277 阅读 · 0 评论 -
Java的File类的使用
1.File类的理解* 1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)* 2. File类声明在java.io包下* 3. File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,* 并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。* 4. 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点".2.File的实例化2.1 常用构造器File...原创 2021-09-17 19:10:13 · 76 阅读 · 0 评论 -
Stream流的使用
1.Stream API的理解:1.1 Stream关注的是对数据的运算,与CPU打交道,而集合关注的是数据的存储,与内存打交道1.2 java8提供了一套api,使用这套api可以对内存中的数据进行过滤、排序、映射、归约等操作。类似于sql对数据库中表的相关操作。2.注意点:* ①Stream 自己不会存储元素。* ②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。* ③Strea...原创 2021-09-16 18:32:34 · 310 阅读 · 0 评论 -
TreeSet的理解
1.TreeSet集合概述和特点【应用】 不可以存储重复元素 没有索引 可以将元素按照规则进行排序 TreeSet():根据其元素的自然排序进行排序 TreeSet(Comparator comparator) :根据指定的比较器进行排序 TreeSet就是通过定义的排序规则进行排序,下面介绍自然排序Comparable的使用和定制排序Comparator的使用主要代码示例://定义一个学生类public class Student.原创 2021-09-15 19:44:25 · 288 阅读 · 0 评论 -
泛型的理解
1.泛型的概念所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时确定(即传入实际的类型参数,也称为类型实参)。2.集合中泛型使用的变化3. 集合中使用泛型总结:* ① 集合接口或集合类在jdk5.0时都修改为带泛型的结构。* ② 在实例化集合类时,可以指明具体的泛型类型* ③ 指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法...原创 2021-09-15 19:25:59 · 655 阅读 · 0 评论 -
Java集合
1. 集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称Java容器。说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)2. 数组存储的特点:> 一旦初始化以后,其长度就确定了。> 数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。* 比如:String[] arr;int[] arr1;Object[] arr2;3. 数组存储的弊端:* > 一旦初...原创 2021-09-15 19:18:58 · 74 阅读 · 0 评论 -
Java异常处理
Java的异常的体系Java异常处理有一个根类Throwable,下面有两个子类,分别为Error和Execption.Error(错误):不是代码方面的错误 我们不可解决 Execption(异常):代码方面的错误 可以我们来解决由于error不属于代码方面的错误,我们无法处理,所以我们着重处理Execption这个异常类.在Execption类下有很多子类,我们根据处理的时机 分为两大类 编译异常:在编译期间出现的异常,也就是我们在开发工具例如idea上面编写代码时...原创 2021-09-09 20:45:10 · 72 阅读 · 0 评论 -
String类常用方法
int length():返回字符串的长度: return value.lengthchar charAt(int index): 返回某索引处的字符return value[index]boolean isEmpty():判断是否是空字符串:return value.length == 0String toLowerCase():使用默认语言环境,将 String 中的所字符转换为小写String toUpperCase():使用默认语言环境,将 String 中的所字符转换为大写String原创 2021-09-08 19:35:03 · 66 阅读 · 0 评论 -
String类型的值传递问题
在创建一个String对象时我们有两种方式,可以通过直接赋值,也可以通过new对象通过构造器赋值.String s1 = "abc"String s2 = new String("abc");对于第一种来说,它是通过在方法区字符串常量池创建字符串"abc",直接指向它,第二种是先在堆空间中创建String对象,由这个对象指向方法区中的字符串"abc",而s2是指向这个String对象....原创 2021-09-08 18:32:53 · 392 阅读 · 0 评论 -
Java面向对象理解
面向对象的大特征有:封装性,继承性,多态性,抽象性.通过这些特征实现面向对象的编程.既然是面向对象,首先介绍何为对象,其实对象就是实际存在的该类事物的每个个体,而其中类就是对一类事物的描述,是抽象的,对象是将该类实例出来,通俗来说就是一个男孩,他拥有各种各样的特征和能力,他就在一个类,而对象就是具体的一个男孩.接下来介绍这几大特征了:封装性:隐藏对象内部的复杂性,只对外公开简单的接口。外界通过公开的接口进行调用,而不能直接使用隐藏的东西,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏原创 2021-09-06 21:36:32 · 54 阅读 · 0 评论 -
面向对象与面向过程的理解
通常我们都知道Java是一种面向对象的语音,c语言是面向过程的一种语言,那到底什么是面向对象呢,面向过程又是什么概念.面向过程:强调的是功能行为,以函数为最小单位,考虑的是怎么做.面向对象:强调的是具有功能的对象,以对象为最小单位,考虑谁来做.直接字面理解可能不太好理解,用生活中的东西例子来说吧.拿洗碗来说吧,用面向过程的思维来处理就是:冲水>上洗洁精>拿刷子>刷碗>冲水>甩水而面向对象就将这些东西集合在一起,就相当于洗碗机,我们直接使用洗碗机就能洗碗.原创 2021-09-06 18:21:23 · 61 阅读 · 0 评论 -
用Java实现:有500个小孩手拉手围成一圈,从1开始数,数3小孩退出圈外,直到最后一位小孩,求最后一位小孩的序号是?
分析题目,小孩从1数到3,3退出,剩下继续,由于是手拉手成一个圈,会轮回回来,一直进行下去可以就剩一个小孩,由于要得到小孩序号,我们可以定义初始化一个500长数组,每有一个小孩数3就将其赋值为1,建立两个索引,一个记录进行的次数,一个记录剩余小孩人数。 int[] array = new int[500]; int size = array.length; int index = 0; int flag = size;建立一个for循环原创 2021-09-02 20:38:59 · 1489 阅读 · 0 评论 -
有1、2、3、4,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? Java实现
首先分析题目,我们可以先考虑百位,有4种情况,可以是1-4的任意一个,利用数学知识,十位和各位只有3种选择了,而十位和个位交换顺序会有不同结果,因此是一个A32问题,一共有3*2=6种情况,结合百位一共有4*6=24种情况.接下来编程实现,不妨先定义一个数组,将1,2,3,4放进去.int[] array = new int[]{1,2,3,4};我们可以先看百位有4种选择,十位有3种,个位有2种情况,可以用三层for循环嵌套for (int i = 0; i < 4 ;i++){原创 2021-09-01 20:46:12 · 5010 阅读 · 0 评论 -
Java实现100以内素数,并以规定形式打印输出
利用Java实现求100以内所有素数,并以每行只显示5个的效果实现public class PrimeNumber { public static void main(String[] args) { int count = 0; a:for (int i = 2; i <= 100; i++) { for (int j = 2; j < i; j++){ if(i % j == 0){原创 2021-08-31 19:01:44 · 334 阅读 · 0 评论 -
万年历的实现,不使用Date类,靠时间计算实现
万年历是通过我们输入年和月就能够得到该月的日历,不使用月历类,仅仅通过逻辑实现.我们可以先通过查询得出1990年的1月1日是星期一,将这个时间作为基点,通过计算你所要的日历之间的时间差,再通过模7得出该月份1号所对应星期几,具体代码如下:package _03;import java.util.Scanner;public class PerpetualCalendar { public static void main(String[] args) { //通原创 2021-08-31 17:37:14 · 157 阅读 · 0 评论 -
两个变量进行值交换的三种方式
在很多应用场景中我们需要将两个变量的值进行交换,在这里总结了3种方式以及它们的利弊.第一种,可以定义一个额外的变量用于进行数值交换,这是种最普通但实用性又很强的方法int a = 1;int b = 2;int c = a; //c = 1;a = b; //a=2;b = c; //b = 1;第二种利用加减法的操作,这种方法可以无需在定义一个新变量就能实现数值交换,但有一个致命的缺陷,a+b这种操作可能会导致数据的溢出,导致最后交换出来的数值完全不对.in...原创 2021-08-30 18:35:58 · 3082 阅读 · 0 评论