- 博客(36)
- 收藏
- 关注
原创 第十八讲 线程池(极其重要的内容)
第十八讲 线程池(极其重要的内容)1 线程池的概念池:什么是池?池子,装水的。为什么要有池子:蓄水,方便用水。想用就用,不用就放在那里备用。线程池:池子里放的是线程,一条条已经开好的线程。 具体的线程是Thread类型的对象。 线程池就是将一个个new好的Thread类型的对象放在某个地方备用。 对象放在哪里?堆内存中。线程池就是:在堆中放一些已经new好的Thread类型的对象。供别人调用。 这些对象,用完就还回去。相当于一个工具箱,用完之后把工具还回箱子中。以前我们用线程的时候,
2021-02-23 17:09:06
578
2
原创 第十七讲 BlockingQueue
第十七讲 BlockingQueue1 阻塞队列队列:是一种数据结构,先进先出。排队。FIFO对于普通的队列而言:如果队列空了,还要从队列中移除数据就会抛异常。这种队列不适合用在高并发场景下。因为高并发场景下,取数据是一条线程,写数据是另一条线程取不到数据的时候,也就是队列空了取线程应该阻塞,等待队列中有数据,一旦有数据,该线程被唤醒。也就是说,get()不到的时候,应该wait()一旦另外一条写线程put()成功,notify/notifyAll(),让阻塞的线程醒来去取数据如果队列
2021-02-23 17:07:10
383
2
原创 第十六讲 读写锁
第十六讲 读写锁1 ReentrantLock 与synchronized 区别ReentrantLock: 是一个类,可设置。 构造方法,默认的构造是非公平锁(false),也可以设置为公平锁。 可以手动释放锁。finally中释放锁,不管怎样,最终这把锁都会被释放。 可以设置超时时间。如果,A线程持有锁,B线程可以等待一定的时间之后, 如果得不到锁,就放弃。 看代码执行完了,就会释放锁。 synchronized: 是一个关键字。非公平锁。不可以改变。 一旦加上锁,是不可以中断的
2021-02-23 17:06:49
334
1
原创 java进阶-第十五讲 JUC
java进阶-第十五讲 JUC1 生产者消费者问题第一版我们是用synchronized关键字和Object类中的wait()和notifyAll()在生产者和消费者问题中:synchronized 搭配 wait()和notifyAll()注意事项:资源类、线程、操作--->注意虚假唤醒(判断不能使用if,要用while)在生产者消费者问题中:1判断,2操作,3通知synchronized只能锁对象,加锁的地方要么是方法,要么是代码块(方法中的代码块)!为什么不能在方法之外呢?因为它
2021-02-23 17:05:38
311
原创 java进阶 第十四讲 线程安全问题
java进阶 第十四讲 线程安全问题1 关于sleep结束sleep()的办法:1.interrupt()强行打断,利用了异常机制。这种方式不好。有没有什么办法让一个睡眠线程结束睡眠。更好的办法是:利用标识位!2 同步机制线程安全问题的实质:多个线程操作一个资源类对象。多个线程,是不是多个栈?为什么要多个栈?局部变量在栈和栈之间是不能通信的。也就是说,栈内的数据是不共享的。所以栈里的数据是不存在安全问题的。在JVM的哪些内存空间中的数据存在线程安全问题? 栈内存、堆内存、方法区
2021-02-23 17:04:53
265
1
原创 java进阶-第十三讲 多线程
java进阶-第十三讲 多线程1 进程与线程进程: 进程是正在运行的一个个程序。一个程序一般只有一个进程。 这个进程死了,程序也就结束了。线程: 一个进程中有很多线程,java中的main方法也叫作主线程。GC也叫作GC线程。 我们知道,java中代码是自上而下顺序执行的。比如顺序排列的方法想要同时被执行 就要涉及到线程。2 并发和并行并行: 并排行驶,相当于两个人排排走。也就是说,两个程序,各走各的,互不干涉。 多核的CPU有才能做到并行并发: 其实是交替执行的,同一时间,
2021-02-19 13:01:40
356
1
原创 java进阶-第十二讲 IO流
java进阶-第十二讲 IO流1 File类在java中File类代表了什么意思? file:文件 java中File类的描述: An abstract representation of file and directory pathnames. File代表了文件和目录,不仅仅只是文件,一定要清楚2 File的构造方法File(File parent, String child) Creates a new File instance from a parent abstr
2021-02-19 13:00:32
434
1
原创 java进阶-第十一讲 IO
java进阶-第十一讲 IO1 什么IOIO: Input:输入。 Output:输出。计算机中,什么是输入?什么是输出? 计算机中: 输入的概念是往内存中读入硬盘上的数据,这叫读 read 输出的概念是从内存中往硬盘上写数据,这叫做写 write 怎么理解: 我们人就相当于一台电脑, 读:读书,是不是将书上(硬盘)的内容读入到大脑(内存)中,这叫做输入 写:写文章,是不是将大脑中(内存)的知识写到纸上(硬盘),这叫做输出2 流的分类流按照方向分为两种:输入流、输出
2021-02-19 12:59:44
368
原创 java进阶 第十讲 集合与迭代器
java进阶 第十讲 集合与迭代器1 集合Collection List Set ArrayList LinkedListSet---> Map Set本质上是Map的Key部分。Value--存的是一个常量。2 迭代器什么是迭代器? Iterable:可迭代的,可遍历的,也就是说实现了Iterable接口的类所产生的对象是可以被迭代的,也就是说这个对象是可以被遍历的。 循环遍历。Iterable中的重要方法: Iterator<T> iterator()
2021-02-19 12:58:25
337
原创 java进阶-第九讲 Map
java进阶-第九讲 Map1 什么是Mapmap:地图。地图用来干什么的?通过地图上的标识我们可以找到具体的地方。这里有两个关键的东西: 地图上的标识,具体的地方: 1.地图上的标识和具体的地方一定是一一对应的。 2.标识是不能重复的,具体的地方是可以重复的 (两个标识可以指的是同一个具体的地方),这说明具体的地方是可以重复的 只不过它有两个名字而已。 3.我们通过地图上的标识去找到现实中具体的地方 4.我们可以将标识看做是索引。通过这个索引可以找到对应的具体位置。ja
2021-02-19 12:56:46
251
原创 java进阶-第七讲 异常
第七讲 异常1 什么是异常?异常就是不正常。比如:一个正常人,感冒发烧生病,就是这个人异常了。当一个人感冒了,没有吃药,表面上没有处理,但是不影响他正常生活,是不是身体内部的免疫系统帮他处理了这个感冒!比如一个人得了新冠肺炎,不处理行吗?不处理这个人可能面临生命危险。这种病毒,人的身体内的免疫系统处理不了,如果不主动处理,就会出事。比如:在java中,我们进行类型转换的时候,有可能出现类型不匹配,无法转换,强制转的就会发生异常。举例:public class ExceptionTes
2021-02-06 00:51:07
307
1
原创 java进阶-第六讲 包装类与自动装拆箱
第六讲 包装类与自动装拆箱1 应用场景及解决办法public class BoxingTest01 { public static void main(String[] args) { Box box = new Box(1); m1(box); printTest(box); } private static void printTest(Box obj) { System.out.println(obj);
2021-02-06 00:49:39
490
1
原创 java进阶-第五讲 StringBuilder 和 StringBuffer
第五讲 StringBuilder 和 StringBuffer1 StringBuilder与String的区别String和StringBuilder的底层都是char数组但是String的char[] 是final修饰的,只能被赋值一次StringBuilder的char[]数组没有final修饰,是可以被多次赋值的在StringBuilder中char[] value的赋值,实际上是给StringBuilder构造出来的字符串进行内容的改变。改变内容是通过数组的扩容,然后指向扩容后的数组
2021-02-06 00:45:54
319
原创 java进阶-第四讲-深入理解String
java进阶-第四讲-深入理解String1 认识new String(String original)API中的String类的new String(String original)构造方法的实现: public String(String original) { this.value = original.value; this.hash = original.hash; } String类有两个成员属性:private final cha
2021-02-04 15:46:57
615
1
原创 java进阶 第三讲-深入了解String
java进阶 第三讲-深入了解String1 数组的补充public class ArrayTest02 { public static void main(String[] args) { int[] arr = new int[10]; for (int i = 0; i < arr.length; i++) { arr[i] = i+1; } // 数组的拷贝 int[] arrC
2021-02-02 15:46:20
276
3
原创 关于String中的new String(String original)的深度认识
关于String中的new String(String arg)的深度认识1 参数是否在类加载的时候已经存在于字符串常量池中了?答案是肯定的。在编译的时候,字符串类型的实参arg就已经被放入常量表中了。public class StringTest { public static void main(String[] args) { String str = new String("he"); }}反编译后的字节码文件内容如下:Last modified 2
2021-02-02 15:26:58
1678
2
原创 java进阶第二讲-数组、String类
java进阶第二讲-数组、String类1 回顾一下ObjectObject中的方法: public native int hashCode(); 带有native关键字的方法调用的是底层C++的dll文件 这种方法我们在工具中看不到具体的实现,当然也可以去其他地方找相关的实现代码。 hashCode()它是一个对象在堆中的内存地址经过hash算法计算之后又进行了进制的转换得出的结果.返回值是int 问题:如果两个对象的hashCode()值一样,说明什么问题?是同一个对象
2021-02-01 13:23:58
342
原创 java进阶-第一讲 浅拷贝与深拷贝 内部类与lambda表达式
第一讲: 浅拷贝与深拷贝、内部类import com.demo01.pojo.User;public class Demo01 { public static void main(String[] args) { User u = new User(100,"张三"); User user = new User(100, "张三" ); u = user; System.out.println(u); // 以
2021-01-31 12:46:34
812
2
原创 第十六讲 java进阶-API
第十六讲 java进阶-重写equals方法的深度解读1 接口的补充接口为什么不能new对象?有没有必要new对象?或者是说如果能new对象,new出来的是什么东西?有什么内容,是否符合对象的特征?接口中属性只能是常量,常量并不是对象的成员属性。接口中的方法只能是抽象的方法,没有方法体。对象要有成员属性,每个对象的成员属性值都不一样。要有成员方法,每个对象的成员方法,对象的引用都能调用。如果接口能new对象,那么接口对象的属性是没有的,接口对象的方法都是不能执行的。它违背对象的定义。接口的
2021-01-30 13:53:39
319
1
原创 第十五讲 抽象类与接口
第十五讲 抽象类与接口1 final关键字final 意为:最终的用在什么地方:可以修饰类:被final修饰的类,是无法被继承的。因为final意为最终的。既然是最终的类,那么它就不会有子类了。可以修饰变量:(只要是变量)它被final修饰以后,值不能被改变。也就是说,只能给final修饰的变量赋一次值,不能二次赋值。被final修饰的局部变量,生命周期结束在方法结束时,也就是说被final修饰的局部变量,仍然是一个局部变量。final 修饰的成员变量,一定要赋初值。且只能赋一次值。(重要
2021-01-29 13:33:28
332
1
原创 第十四讲 深入了解继承
第十四讲 深入了解继承1 构造方法的调用public class Animal { private String name; private String type; public Animal() { System.out.println("父类的无参构造方法!"); }}class Dog extends Animal{ public Dog() { Animal(); // 这个方法是隐含的,但肯定在这里出现,一定是出现在Dog()这个方法的第一句之
2021-01-26 15:03:16
420
1
原创 第十三讲 继承
第十三讲 继承1 面向对象三大特征面向对象三大特征: 封装 继承 多态关于封装: 类就是一种封装。以前学习C,数据和方法都是暴露在外面的。C也有封装,比如结构体。其实结构体就是类的原型。 类是一种封装,它将这一类事物的共有的属性和方法封装在一起。 比如:我们的手机,你需要知道实现的原理吗?你只要知道怎么用就行。这就是一种封装。它屏蔽了复杂的实现过程,给用户提供了简单的操作入口。比如手机不要外壳,不封装,那么里面的重要的元器件都暴露在用户面前,这样很危险。 封装确保了数据的安全,使得数据更
2021-01-25 16:36:28
241
原创 第十二讲 回顾 static 与 this
第十一讲 回顾 static 与 this1 关于 staticstatic: 意为:静态的关于类: 类 = 属性 + 方法;一个java软件它是由很多类组成的,一个类中有两部分,属性和方法。 属性:定义在类体中,方法外的变量或者是数据。在java中没有什么变量和方法是定义在类外面的。java是纯面向对象的语言,因为java程序最小的单位是类。 属性分为两种,一种是没有被static关键字修饰的,一种是带有static关键字的 不带static修饰的属性叫做成员属性(变量):privat
2021-01-25 12:44:44
205
1
原创 第十一讲 this关键字
第十一讲 this关键字1 什么是this?this 指的是这个,从字面上理解我们就能知道,它与对象有关。一个类可以产生多个对象。this就是指当前的这个对象的代名词。我们说:这个人很帅,你是不是指了具体的某一个人!public class This01 { private int id; private String name;/* public This01(int id, String name) { id = id; name = name; // 这样赋值有什么
2021-01-24 18:08:26
201
原创 第十讲 static关键字
第十讲 static关键字static: 意为静态的。类:属性 + 方法 属性: 成员属性,成员是什么?写在方法外,类体中的属性。类是成员吗?类显然不是成员,成员是对象,是实例。 成员属性的时候:指的是对象的属性,这个属性属于对象的,每个对象有不一样的值。 比如: Person类,有身高这样的属性,对于不同的实例,不同的个体来说,有不同的身高。这就叫做成员属性。 方法: 成员方法:也是成员的方法,成员就是对象,具体的对象,不同的对象有不同的方法。比如Per
2021-01-24 18:07:32
343
2
原创 第九讲 构造方法
第九讲 构造方法1 关于Set方法的补充/* 给成员属性设置值的时候,引进检查机制*/public class SetTest { private int age; public int num; public void setAge(int ageT) { if(ageT > 100 || ageT < 0) { System.out.println("年龄不合法!!"); return; } age = ageT; } public in
2021-01-24 12:06:10
329
1
原创 第八讲 成员属性和成员方法
第八讲 成员属性和成员方法1 成员属性成员属性: 出现在类体中,方法之外的,叫做成员属性。 public class Person { String name; char sex; int age; double height;}class User{ int uId;}/* 以上,是一个类,类名叫做Person 这个类的属性是只要是Person,他们都有名字、性别、年龄、身高。 这是人共有的属性,不同的人的属性有不同的值 张三,男,21,175 爽爽,女,30
2021-01-23 15:26:34
2806
2
原创 第七讲 面向对象初步
第七讲 面向对象初步1 面向对象介绍面向对象:(OO) Oriented Object C是面向过程的:什么过程?流程,要做一件事情的步骤。对于程序来说,过程体现在哪里?函数。所以,面向过程可以简单地理解为函数式,一个函数一个函数的调用。 比如:我们制造一个桌子,面向过程的是一个部件一个部件的焊接。哪个部件搞错了,桌子就废了。 比如:我们读书,面向过程的是一门课一门课的学,逻辑性很强,依赖很重。比如,我们学计算机科学与技术,先学计算机硬件、再学程序设计、再学数据结构...少一步都不可以,下一步依赖
2021-01-23 12:10:07
264
原创 第六讲 关于方法
第六讲 关于方法1 关于程序设计的理念关于程序设计: 我们在学习程序设计的时候,该以什么样的心态和角色去学习? - 程序设计,核心是设计,我们应该以设计者的角色去学习 - 何为设计?设计的主体是使用者,也就是说我们是设计者,我们要给用户设计软件,满足用户的需求。 - 用户对需求有什么样的要求?或者是说怎样叫做满足用户需求?简单来讲,用户希望我们做出来的东西能够让他们满意。 - 因此,我们时时刻刻都要想着,怎样让用户满意。那么我们在设计软件的时候、设计程序的时候,要考虑很多因素。我们的代
2021-01-22 18:34:20
329
2
原创 第五讲 方法
第五讲 方法方法也就是C语言中的函数 我们不可能一直在main函数中去写代码。 我们也讨论过,在java中,类体中方法外是无法直接写java语句的。只能是变量的定义以及定义时的直接赋值。 当前我们只知道有main函数。我们叫做主方法 main方法。 java中程序员可以自己定义方法。方法的语法:修饰符列表 返回值类型 方法名(参数列表) { 方法体;}public class MethodTest { public static void m
2021-01-21 18:11:13
271
3
原创 第四讲 控制语句
第四讲 控制语句1 三目运算符表达式0 ? 表达式1 : 表达式2表达式0:要是一个布尔表达式,要得到一个布尔值。int a = 100;int b = 200;int i = (a > b) ? a : b;class BoolExp { public static void main(String[] args) { char a = 97; char b = 98; // int a = 100; // int b = 200; //int c =
2021-01-21 18:10:39
190
原创 day-02 运算符与控制语句
day-02 运算符与控制语句1 命名规范标识符的命名要求1. 见名知意,只能包含数字、字母、下划线、$, 不能以数字开头。一般都是英文单词或者是英文单词的缩写,以及英文的词组或者是词组的缩写,这些缩写要让人看得懂,一看就能知道它要表达的意思2. 关于类名的命名,类名单词首字母一定要大写,如果有多个单词,每个单词的首字母都要大写3. 关于变量名的定义以及方法名的定义,要遵循驼峰命名法。即首个单词的首字母要小写,如果是多个单词组成,第一个单词的首字母要小些,其他单词的首字母要大写。如:int stu
2021-01-21 12:36:42
271
4
原创 基础数据类型详解
基础数据类型详解1 基础数据类型分类各种基础数据类型所占字节数的大小(单位Byte)整数型数据 byte 1 short 2 int 4 long 8小数型数据 float 4 double 8字符型数据 char 2布尔型数据 boolean 11.1 整数型数据类型数据类型所占空间的大小: byte --- 字节型数据类型,在内存中占用1个Byte,所能表示的范围是多少?-128~127 short--- ..... 在内存中占用2个Byte,所能表示的范围是多少?-3
2021-01-20 17:54:51
1384
4
原创 java基础第一讲--概述
java基础第一讲–概述1. 初识java基本的dos命令mkdir -- 创建目录cls 清屏盘符: 如 E: D: C:dir指令,可以看某个目录下的子目录cd:切换目录 cd ..回到上一级目录 cd . 在当前目录下rd 删除一个目录 -- rd 目录名del 删除一个文件 -- del 文件名快捷键: 敲命令的时候自动补全 tab 打开命令行 win+R 用上下箭头翻阅历史指令记录 命令行窗口中的内容复制的问题:右键--->标记(k)-->左键选中要复
2021-01-20 12:50:36
668
2
原创 迪米特法则
迪米特法则1 基本介绍一个对象应该对其他对象保持最少的了解类与类关系越密切,耦合度越大迪米特法则(Demeter principle)又叫做最少知道原则,即一个类对自己以来的类知道得越少越好,也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部,对外除了提供public方法外,不对外泄露任何信息迪米特法则更为简单的定义:只与直接朋友通信直接朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等等
2020-12-30 14:51:45
208
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人