![](https://img-blog.csdnimg.cn/20200805102020995.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
(1)Java
Java基础知识
小懒羊爱吃草
小枯林
展开
-
Java输入输出流九:对象序列化(需要用到字节流中的ObjectOutputStream[对象输出流]和ObjectInputStream[对象输入流])
对象序列化:把Java对象转换为字节序列的过程;对象反序列化:把字节序列恢复为Java对象的过程;●对象序列化的来源: 实际网络上发送信息时,往往会把一组信息封装成一个对象;即网络传输时经常会遇到如何发送对象的内容和如何解析对象的内容的问题。就是对象序列化要解决的问题。 以前做项目的时候,也遇到对象序列化~~~●对象序列化的步骤: (1)创建一个类,这个类需要继承Serializable接口;一个类只有继承了Serializab...原创 2020-12-13 02:23:53 · 1086 阅读 · 0 评论 -
Java输入输出流八:字符流之FileReader和FileWriter复制文件;带缓冲的FileReader和FileWriter复制文件;readLine()方法的应用;换行符
一:FileReader和FileWriter文件复制范例:(1)可见,FileReader和FileWriter的使用,和前面的字节流,其他字符流类的使用情况类似;(2)这儿没有使用缓冲流;而以前在处理文档时,常用的readLine()方法是BufferedReader类的;public class ReaderDemo2 {public static void main(String[] args) { try { FileReader fr = new FileRead原创 2020-12-12 20:48:47 · 517 阅读 · 0 评论 -
Java输入输出流七:字符流之BufferedReader(缓冲输入流)和BufferedWriter(缓冲输出流)
一:BufferedReader(缓冲输入流)和BufferedWriter(缓冲输出流)构造方法和常用方法简介BufferedReader(缓冲输入流):常用方法:注意readLine()在某些文档处理中常用,以前在实际开发中也曾重点用过这个方法……………………………………………………BufferedWriter(缓冲输出流):构造方法常用方法:……………………………………………………二:文件复制示例(1)下面的例子,是现用字节流读数据,然后把字节流转成原创 2020-12-12 20:11:50 · 584 阅读 · 0 评论 -
Java输入输出流六:字符流之InputStreamReader和OutputStreamWriter
●字符流中常用的两个是:InputStreamReader和OutputStreamWriter;这两个是不带缓冲区的一:InputStreamReader类和OutputStreamWriter类,构造方法,常用方法简介InputStreamReader类:构造方法:参数是字节输入流,因为InputStreamReader的作用就是把字节输入流转换成字符常用方法:……………………………………………………OutputStreamWriter类:构造方法:常用方法:原创 2020-12-12 19:41:10 · 1501 阅读 · 0 评论 -
Java输入输出流五:字符流分类
字节输入输出流:读取和写入数据都是二进制格式,善于处理如视频图片等二进制文件;(其输入的时候是二进制文件,输出来的也是二进制内容,可能在具体落实到实际载体上的时候,会编码成合适的内容)字符输入输出流:读取和输出的是字符内容,注入微信聊天时发送的文字;(输入输出都是字符?)●字符流包括: 字符输入流:Reader 字符输出流:Writer●字符输入流的父类是:Reader类,其包括多个子类。其中需要着重了解的有:BufferedReader(缓冲字符输入流),I...原创 2020-12-12 18:27:07 · 2162 阅读 · 0 评论 -
Java输入输出流四:字节流之缓冲流(BufferedInputStream&BufferedOutputStream)
一:缓冲流简介:为什么能提升效率●原先没有缓冲流的情况:通过FileInputStream(文件输入流)和FileOutputStream(文件输出流)可知,在文件拷贝的时候,其文件数据的流转顺序为: 文件→FileInputStream→字节数组→FileOutputStream→文件Copy;●使用缓冲流的情况: 文件→FileInputStream→缓冲区→字节数组→缓冲区→FileOutputStream→文件Copy;●缓冲流为什么能够提高读写速度:...原创 2020-12-12 17:24:24 · 1270 阅读 · 0 评论 -
Java输入输出流三(2):字节流之FileOutputStream(文件输出流);文件拷贝(字节流的重点)
文件输入流将文件内容读取(程序读取文件内容,暂存在内存中);文件输出流,将程序读取到的内容写入到一个文件中;一:FileOutputStream类常用方法介绍构造方法:常用方法:●public void write(byte[] b,int off,int len): off偏移量:从数组的第几位算起; 一般,再读写文件时:令len = fis.read(b); len:如果没有读到文件末尾:len的值就是实际读...原创 2020-12-10 19:33:10 · 648 阅读 · 1 评论 -
Java输入输出流三(1):字节流之FileInputStream(文件输入流)
●从文件系统中的某个文件中获得输入字节,例如文档复制时候,文件输入流主要负责“读取”文件,获得文件输入流;●用于读取诸如图像、图片数据之类的原始字节流(图像和图片数据是二进制的数据,字节流一般用于读取这类的二进制数据;而一般读文档等内容是字符串的数据时,一般不使用字节流,而是使用字符流去读取文档)...原创 2020-12-09 22:07:24 · 865 阅读 · 0 评论 -
Java输入输出流二:字节流分类
●字节流包括: 字节输入流:InputStream; 字节输出流:OutputStream;●字节输入流的父类是:ImputStream类,其包括多个子类。其中需要着重了解的有:FileInputStream(文件输入流),BufferedInputStream(缓冲输入流);后面对象序列化时,需要了解ObjectInputStream(对象输入流);●字节输出流的父类是:OutputStream类,其包括多个子类。需要着重了解的有,FileOutpu...原创 2020-12-09 17:24:24 · 325 阅读 · 0 评论 -
Java输入输出流一:File类
一:输入输出流●输入流: 常见的输入设备有键盘、扫描仪、文件等;●输出流:常见的输出设备有屏幕、打印机、文件等;●文件,既可以作为输入设备,又可以作为输出设备: 文件作为输入设备时:是读取文件中的内容;即输入流是读取数据; 文...原创 2020-12-09 17:12:46 · 582 阅读 · 0 评论 -
Java线程五:线程间通信
可以设想这样一种情况:取款时,账务余额不够了;顺理成章的解决方案是:等待存入足够的钱以后再进行取款操作。(这种业务场景很多,不要仅仅局限于银行存取款喽)这儿涉及线程间通信。如下示例:业务情况:Queue类:该类相当于一个容器,其有一个变量n;Producer类:充当生产者线程,该类负责对变量n的值进行加1运算;Consumer类:充当消费者线程,该类负责对变量n的值进行减1运算;或者认为Producer类负责数据的生产,Consumer类负责数据的取用;业务要求:生产一个消费原创 2020-12-08 19:42:08 · 175 阅读 · 0 评论 -
Java线程四:线程同步
由前面几篇文章可知:线程什么时候运行是不确定的,即:●各个线程是通过竞争CPU的时间而获得运行机会的;●各线程什么时候获得CPU时间,占用多久,是不可预测的;●一个正在运行的线程在什么地方被暂停是不确定的;上面几条都透露着几个字:不确定。这个问题,在实际开发中也会带来不可预测的结果,问题;……………………………………………………如下面问题:银行账户的存款和取款。(1)首先,存款和取款各是不同的线程在执行;(2)存款操作和取款操作都是分很多步骤执行;(3)不同的线程之间切换原创 2020-12-08 15:55:28 · 220 阅读 · 1 评论 -
Java线程三:sleep()方法;join()方法;线程的优先级
1.sleep()方法●sleep()方法使线程由正在运行状态转换到阻塞状态;线程暂时放弃CPU使用权;●sleep()方法是Thread类中的方法;●public static void sleep(long millis):静态方法,可直接用Thread类名字去调用;millis:毫秒,1000ms == 1s;●sleep()方法:应用场景可能有(1)需要计时的情况,每隔一定时间显示一下时间等;(2)对于一些需要定期刷新数据而不是一直刷新数据的情况;●需要注意一个线程到底能不能执.原创 2020-12-08 14:58:19 · 582 阅读 · 0 评论 -
Java线程二:线程的状态;线程的生命周期
1.线程的状态●新建(New):当创建一个Thread类或Thread子类对象时,线程就进入了新建状态;●可运行(Runnable):当创建好的线程对象去调用start()方法后,线程就进入了可运行状态;具体线程运行与否要看CPU有没有空,即这个线程获取了CPU的使用权,这个处于可运行状态的线程才会实际执行;有时,也称可运行状态为“就绪状态”。●正在运行(Running):一个处于可运行状态的线程,一旦获取了CPU的使用权,就可进入正在运行状态;●阻塞(Blocked):当线程遇到干扰时,会原创 2020-12-07 21:01:03 · 200 阅读 · 0 评论 -
Java线程(补):Callable:创建线程的第三种方式
1.Callable:创建多线程的第三种方式Callable接口是属于Executor框架(并发编程的一个框架)中的功能类,Callable接口和Runnable接口的功能相似,但功能比Runnable接口更强大。(1)Callable接口可以在任务结束时提供一个返回值,Runnable接口没有这个功能;(2)Callable接口的call()方法可以抛出异常,Runnable接口的run()方法不能抛出异常;(3)Callable接口的深化,可等到接触并发编程的时候再了解;Callab原创 2020-12-07 20:34:22 · 533 阅读 · 0 评论 -
Java线程一:进程和线程;创建线程继承Thread,实现Runnable接口
进程和线程:(1)什么是进程 1)例如记事本酷狗音乐等软件,程序启动运行后,操作系统会给其分配系统资源和内存空间;进程是系统层面的资源调度和分配单位; 2)进程就是在内存中运行的应用程序,进程都有自己独立的内存空间,该进程在执行过程中可以独享该块内存空间,所以一个进程出问题,不会影响其他进程; 3)大部分简单的应用程序只会对应一个进程;某些复杂的如杀毒软件、数据库软件等是由多个进程组成的; 4)早期的操作系统是单任务的,同时...原创 2020-12-07 19:16:16 · 494 阅读 · 0 评论 -
Java泛型三:自定义泛型方法
自定义泛型方法:(1)自定义泛型类:是类中的属性的类型可以为多种;(2)自定义泛型方法,则是方法的参数类型可以为多种;(3)泛型方法不一定写在泛型类里;(4)自定义泛型方法的实际应用常见还不清楚,知道定义形式后,以防以后遇到不认识;后续加深理解。public class GenericMethod { // 想打印某个对象的值,但预先并不知道该对象的是什么类型的 // (1)泛型方法不一定写在泛型类里;(2)<T>必须写在访问修饰符和返回值之间;(3)知道有这种形式原创 2020-12-06 20:08:03 · 968 阅读 · 1 评论 -
Java泛型二:自定义泛型类
可以发现形如:ArrayList<String> list = new ArrayList<String>(); 或者ArrayList<Integer> list = new ArrayList<Integer>(); 或者ArrayList<Cat> list = new ArrayList<Cat>();ArrayList(...原创 2020-12-06 19:45:42 · 601 阅读 · 0 评论 -
Java泛型一:泛型作为方法参数;【泛型作为方法参数】和【方法重载】的关联;?和T的区别(未写);
为什么需要泛型?如一个问题:Set set1 = new Set();定义了一个Cat类;向set1集合中添加cat对象;当遍历set1时候,需要用到Iterator迭代器;Iterator it = set1.iterator();其中需要用到的it.next()的方法的返回值是Object类型的,如果要调用Cat类中定义的方法就需要把返回值转型为Cat类型。但如果错误地写成:String c1 = (String)it.next();编译是不会报错的,只有在运行时才会报错。可以发现,如果不使用泛原创 2020-12-06 01:29:47 · 9804 阅读 · 0 评论 -
Java集合(补):TreeSet
由前面可知,List是有序的集合,其可以排序;而Set和Map是不涉及到排序的;但是,除了List,Set和Map,还有一个TreeSet也是有序的,所有对于TreeSet集合也是可以进行排序的。1.TreeSet存储String类型数据……………………………………………………实测发现:2.TreeSet存储Integer型数据实测发现:如果没有相等的,那么会返回集合中小于这个数的 最大的那一个数3.TreeSet存储自定义类型对象.原创 2020-12-05 19:36:50 · 163 阅读 · 0 评论 -
Java集合排序二:Comparable接口;compareTo()方法;Comparator接口和Comparable接口比较;
1.Comparable接口Comparable接口: (1)java.lang包下的接口; (2)Comparable接口只有一个方法:int compareTo(T o)方法; 如: obj1.compareTo(obj2):obj1小于、等于、大于obj2时,分别返回负整数、零、正整数。 (3)一个集合中的元素是某个自定类型,如果要多其排序,那么这个自定义类需要实现Compa...原创 2020-12-05 18:57:56 · 5255 阅读 · 0 评论 -
Java集合排序一:基本数据类型和字符串数据类型的排序;自定义数据类型的集合排序:Comparator接口;
疑问:存储在集合中的数据如何排序?1)存储在集合中的基本数据类型和字符串类型如何排序?2)存储在集合中的字符串类型如何排序?3)自定义的类型,在集合中如何排序?(Comparator接口和Comparable接口,这两个接口中定义了比较器,自定义的类可以依照这个比较器进行排序)回顾:以前数组排序的排序是:那么集合如何排序?集合排序是使用Collections类中定义的sort()方法对List集合中的数据进行排序:1.基本数据类型和字符串数据类型的排序List中整型数据的原创 2020-12-05 17:28:02 · 655 阅读 · 0 评论 -
Java集合四:Map简介;Map常用方法;
1.Map简介Map接口中常见方法:常用方法有:clear()清空Map;get(key k):根据key获取value;keySet():取出所有key的集合;put(Kkey,V value):向Map中添加元素;remove(Object key):根据key删除某个键值对元素;等。……………………………………………………HashMap的构造方法有多种,等到用到的时候再深入研究的。其中有一个加载因子,默认是0.75,这其中设计hash表的数据结构,可暂.原创 2020-12-05 01:42:36 · 285 阅读 · 0 评论 -
Java集合三:Set简述;方法,问题列举;hashcode;Set查找和删除;
1.Set简述Set(接口):元素无序,不可以重复(内存地址不可重复),称为集;常见的是实现类HashSet,即哈希集;由于HashSet可以出现null元素,又因为其不可以重复,所以做多只能有一个null元素;HashSet具有良好的存取和查找性能,更适用于频繁存取和查找的场景。HashSet构造方法2.方法,问题列举add()方法:Set只有这一种add()方法取Set中元素时,因为Set是无序的,所以没有index,此时需要使用迭代器去获取So如何得到迭原创 2020-12-02 19:14:57 · 916 阅读 · 0 评论 -
Java集合二:List概述,方法,问题列举
1.List概述,仅供浏览,重点还是List的常用方法的用法Collection接口是输入util包的,需要手动导入。其中主要方法有:add():添加元素的方法;clear():清空集合的方法;contains()方法:判断集合中时候有某元素的方法;isEmpty():判断集合是否为空的方法;iterrator():集合遍历方法;size()方法:获取集合元素数量的方法等等;……………………………………………………List接口为Collection接口的子接口,其中新添的方法原创 2020-12-02 15:46:50 · 158 阅读 · 0 评论 -
Java集合一:概述
1.集合前置介绍(1)集合是一个工具类,其可以存储任意数量的具有共同属性的对象;(2)集合的长度可以动态改变,这有别于数组;(3)应用场景:2.集合框架的体系结构Collection:存储类的对象 (1)List接口:序列;有序,允许重复。实现类:ArrayList。 (2)Queue接口:队列;有序,允许重复。实现类:LinkedList(LinkedList类同时也实现了List接口,表示的是链表的内...原创 2020-11-26 16:59:15 · 191 阅读 · 0 评论 -
Java字符串StringBuilder二:StringBuilder常用方法举例(关键还是查询API和手动测试)
注:这篇博客并没有什么内容……1.append()方法append()方法:后面追加内容public class StringBuilderDemo1 { public static void main(String[] args) { StringBuilder str = new StringBuilder("你好"); // 字符串后面追加内容:append System.out.println(str.append(",imooc")); System.原创 2020-11-26 01:20:28 · 306 阅读 · 0 评论 -
Java字符串StringBuffer一:前置介绍,StringBuilder类常见方法罗列,String和StringBuilder的区别和应用场景
1.前置介绍(1)发现在使用String类处理字符串时,由于字符串的不可变性,会产生很多中间变量,而且也会产生很多在常量池中废弃的数据,而使用StringBuilder可以避免这种情况的发生;(2)而在StringBuilder出现之前,StringBuffer是很常用的:注:StringBuilder和StringBuffer的方法基本上是一样的,在程序开发中基本是可以完全替代的; 线程安全的时候,其速度相对会慢一些;2.StringBuilder类常见方法罗列...原创 2020-11-26 00:37:26 · 187 阅读 · 0 评论 -
Java字符串String五:字符串的不可变性
1.字符串的不可变性,三个简单例子public class StringDemo6 { public static void main(String[] args) { // String的不可变性 // String对象一旦被创建,则不能修改,是不可变的 // 所谓的修改其实是创建了新的对象,所指向的内存空间不变 String s1 = "imooc"; // 在常量池中生成一个"imooc"字符串,在栈中有一个s1引用指向这个字符串 s1 = "hello,"原创 2020-11-26 00:05:33 · 361 阅读 · 0 评论 -
Java字符串String四:==和equals()方法的区别;附compareTo()方法和concat()方法
1.==和equals()方法的区别String类重写了equals()方法,String类的equals方法只要值一样就返回true,==比较的是对象的内存地址是否一样。(1)使用new这种方式创建对象时,会在堆中新开辟内存空间存放对象;(2)采用直接变量赋值的方式创建的对象的时候,会从常量池的地方开辟空间存放值;public class StringDemo5 { public static void main(String[] args) { String str1原创 2020-11-25 23:21:33 · 226 阅读 · 0 评论 -
Java字符串String三:字符串和Byte数组间的相互转换
网络上传输的数据是二进制字节型的,所以在进行网络传输时,需要字符串和Byte数组的相互转换。public class StringDemo3 { public static void main(String[] args) throws UnsupportedEncodingException { String str = new String("JAVA 编程 基础"); // 字符串转换成byte字节数组 byte[] arrs = str.getBytes();原创 2020-11-25 17:38:42 · 793 阅读 · 0 评论 -
Java字符串String二:String类常用方法举例
1.String的方法很多,没必要全部一次性记忆,用的时候可以再查常见方法举例:原创 2020-11-25 17:19:47 · 211 阅读 · 0 评论 -
Java字符串String一:字符串定义的方式
String是一个类,如:String s1 = "zifuchaun";这是把s1当成了一个String类型的对象;1.创建字符串对象常见的三种方式……………………………………………………(注:(1)getBytes():方法的作用是在网络传输的时候,字符串需要以二进制字节形式的传输; (2)这些方法用时即查就行,没必要硬记;)2.字符串定义的其他方式…………………………………………………………………………………………………………...原创 2020-11-25 16:02:15 · 667 阅读 · 0 评论 -
Java包装类五:包装类的常见问题
包装类的常见问题(单纯罗列,仅供浏览)原创 2020-11-25 11:45:32 · 210 阅读 · 0 评论 -
Java包装类四:基本数据类型和字符串之间的相互转换,包装类对象的初始值,包装类对象间的比较,附带内容
1.基本数据类型和字符串之间的相互转换public class WrapTestTwo { public static void main(String[] args) { // 一:基本数据类型转成字符串:通过包装类的toString方法 int t1 = 2; String s = Integer.toString(t1); System.out.println(s); // 二:字符串转换成基本数据类型 // 第一种:通过包装类的parse方法原创 2020-11-25 11:36:07 · 185 阅读 · 0 评论 -
Java包装类三:基本数据类型和包装类的区别
1.基本数据类型和包装类的区别这部分主要是加强对包装类的整体感官原创 2020-11-24 19:06:27 · 181 阅读 · 0 评论 -
Java包装类二:装箱和拆箱的简单示例程序;装箱和拆箱分析
装箱和拆箱:基本数据类型和对应包装类之间的转换装箱和拆箱都有自动和手动两种方式,以下为简单示例:这篇博客主要掌握装箱和拆箱的基本操作即可public class WrapTestOne { public static void main(String[] args) { // 装箱:基本数据类型转换成包装类 // 1.自动装箱 int t1 = 2; Integer t2 = t1; // 编译器会把t1中的数据提取出来,通过实例化的方式,来构成t2对象 // 2原创 2020-11-24 17:38:36 · 308 阅读 · 0 评论 -
Java包装类一:包装类作用,基本数据类型和包装类的对应,包装类简介
1.包装类的作用Java是一种面向对象的编程语言,却存在几个不具有对象特征的异类;他们不能像对象一样进行属性和方法的调用,也无法进行相互之间的对象化处理。包装类的存在就是为了解决这些问题,让他们能够像对象一样进行交互。通过包装类可以让基本数据类型获取对象一样的特征,行使对象相关的权益。2.基本数据类型和包装类的对应3....原创 2020-11-24 17:10:17 · 482 阅读 · 0 评论 -
Java异常十三:异常链,异常链常见问题
1.异常链一个异常链的简单示例:public class TryDemFive { public static void main(String[] args) { try { testThree(); } catch (Exception e) { e.printStackTrace(); } } public static void testOne() throws HotelAgeException{ // testOne()方法抛出了Hot原创 2020-11-24 02:42:16 · 502 阅读 · 0 评论 -
Java异常十二:自定义异常概念,自定义异常流程,自定义异常的常见问题
1.自定义异常的概念Java异常十一这篇博客中,介绍了酒店入住时年龄小于18或大于80的情况下抛出异常。如果在一个项目中,这种类型的异常会频繁的出现,或者我们希望借由特定的类型来去针对这种特定业务进行描述的话,那么可以通过自定义异常类来实现这个需求。2.自定义异常流程第三步,使用自定义的异常类:public class TryDemoFour { public static void main(String[] args) { // TODO Auto-genera原创 2020-11-24 01:18:50 · 1935 阅读 · 0 评论