Java备忘录//21-27

day21

异常:就是程序中出现的不正常的现象(错误与异常)
异常的继承体系:
Throwable: 它是所有错误与异常的超类(祖宗类)
|- Error 错误,修改java源代码
|- Exception 编译期异常, javac.exe进行编译的时候报错
|- RuntimeException 运行期异常, java出现运行过程中出现的问题

异常处理的两种方式:
1,出现问题,自己解决 try…catch…finally
try{
可能出现异常的代码
} catch(异常类名 对象名){
异常处理代码
} finally {
异常操作中一定要执行的代码
}
2,出现问题,别人解决 throws
格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2,…{}
public void method() throws Exception{}

异常分类
异常的根类是Throwable,其下有两个子类:Error与Exception,平常所说的异常指Exception。
严重错误Error,无法通过处理的错误
编译时异常Exception,编译时无法编译通过。如日期格式化异常
运行时异常RuntimeException,是Exception的子类,运行时可能会报错,可以不处理。如空指针异常

异常基本操作
创建异常对象
抛出异常
处理异常:
捕获处理,将异常获取,使用try/catch做分支处理
try{
需要检测的异常;
} catch(异常对象) {
通常我们只使用一个方法:printStackTrace打印异常信息
}
声明抛出处理,出现异常后不处理,声明抛出给调用者处理。
方法声明上加throws 异常类名
注意:异常的处理,指处理异常的一种可能性,即有了异常处理的代码,不一定会产生异常。如果没有产生异常,则代码正常执行,如果产生了异常,则中断当前执行代码,执行异常处理代码。

异常注意事项
多异常处理
捕获处理:
1多个异常可以分别处理
2多个异常一次捕获多次处理
3多个异常一次捕获,采用同一种方式处理
声明抛出异常:
声明上使用,一次声明多个异常

运行时异常被抛出可以不处理。即不捕获也不声明抛出
如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集
父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
当多异常处理时,捕获处理,前边的类不能是后边类的父类

自定义异常
如果Java没有提供你需要的异常,则可以自定义异常类。
定义方法:编译时异常继承Exception,运行时异常继承RuntimeException。

day22

递归: 方法定义中调用方法本身的现象

//直接递归
public void methodA(){
    methodA();
}
//间接递归
public void metohdB(){
    methodC();
}
public void methodC(){
    methodB();
}

递归注意实现
要有出口,否则就是死递归
次数不能太多,否则就内存溢出

File: 文件和目录路径名的抽象表示形式
构造方法:
public File(String pathname) 通过给定的文件或文件夹的路径,来创建对应的File对象
public File(String parent, String child) 通过给定的父文件夹路径,与给定的文件名称或目录名称来创建对应的File对象
public File(File parent, String child)通过给定的File对象的目录路径,与给定的文件夹名称或文件名称来创建对应的File对象

路径的分类:
绝对路径, 带盘盘符
E:\Workspace\day20_File\abc.txt
相对路径, 不带盘符
day20_File\abc.txt
注意: 当指定一个文件路径的时候,如果采用的是相对路径,默认的目录为 项目的根目录

方法
public boolean createNewFile()创建文件
返回值为true, 说明创建文件成功
返回值为false,说明文件已存在,创建文件失败
public boolean mkdir() 创建单层文件夹
创建文件夹成功,返回 true
创建文件夹失败,返回 false
public boolean mkdirs() 创建多层文件夹
public boolean delete()
删除此抽象路径名表示的文件或目录。
如果此路径名表示一个目录,则该目录必须为空才能删除
public boolean isDirectory() 判断是否为文件夹
public boolean isFile() 判断是否为文件
public boolean exists() 判断File对象对应的文件或文件夹是否存在
public String getAbsolutePath() 获取当前File的绝对路径
public String getName() 获取当前File对象的文件或文件夹名称
public long length() 获取当前File对象的文件或文件夹的大小(字节)
public File[] listFiles() 获取File所代表目录中所有文件或文件夹的绝对路径

day23

IO流的分类
|- 字节流
|- 字节输入流 InputStream 抽象类
|- FileInputStream 操作文件的字节输入流

|- 字节输出流 OuputStream抽象类
|- FileOutputStream 操作文件的字节输出流

|- 字符流
- |- 字符输入流 Reader抽象类
– |- InputStreamReader 输入操作的转换流
— |- FileReader 用来操作文件的字符输入流(简便的流)
- |- 字符输出流 Writer抽象类
– |- OutputStreamWriter 输出操作的转换流
— |- FileWriter 用来操作文件的字符输出流(简便的流)

day24

字节输入流 InputStream
FileInputStream 操作文件的字节输入流
BufferedInputStream高效的字节输入流

字节输出流 OutputStream
FileOutputStream 操作文件的字节输出流
BufferedOutputStream 高效的字节输出流

字符输入流 Reader
FileReader 操作文件的字符输入流
BufferedReader 高效的字符输入流
InputStreamReader 输入操作的转换流(把字节流封装成字符流)

字符输出流 Writer
FileWriter 操作文件的字符输出流
BufferedWriter 高效的字符输出流
OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)

方法:
读数据方法:
read() 一次读一个字节或字符的方法
read(byte[] char[]) 一次读一个数组数据的方法
readLine() 一次读一行字符串的方法(BufferedReader类特有方法)
readObject() 从流中读取对象(ObjectInputStream特有方法)

写数据方法:
write(int) 一次写一个字节或字符到文件中
write(byte[] char[]) 一次写一个数组数据到文件中
write(String) 一次写一个字符串内容到文件中
writeObject(Object ) 写对象到流中(ObjectOutputStream类特有方法)
newLine() 写一个换行符号(BufferedWriter类特有方法)

向文件中写入数据的过程
1,创建输出流对象
2,写数据到文件
3,关闭输出流

从文件中读数据的过程
1,创建输入流对象
2,从文件中读数据
3,关闭输入流

文件复制的过程
1,创建输入流(数据源)
2,创建输出流(目的地)
3,从输入流中读数据
4,通过输出流,把数据写入目的地
5,关闭流

day25

File类
方法
获取文件名称 getName()
获取文件绝对路径 getAbsolutePath()
获取文件大小 length()
获取当前文件夹中所有File对象 File[] listFiles()
判断是否为文件 isFile()
判断是否为文件夹 isDirectory()
创建文件夹 mkdir() mkdirs()
创建文件 createNewFile()

异常
try..catch…finally捕获处理异常
throws 声明异常
throw 抛出异常对象

异常的分类
编译期异常 Exception
运行期异常 RuntimeException
注意:
编译期异常,必须处理,不然无法编译通过
运行期异常,程序运行过程中,产生的异常信息

Properties:Map集合的一种,它是Hashtable集合的子集合,它键与值都是String类型,它是唯一能与IO流结合使用的集合
方法
load( InputStream in ) 从流所对应的文件中,读数据到集合中
load( Reader in ) 从流所对应的文件中,读数据到集合中
store( OutputStream out , String message ) 把集合中的数据,写入到流所对应的文件中
store( Writer out , String message) 把集合中的数据,写入到流所对应的文件中

实现文件内容的自动追加
构造方法
FileOutputStream(File file, boolean append)
FileOutputStream(String fileName, boolean append)
FileWriter(File, boolean append)
FileWriter(String fileName, boolean append)

实现文件内容的自动刷新
构造方法
PrintStream(OutputStream out, boolean autoFlush)
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(Writer out, boolean autoFlush)

Commons-IO
方法
readFileToString(File file):读取文件内容,并返回一个String;
writeStringToFile(File file,String content):将内容content写入到file中;
copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
copyFileToDirectory (File srcFile,File destFile);文件复制

day26

创建线程的方式
方式1,继承Thread线程类
步骤
1,自定义类继承Thread类
2,在自定义类中重写Thread类的run方法
3,创建自定义类对象(线程对象)
4,调用start方法,启动线程,通过JVM,调用线程中的run方法
方式2,实现Runnable接口
步骤
1,创建线程任务类 实现Runnable接口
2,在线程任务类中 重写接口中的run方法
3,创建线程任务类对象
4,创建线程对象,把线程任务类对象作为Thread类构造方法的参数使用
5,调用start方法,启动线程,通过JVM,调用线程任务类中的run方法

day27

同步锁
多个线程想保证线程安全,必须要使用同一个锁对象
同步代码块
synchronized (锁对象){
可能产生线程安全问题的代码
}
同步代码块的锁对象可以是任意的对象

同步方法
public synchronized void method()
可能产生线程安全问题的代码
}
同步方法中的锁对象是 this

静态同步方法
public synchronized void method()
可能产生线程安全问题的代码
}
静态同步方法中的锁对象是 类名.class

多线程有几种实现方案,分别是哪几种?
a, 继承Thread类
b, 实现Runnable接口
c, 通过线程池,实现Callable接口

同步有几种方式,分别是什么?
a,同步代码块
b,同步方法
静态同步方法

启动一个线程是run()还是start()?它们的区别?
启动一个线程是start()
区别:
start: 启动线程,并调用线程中的run()方法
run : 执行该线程对象要执行的任务

sleep()和wait()方法的区别
sleep: 不释放锁对象, 释放CPU使用权
在休眠的时间内,不能唤醒
wait(): 释放锁对象, 释放CPU使用权
在等待的时间内,能唤醒

为什么wait(),notify(),notifyAll()等方法都定义在Object类中
锁对象可以是任意类型的对象

你可能感兴趣的:(java)