多则惑少则明
让天下没有难测试的项目。专注于测试开发领域,近9+年的工作实战经验,主攻方向包括:
0-1/中期/成熟类大型/复杂系统的业务测试
自动化测试平台&框架开发;
打造质量体系及沉淀质量方法论
个人邮箱[email protected]
文章周末定时更新,其余时间不定时更新
展开
-
第14章 多线程四 (线程通信)
3)唤醒: 被通知的等待线程被唤醒(notify唤醒同步锁上等待的第一个调用wait()方法的线程,notifyAll缓存同步锁上调用wait方法的所有线程),重新获得共享对象的锁,并检查条件是否满足。2)条件满足: 通知线程执行某项任务,当条件满足时,通知线程调用共享对象的notify()或notifyAll()方法,通知等待线程。一个线程完成了自己的任务时,要通知另一个线程去完成另一个任务。1)等待条件: 等待线程在共享对象上调用wait()方法,进入等待状态,同时释放共享对象的锁。原创 2023-11-23 15:49:42 · 99 阅读 · 0 评论 -
第14章 多线程三 (线程同步)
共50张票,3个售票窗口同时售票,售完为止。比如,需要预防下面问题: 同一张票被多次卖出;为了解决线程安全问题。线程安全问题就是多个线程同时处理共享资源所导致的。线程同步为了解决共享资源被同时访问问题,结合章节内容重点难点,会对重要知识点进行扩展,以及做示例说明等,以便更好理解重点难点。✔️将共享资源代码放到一个代码块中,这种代码块称为同步代码块。某一时刻只允许一个线程访问,访问该方法的其他线程都会阻塞。直到当前线程访问完毕,其他线程才有机会执行方法。需要保证共享资源的代码在任何时刻只有一个线程访问。原创 2023-11-23 15:38:38 · 98 阅读 · 0 评论 -
第14章 多线程二 (线程调度)
输出结果: 线程/主线程交叉执行--->主线程休眠9s(子线程执行完成)--->等到9s后---->主线程继续执行完毕。低优先级只是获得调度的概率低,并非一定是在高优先级线程之后才被调用,高优先级的线程也不是一定就比低的优先级线程先执行。2)、线程的优先级是在 [10~1] 之间的,其中 5 是默认线程的优先级。1)线程的调度,即 Java虚拟机为进程的每个线程分配CPU的使用权。3、某个线程让步后,一定是另一个线程执行吗?2、每次执行时,一定是新建线程开始执行吗?2、线程B,线程C哪个线程先执行让步?原创 2023-11-16 09:37:37 · 91 阅读 · 0 评论 -
第14章 多线程一 (介绍、创建、状态流转)
什么是进程?进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序、音乐程序、微信程序各自就是一个进程对于一个CPU而言,一个时间点只能运行一个程序,即一个进程CPU运行速度很快,可以在多个进程间快速切换,给人的感觉是同事执行多个程序。如 一边听歌一边聊天。什么是线程?进程中可以有多个执行单元同时运行,这些执行单元成为线程。程序中单个顺序的流控制,单个程序中多个线程共享系统资源;多线程程序实际上也是CPU轮流执行的。线程和进程的区别?主线程是什么?原创 2023-11-15 16:46:05 · 65 阅读 · 0 评论 -
第13章 Java IO流处理(三) 转换流、对象输入输出流、printStream流、字符编码
2)PrintStream类不会抛出任何输入/输出异常。相反,我们需要使用checkError()方法来查找其中的任何错误。1)PrintStream将原始数据(整数,字符)转换为文本格式而不是字节。然后,它将格式化的数据写入输出流。✔️ java.io包的PrintStream类可用于以通常可读的形式(文本)而不是字节写入输出数据。结合章节内容重点难点,会对重要知识点进行扩展,以及做示例说明等,以便更好理解重点难点。例子:指定处理的编码 utf-8。✔️ 字符编码和解码。原创 2023-11-14 19:41:37 · 90 阅读 · 0 评论 -
第13章 Java IO流处理(二) 字节流与字符流
✔️一般来说,流有两种基本形式:输入流和输出流,根据程序是作为数据流的目的端还是源端来划分。✔️字节流, 从InputStream和OutputStream派生出来的一系列类,以字节(byte)为基本处理单位。✔️字符流 , 从Reader和Writer派生出的一系列类,以16位的Unicode码表示的字符为基本处理单位。例子: 已知有a.txt, b.txt连个文件,如何将a.txt文件的内容,合并到b.txt文件中?✔️通过输入流,程序可以从数据文件读取数据,但不可向输入流中写入数据;原创 2023-11-14 19:24:39 · 70 阅读 · 0 评论 -
第13章 Java IO流处理(一) File类
✔️它用来描述文件对象的属性,既可以表示文件,也可以表示目录。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。✔️ 使用它提供的方法,我们可以得到所指对象的描述信息,包括名称、存在否、读/写权限、路径等等。结合章节内容重点难点,会对重要知识点进行扩展,以及做示例说明等,以便更好理解重点难点。File类并不用来进行文件的读/写操作,并未涉及到写入或读取文件内容的操作。1、文件与目录的描述类——File。原创 2023-11-07 21:01:53 · 251 阅读 · 0 评论 -
第12章 Java Map集合
1、 Map双列集合2、 集合类图3、Map概述。原创 2023-11-07 20:49:15 · 261 阅读 · 0 评论 -
第11章 Java集合(三)泛型
但是如果需要对数据类型进一步限制,比如只有Person类及其子类可以接受,其他数据类型不接受、或者只有Person类及其父类可以接受,其他数据类型不接受,这种对数据类型进行限制的技术,称为泛型上下限。✅ 集合可以存任何类型的对象,存放后,集合就忘记了存放的数据类型,因此将对象从集合中取出时,这个对象的编译类型就变成了Object类型。1)泛型接口,就是接口中使用了自定义类型的接口。1)泛型方法,就是方法中使用了自定义类型的方法。1)泛型类,就是类中使用了自定义泛型的类。✅Java引入了参数化类型,即泛型。原创 2023-11-07 20:32:39 · 94 阅读 · 0 评论 -
第11章 Java集合(二)
1、HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,需要使用它的一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。✅基本原理: TreeSet 是通过 TreeMap 实现的一个有序的、不可重复的集合,底层维护的是红黑树结构(平衡排序的二叉树)。✅ 如果向集合中存放自定义的对象,为了保证唯一性,必须重写hashCode和equals方法建立属于当前对象的比较方式。✅与List接口不同,Set接口的数据存储是无序的,并以某种规则保证存入的元素不可重复。原创 2023-11-07 20:09:34 · 434 阅读 · 0 评论 -
第11章 Java集合(一)
由于其内存地址是不连续的,因此每个元素保存了下一个元素的位置,但查找时需要从头往下找,显然没有数组查找快;✔️与ArrayList的差别:Vector是同步(线程安全)的,运行效率要低一些,主要用在在多线程环境中,而ArrayList是不同步的,适合在单线程环境中使用。3、 Map双列集合, 双列集合类的根接口用来存储键值对影射关系的元素,Map集合可以根据Key找到对应value。2)如果数组已满,它会自动创建一个新的数组,并将原来的元素复制到新的数组中。原创 2023-11-07 19:48:54 · 347 阅读 · 0 评论 -
第10章 Java常用类
StringBuilder类非常相似的StringBuffer,不同之处在于它的访问不同步的,因此,它不是线程安全的。而StringBuffer类是一个可变的字符串,允许在不创建新的对象的情况下对字符串进行修改。hashcode是Object中的函数,所有类都拥有的一个函数,主要返回每个对象的hash值,主要用于哈希表中,如HashMap、HashTable、HashSet。利用 Random 类有参构造创建的对象所产生的一组随机数和参数相关,和对象实例以及程序运行次数无关,即便是不同的对象,原创 2023-11-07 19:30:12 · 64 阅读 · 0 评论 -
Java第9章 异常
1、 自定义异常类须知✔️Java中所有的异常类,都继承自Throwable或者继承其子类;这样异常才可以被抛出;✔️每个异常子类都调用了父类的构造方法,把异常描述信息传递给父类。2、自定义异常类一般有如下步骤return id;思考:如何修改MyException可以在发生异常时,不用throws关键字进行声明思路:异常继承自RuntimeException3、 注意事项✔️自定义异常类应该继承Exception或RuntimeException类。✔️。原创 2023-11-07 18:52:24 · 337 阅读 · 0 评论 -
Java第8章 反射
程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。反射是Java的特征之一。1、只要用到反射,先获得Class Object2、没有方法能获得当前类的超类的private方法和属性,你必须通过getSuperclass()找到超类以后再去尝试获得。原创 2023-11-05 20:39:54 · 142 阅读 · 0 评论 -
Java第7章 类的高级特性
2、用static修饰的类成员属于类,不属于这个类的某个对象。可以不用创建本类对象,采用类名.成员的方法访问;由于接口没有构造方法,所以接口中的。3、用static修饰的成员变量,成员方法分别叫做静态成员,静态方法。1、final可以修饰类或类的成员(成员变量或成员方法)或局部变量。关于类的初始化顺序,下面输出结果是什么,想想为什么?2、用final修饰的类或类成员或局部变量是。,是指在一个类内部定义的类。,如果一个类被定义为final,它。1、static可以类的成员(成员内部类 和 方法内部类。原创 2023-09-27 22:56:25 · 93 阅读 · 0 评论 -
Java第6章 类的多态
⭐️ 什么是多态?简单来说,多态是具有表现多种形态的能力的特征,指同名但形态(即功能)不同的方法。原创 2023-09-22 18:17:45 · 102 阅读 · 0 评论 -
Java第5章 抽象类与接口
※abstract类中可以有abstract方法※abstract类也可以有非abstract方法。※abstract类不能用new运算创建对象。对于abstract类,我们不能使用new运算符创建该类的对象。原创 2023-09-22 17:12:43 · 110 阅读 · 0 评论 -
Java第4章 类的继承
在Java编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。大大增强了软件的可复用性。Java类单继承的局限性在某些情况下可能会导致问题。例如,在某些情况下,我们可能需要从多个父类中继承行为。结合章节内容重点难点,会对重要知识点进行扩展,以及做示例说明等,以便更好理解重点难点。※根据已有的类创建新的类。采纳了旧的类的属性(域)及其行为(方法) 增加了新的能力。※子类继承父类 子类增加了新的成员域或新的成员方法。原创 2023-09-22 16:52:07 · 77 阅读 · 0 评论 -
Java第3章 类的封装
2、如果程序员定义了构造方法,那么,最好包含一个参数表为空的构造方法,否则,调用new className()时会出现编译错误。信息隐藏,隐藏对象的实现细节,不让用户看到 将东西包装在一起,然后以新的完整形式呈现出来。一个类可以有多个构造函数 为了创建实例的方便,一个类可以有具有不同参数列表的构造方法。1、默认构造方法的参数列表及方法体均为空,所生成的对象的属性值为零或空。类的封装,就是为了保证变量的安全性,避免对象属性赋值的随意性。在创建对象实例时由new运算符自动调用。它的名字与类名相同;原创 2023-09-22 16:32:44 · 128 阅读 · 0 评论 -
Java第2章 类与对象(二)
5.生命周期不一样(重点) 局部变量:随着方法进栈而诞生,随着方法出栈而消失 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。3.默认值不一样【了解】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样。如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,这时如果想在该方法内使用成员变量,必须使用关键字this。1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中。原创 2023-09-22 16:22:10 · 96 阅读 · 0 评论 -
Java第2章 类与对象(一)
现实世界中客观存在着不计其数的各种对象,如动物、人、桌子、黄瓜、油条、汽车、鲸鱼、计算机、脸、……举例:公司打扫卫生(扫地,拖地,倒垃圾,冲厕所等) 按照面向对象的设计思考:谁来做各个子任务?1、考虑A,B,C,D分别去做子任务,如A来扫地,B来拖地,C来倒垃圾,D来冲厕所;1、先对程序中所涉及的事物进行抽象,具有相同特征和行为的事物抽象成类;3、A,B,C,D协作都完成任务后,公司打扫卫生这件事完成。2、A完成扫地,B完成拖地,C完成倒垃圾,D完成冲厕所;3、将程序中的功能由一个个对象去完成。原创 2023-09-22 16:10:51 · 65 阅读 · 0 评论 -
Java第1章 入门及idea开发工具
Java入门: 如何理解Java原创 2023-09-17 22:11:14 · 122 阅读 · 0 评论