![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础-异常/IO/File/多线程-学习笔记
Anthony_tester
这个作者很懒,什么都没留下…
展开
-
Java异常处理-1-异常概述和分类
最近一段时间换了新工作,中断了Java基础知识的学习。做一件事情,总能找出千万个理由去放弃,很难找到一个说服自己的理由去坚持下去。当前,我自己也面临很多新知识学习的任务挑战,有Groovy语言,有Jenkins的Pineline,有Git,有Docker,还有Linux,以及SQL,最后还有英语。挣扎了几天,发现Groovy语言看起来很简单,如果有Java基础,但是也只限于基本语法部...原创 2018-06-16 23:29:12 · 876 阅读 · 0 评论 -
Java异常处理-2-JVM异常处理方式和try catch处理异常
前面我们大概了解了什么是异常和为什么要处理异常。这篇我们先通过了解JVM是如何默认处理异常,然后我们是如何主动去捕获和处理异常的。1.JVM处理异常的方式 在Java中,Java虚拟机(JVM)是如何处理异常的呢?,在执行Main函数的时候,如果运行过程中遇到异常问题,有两种处理方式:1)自己将该问题处理,然后继续运行 2)自己没有针对该问题处理方式,只有交给调用Main的...原创 2018-06-17 23:54:39 · 2189 阅读 · 3 评论 -
Java异常处理-3-throws方式抛出异常
在异常处理之中,出了我们自己主动捕获处理异常,还有一种处理方式,那就是抛出异常。抛出就是抛出给JVM,然后打印错误信息到控制台,中断程序的运行。1.先来看看之前我们做过的不抛出异常 这里利用Person这个类,在对年龄进行赋值的时候,进行判断在一个合理范围,如果超过范围就提示年龄非法。之前我们没有学习异常是,通过打印语句来实现输出年龄非法的消息。package excepti...原创 2018-06-21 23:43:41 · 3972 阅读 · 0 评论 -
Java异常处理-4-throws和throw的区别和finally关键字
上一篇,我们介绍了Throws抛出异常,也使用了throw语句,这篇先来看看两者区别,然后在看看finally关键字的基本用法。1.throw的概述 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,用throw把异常对象抛出。看看下面代码的throw后面跟的是一个new Exception对象。public void setAge(int age) { if...原创 2018-06-22 23:36:13 · 1480 阅读 · 0 评论 -
Java异常处理-5-finally相关面试题
这篇介绍两个关于finally的面试题,第一个是概念题,就考察概念,因为两个英文单词很像。第二个是代码考察,特别注意return语句和finally之间执行先后顺序。1.final 和finally 和finalize三者的区别 三个单词看起来很接近,其实三个之间没有任何关系,记住下面三者概念就好办。final可以修饰类和方法和变量。当修饰类的时候,不能被继承;当修饰方法的...原创 2018-06-23 23:17:57 · 944 阅读 · 0 评论 -
Java异常处理-6-异常注意事项和练习题
我们知道,异常可以使用try catch 和throw抛出,什么情况下使用捕获或者抛出呢?如果在继承中,子类如何处理异常?这两个问题,我们这篇来总结下,然后来几个异常的练习题。1.异常注意事项- 子类重写父类方法时,子类的方法必须抛出相同的异常或者父类异常的子类。(父亲坏了,儿子不能更坏)- 如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者他的子集。(子类不能抛出父类没有...原创 2018-06-29 23:33:11 · 5516 阅读 · 0 评论 -
Java中File类-7-File类和构造方法
在Java中,File类的相关操作是很多,程序的业务代码一般就是直接操作数据。数据主要是来源数据库或者各种各样的文件类型。这篇开始,用几篇文章来记录学习File类的过程。在Selenium自动化测试中,我们用到过File类来写日志输出到文件的功能,还有截图的底层也是File来实现的。1.File类的概述 打开JDK API,搜索File,可以找到是java.io包下的一个类。...原创 2018-07-05 00:12:40 · 6233 阅读 · 1 评论 -
Java中File类-8-File类创建/重命名/删除功能
本篇来学习Java中File类的创建功能,打开API文档,搜索并打开File页,能找到三个创建的方法:createNewFile() mkdir() mkdirs() ,三个方法返回都是布尔类型。然后再看看重命名和删除功能。 1.方法createNewFile() 这个方法是用来创建文件,如果文件存在就不创建返回false,如果不存在就创建,返回true。这里我们在Eclip...原创 2018-07-05 11:43:48 · 6139 阅读 · 1 评论 -
Java中File类-9-File类的判断功能
本篇来学习File类的判断功能,主要的判断有:判断是否是目录,判断是否是文件,判断是否存在,判断是否可读,判断是否可写,判断是否隐藏。前面我们知道了判断是否存在这个方法,下面我们一次学习其他方法。1.判断是否是文件和判断是否是文件夹 我在Eclipse项目根目录分别创建了aaa的一个文件夹,abc.txt文件。执行下面代码,运行输出两个都是true.package file;...原创 2018-07-05 23:53:30 · 4141 阅读 · 0 评论 -
Java中File类-10-File类的的获取功能
接着来学习Java中的File类的方法,这篇来学习获取功能,也就是API文档中看到的getxxx方法。主要有获取绝对路径,获取路径,获取名称,获取长度,字节数,获取最后一次修改时间,毫秒值,获取指定路径下所有文件或者文件夹的名称的数组,获取指定路径下文件或文件夹的File数组。1.获取绝对路径 在Eclipse项目的根目录下创建一个abc.txt和aaa文件夹,下面演示ab...原创 2018-07-08 00:02:19 · 4696 阅读 · 0 评论 -
Java中File类-11-File类输出指定路径下指定后缀名的文件名称
前面我们学习了File获取指定路径下的所有文件或者文件夹的名称,还有获取指定路径下所有的文件对象。这篇,我们分别利用这两个方法来做一个练习题,例如输出桌面文件中所有的png文件名称。1. 文件名称方法如果你桌面没有png文件,你可以换成jpg,或者docx,或者pdf,MP4等。package file;import java.io.File;public class Dem...原创 2018-07-08 17:51:29 · 4684 阅读 · 0 评论 -
Java中IO流-12-IO流的概述和分类
前面几篇文章学习了File类的基本使用,但是发现了一个问题没有,目前我们都没有讲文件的打开和编辑修改的代码,原因就是我们需要学习IO流才能做到这些。这篇,来学习IO流的基本概念和分类以及注意事项,纯概念没有代码。1.掌握几个概念1)IO流用来处理设备之间的数据传输,I是单词input的缩写,O是output的缩写,分别表示输入和输出。2)Java对数据的操作是通过流的方式,包括打开一...原创 2018-07-08 22:26:51 · 843 阅读 · 0 评论 -
Java中IO流-13-FileInputStream类
这篇,我们开始学习IO包下常见的类和常见的方法,第一个要学习的就是InputStream这个抽象类下的子类和相关方法。由于是抽象类,所以不能用来创建实例对象,所以我们需要学习这个抽象类的子类。这篇开始学习FileInputStream类。1.API基本介绍 打开JAVA JDK API文件,搜索并找到FileInputStream类。可以看到这么一句话: FileInputS...原创 2018-07-09 22:47:27 · 1594 阅读 · 2 评论 -
Java中IO流-14-FileOutputStream类
上一篇,学习了FileInputStream类,知道了read()方法读取是一个一个字节读取内容,而且返回类型是int类型。这里简单解释下为什么返回类型是int类型,而不是byte类型。byte类型是占用一个字节,有8个比特位,而int类型占用4个字节,一共32个比特位。原理就是,如果读取到一个字节八个位都是1,也就是11111111,这个如果是byte类型,那么就表示-1,read方...原创 2018-07-11 00:34:33 · 527 阅读 · 0 评论 -
Java中IO流-15-文件拷贝核心6行代码
前面两篇,我们分别学习了read和write方法。知道如何读文件和如何写文件,那么,我们就知道如何拷贝文件。今天,我们就来写一个拷贝图片的代码,然后再写一个拷贝视频的代码,最后来分析下这种拷贝文件的缺点。文件拷贝的核心6行代码 这里说的是6行代码,待会会在代码中标注出来,真的,掌握了这6行核心代码,IO流的操作就算基本学会了,学好了。下面来一个图片拷贝例子,我桌面有一个te...原创 2018-07-11 23:42:38 · 798 阅读 · 3 评论 -
Java中IO流-16-字节数组拷贝之available方法
前面一篇,我们知道的拷贝文件的方法都是一个一个字节读,然后一个一个字节写入文件,这样的拷贝方式效率很低。这篇,我们来学习一个字节数组拷贝方法,效率相对来说,提高了很多。这个原理是这样的,输入流读取文件到一个字节数组中,然后输出流把这个字节数组的数据写入到文件。1.代码演示 还是模拟上一篇的一个比较小的mp4的文件拷贝。下面代码中available是一个获取字节长度的方法,...原创 2018-07-15 22:36:11 · 1500 阅读 · 0 评论 -
Java中IO流-17-字节数组拷贝之BufferedInputStream和BufferedOutputStream
这篇来学习Java中利用缓存区来进行文件读写操作。一个输入流缓存(BufferedInputStream)和输出流缓存(BufferedOutputStream),理解了其中一个,另外一个就也理解了。下面,我们先看看BufferedInputStream这个类的API介绍和源码实现。1.BufferedInputStream的原理 在这个类的API中,可以看到这么一句描述的话:...原创 2018-07-19 23:47:05 · 1149 阅读 · 1 评论 -
Java中IO流-18-flush和close方法的区别
本篇来学习一个小的知识点,flush方法和close方法的区别。前面我们介绍了和使用了close方法,知道是用来关闭流的操作,但是并没有介绍flush方法,字面意思的刷新的意思。下面我们来先看看一个例子,然后引出flush方法。1.如果不关闭流执行代码package io;import java.io.BufferedInputStream;import java.io.B...原创 2018-07-22 00:11:38 · 11528 阅读 · 1 评论 -
Java中IO流-19-字节流写中文的问题
前面我们在介绍字节流读写文件都是用英文内容来介绍,那么如果用字节流来读取中文的文件内容会有什么问题呢?当然,我们前面文章提到过,除了字节流还有一种字符流,字符流用来用来处理纯字符的文件。这篇,我们还没有介绍字符流操作,我们尝试用字节流方式去读取文件,然后看看会发生什么问题吧. 由于我们大部分人都是中文的操作系统,Eclipse安装之后,右键项目,属性,可以看到默认的编码方式...原创 2018-07-22 23:08:27 · 1688 阅读 · 0 评论 -
Java中IO流-20-流的标准异常处理代码
前面我们学习了异常的处理,在IO流中,很容易出现异常。例如文件路径写错了,造成找不到文件,这种时候,由于IO流是底层的操作,我们不能使用抛出异常,而需要使用try 和finally语句。在Java1.6版本之前和Java 1.7之后,关于IO流的异常处理代码是有区别的,我们先来看Java1.6之前的代码,然后看看1.7以后的异常处理代码。1.JAVA 1.6标准IO流异常处理代码...原创 2018-07-24 23:45:32 · 1457 阅读 · 0 评论 -
Java中IO流-21-图片加密简单实现
这篇我们利用流来处理图片加密,当然这里没有处理到打开图片,提示输入密码的这么好友好效果。图片加密,也是把一个图片字节读取,然后进行加密运算,最后拷贝成新的图片文件。简单来说,这个过程原理就是,一个数如何被同一个数异或两次,那么结果就等于这个数本身。第一次进行异或就是图片加密过程,给图片每一个字节都进行加密,第二次异或就是解密过程。1.图片加密过程package io;im...原创 2018-07-25 23:21:02 · 2602 阅读 · 0 评论 -
Java中IO流-22-IO流拷贝文件练习题
这篇我们来做练习,通过IO流操作练习,结束字节流操作学习,下一个学习的知识点是字符流操作。第一个编程题是,在控制台输入一个文件路径,拷贝到当前路径(Eclipse项目根路径)。第二个练习题就是把控制台输入字符串写入到指定的文件中去。1.题目:控制台输入一个文件路径,拷贝该文件到当前路径分析:1)定义方法处理键盘录入,对文件路径进行判断,如果是文件就返回2)返回的是一个文件对象,在m...原创 2018-07-31 23:57:13 · 2022 阅读 · 0 评论 -
Java中IO流-23-字符流FileReader类
前面学习了字节流操作,现在开始学习字符流操作。字符流操作也很简单,还是基于前面介绍的核心6行代码。什么是字符流呢,我们知道任何数据存储在计算机上都是以二进制字节存储。字符流是可以直接读写字符的IO流。字符流读写字符,先是读取到字节,把字节转换成字符,如果要写出字符流,也是先把字符转换字节再写出。1. FileReader类,读取一个字符在API文档,搜索找到FileReader类,可以看到...原创 2018-08-05 00:08:08 · 510 阅读 · 0 评论 -
Java中IO流-24-字符流FileWriter类
前面一篇,学习了FileReader的基本使用,用来读取字符流,接下来,这篇,学习字符流写入到文件。在Java IO流中,处理字符流写入的类是FileWriter。FileWriter可以写入单个字符,可以写入字符串,还可以根据开始和结束的索引范围去写入字符流。1.FileWriter的API基本了解在JDK API文档上搜索FileWriter,可以看到它直接父类是OutputStrea...原创 2018-08-05 22:45:44 · 626 阅读 · 0 评论 -
Java中IO流-25-IO字符流拷贝文件
前面我们分别学习了FileReader和FileWriter,一个是读字符流,一个是写字符流的。那么,有了这两个读写功能,我们就可以实现文件的拷贝,只不过和前面不同,这次是利用字符流来实现拷贝过程。1.字符流拷贝文件基本代码package io;import java.io.FileNotFoundException;import java.io.FileReader;impor...原创 2018-08-05 23:09:16 · 504 阅读 · 2 评论 -
Java中IO流-26-IO流字符流带缓冲区和相关方法
这篇我们介绍字符流读写中带缓冲区的方法,前面我们在字节流中知道了缓冲区的概念和作用。这里就直接介绍,带缓冲区读字符的方法是BufferedReader,写字符的方法是BufferedWriter.这两个方法分别传入的对象是FileReader和FileWriter。1.API基本介绍BufferedReader,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指...原创 2018-08-09 23:28:36 · 1375 阅读 · 0 评论 -
Java中IO流-27-装饰设计模式
装饰这个词来自建筑行业,新房装修经常听到这个词。在Java中装饰模式,简单理解就是,把一个类给包装起来,放在一个新类中,新的类会在原来被包装类功能基础上,增加别的功能。这样保证出来的新类就具有强大的功能,其实有点像继承,有没有。在继承中,子类拥有父类的属性和方法,但是耦合性太强。父类发生改变,子类一定也跟随改变。装饰模式,和继承最大的区别就是耦合性不那么强了。1.装饰设计模式代码例子...原创 2018-08-12 00:21:58 · 463 阅读 · 0 评论 -
Java中IO流-28-用指定编码表读写文件
前面说过,文件存储的文本内容,在读和写的时候,是和编码表有关的。例如,如果你是在英文的windows7系统上,打开一个记事本,写入一些中文。如果默认保存,再次打开,可能出现乱码,所以,我们很多人知道需要另存为unicode格式,但是具体的原因不知道,本篇就来学习这个过程,对比GBK和utf-8两个编码表读写文件的过程。1.默认编码表读写文件项目下创建一个gbk和一个utf-8两个文本文件,...原创 2018-08-12 22:30:55 · 2642 阅读 · 0 评论 -
Java中IO流-29-IO流练习题:统计一个文件中字符出现个数
这篇来利用IO流知识来做两个练习题。第一个题目是在文本文件中统计字符出现次数,并写入到一个txt文件里。第二个练习题是模拟,试用软件30天倒计时,这里我们简化一下,运行一次代码,试用天就减去1天。1.文本文件内统计字符出现个数题目:给定一个文本文件,统计字符出现个数并写入到文件times.txt中。分析:前面我们学习双列链表的时候,首选就是用HashMap来解题。只不过当时字符来源...原创 2018-08-13 22:29:54 · 5338 阅读 · 0 评论 -
Java中IO流-30-File类递归
本篇介绍递归,先要理解什么是递归。递归,就是方法调用本身。在学习Java的过程中,最能想起使用递归的就是数学里面阶乘,第二个就遍历一个路径下文件。个人经验,在测试开发面试的时候,遇到递归思想解决问题的面试题还是比较容易碰上。1.数学中阶乘例如,计算10的阶乘。package io;public class Demo6_Digui { public static void m...原创 2018-08-13 23:22:42 · 400 阅读 · 0 评论 -
Java中IO流-31-File类递归练习-求一个文件夹的大小
继续来利用File递归做练习题,这里要键盘给定一个文件夹路径,然后计算这个文件夹大小。例如你在c盘,你的用户名下,右键Desktop这个文件夹,点击属性,就可以看到小括号内的xxxx字节,这个xxx字节就是文件夹大小。1.直接看代码前面一篇我们写过了获取文件夹路径的方法,所以这里就重点分析如何获取一个文件夹的大小。在Java中,获取文件大小是通过length()方法来计算的,但是文件对象如...原创 2018-08-14 23:56:30 · 724 阅读 · 0 评论 -
Java中IO流-32-File类递归练习-删除文件和文件夹拷贝
这篇继续来做递归的File操作相关练习题,第一题是删除文件夹,第二个是模拟两个文件夹之间的拷贝。因为都存在文件夹下有文件,所以都需要利用递归调用,第二条,文件拷贝还需要用上IO流的读和写。1.删除一个文件夹下所有文件和子文件夹分析:1)获取该文件夹下的所有文件和文件夹,之前前面做过,已有代码2)遍历文件数组3)判断是文件就直接删除4)判断是文件夹,就递归调用5)循环结束...原创 2018-08-16 23:27:46 · 560 阅读 · 0 评论 -
Java中IO流-33-File类递归练习-文件夹下文件和文件夹按层级打印
继续做一个File类相关的递归练习题,需求是,键盘给定一个文件夹路径,按照层级打印该文件夹下文件和文件夹。1. 分析前面我们练习了很多次获取文件夹路径的方法,下面重点分析打印的思路。 * 1.获取所有文件夹和文件,存储在File数组中 * 2.遍历数组 * 3.无论是文件还是文件夹都需要打印 * 4.如果是文件夹,递归调用2.打印初步代码实现...原创 2018-08-18 23:19:54 · 627 阅读 · 0 评论 -
Java中IO流-34-递归练习-斐波那契数列
个人认为,学习递归,永远绕不开斐波那契数列,不管什么语言,都能见到这个题目。关于斐波那契数列,我们很久不学习数学,可能不是很清楚,但是和你说这个不死神兔,每个月生一对兔子,你就知道这个题目了。1.兔子生兔子的经典问题 首先,斐波那契是西元1202年,意大利一个青年叫斐波那契,在他一本著作提到一个有趣的问题:假设一对刚出生的小兔一个月之后就能长成大兔,再过一个月就生下一对小兔...原创 2018-08-20 23:11:11 · 475 阅读 · 0 评论 -
Java中IO流-35-递归练习-求1000的阶乘的所有零和尾部零的个数
继续来一个比较综合的编程练习题,还是属于递归范围,我们先不用递归,用最常用的办法去解决,然后看看递归是如何解决的。个人觉得,必须要有第一种方法。比较第一种是一种正常的解题思路和思维过程,递归有时候我们不一定能想起来并实现。需求:求1000的阶乘,这个结果数包含全部数字0的个数和尾部数字0的个数。例如一个数,1303087000,全部有5个0,尾部有3个0.1.普通方法简单来写一下思路。...原创 2018-08-21 23:49:13 · 1088 阅读 · 0 评论 -
Java多线程-36-多线程的概念
这篇开始学习Java中多线程这块的知识,本篇就来学习几个简单的改变,先对多线程有一个概念性的了解就好。1.什么是线程1)线程是程序执行的一条路径,一个进程中可以包含多个进程。2)多线程并发执行可以提高程序的效率,可以同时完成多项工作。如何理解呢?先看进程,我们知道不管是linux还是windows上,软件服务都是以进程在后台执行的。电脑中很多软件服务,也就是说有很多进程。那么是如何...原创 2018-08-23 22:46:25 · 631 阅读 · 0 评论 -
Java多线程-37-多线程实现方式一
这篇开始学习线程相关代码知识,本篇开始介绍线程类Thread的基本使用方法,也就是通过调用start()方法去启动多线程。1.API基本内容在JDK API文档中,搜索并打开Thread类。可以发现Thread类在lang包下,所以不需要导入包。可以找到这么一句话:创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可...原创 2018-08-24 23:51:43 · 535 阅读 · 0 评论 -
Java多线程-37-多线程实现方式二
前面一篇介绍了多线程的实现方式之一是利用Thread类的子类对象去调用start()方法,这篇,介绍实现多线程的第二种方式。那就是,创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。1 查询Runnable接口搜索并打开Runnable接口,发现只有一个Run方法,Run方法的作...原创 2018-08-25 23:34:21 · 481 阅读 · 0 评论 -
Java多线程-38-实现runnable的原理和两种多线程的区别
前面两篇介绍了两种多线程的实现过程,第一种是通过继承Thread类来调用start()方法,第二种是实现Runnable接口并重写了run方法,然后给Thread有参构造传递一个runnable的引用来实现。这篇,我们先来看看第二种方式的实现原理,然后分析和对比两种多线程实现的区别和优缺点。1.实现runnable的原理看下面代码,然后ctrl+点击鼠标查看Thread的有参构造,跟着ta...原创 2018-08-27 23:07:51 · 1817 阅读 · 0 评论 -
Java多线程-39-匿名内部类实现多线程
前面分别了解了两个实现多线程的方式和优缺点对比。有时候,我们会使用匿名内部类来实现多线程,因为这样做代码更加简单。下面,就用匿名类分别实现Thread继承和实现Runnable接口的两个多线程方式。package thread;public class Demo3_Thread { public static void main(String[] args) { //匿名内...原创 2018-08-28 23:26:22 · 2001 阅读 · 0 评论