Java 其他常用工具及其他基础复习

以下内容为简记复习,留个印象利于回顾。

每个标题后的内容为其方法及其简单使用方式简记。

System 静态方法
gc(); exit(int status); currentTimeMillis(); arrayCopy(Obj src, int srcPos, Obj dest, int destPos, int length);

BigInteger
可以运算超过 integer 范围的数据
public BigInteger(int val); add(BigInteger val); substract(); multiply(); divide();
divideAndRemainder(BigInteger val); 返回 this / val, this % val;

BigDecimal
运算时,float,double 容易损失精度,为精确表示并计算浮点数
开发推荐构造时传入字符串 new BigDecimal(“2.0”); 或是 BigDecimal.valueOf(2.0);

Date
new Date(); new Date(long time); setTime(); getTime();

DateFormat, SimpleDateFormat
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年mm月dd日 HH:mm:ss”);
使用 parse 方法以相反的方式将字符串转换成 Date 对象;

Calendar
Calendar c = Calendar.getInstance();
System.out.println(c.getInstance(Calendar.YEAR));
c.add(Calendar.MONTH, -1); set(…, …);

Map
迭代 map.keySet(); 或使用 Set<Map.Entry<String, String>> entrySet = map.entrySet();
之后可使用 iterator 或增强 for 循环遍历 entrySet;
LinkedHashMap 保持 HashMap 元素放入顺序;
TreeMap 底层为二叉树算法实现
实现排序:key 值对象类型需要实现 Comparable 接口(重写 compareTo 方法);初次之外 也可在 TreeMap 构造是传入 Comparator
对象;以上为 TreeSet 实现排序的两种方式;

HashMapHashTable 的区别
底层都是 Hash 算法,都是双列集合;线程安全与不安全区别,效率区别;HashMap 可存 Null 键和 Null 值;

Collections 工具类
Collections.sort(list); binarySearch(list, key); max(list); void reverse(list); void shuffle(list);

集合框架
<? super E>, <? extends E> 分别指定下边界和上边界;
Comparator<Student> 实现后可提供该 Student 及其子类使用;

异常 Exception
运行时异常和编译时异常(编译时必须进行处理)
Throwable
Error
Exception
RuntimeException (此类采用 try-catch 进行处理)

finally 关键字
一定会被执行(除 System.exit() 退出的情况);用户释放资源;

final,finally,finalize
final: 修饰类,类不能被继承;修饰方法,方法不能重写;修饰变量,变量不能被重新赋值;
finally:与 try 联合使用,用于进行释放资源等操作
finallize:由对象的垃圾回收器调用此方法;
对于 return 和 finally 的问题:先 return 后再查看 finally 语句是否存在,存在即执行(finally 在 return 后返回);注意 finally 中不
要写return 语句,因为 finally 作用是释放资源,写返回语句那么 try 和 catch 的 return 将被覆盖;

File
File(String pathName); File(String parent, String child); File(File parent, String child);
createNewFile(); mkdir(); mkdirs(); renameTo(File dest); delete(); 删除文件夹,该文件夹只能为空;
isFile(); isDirectory(); exists(); canRead(); canWrite(); isHidden();
file.getName(); file.length(); getAbsolutePath(); lastModified(); list(); File[] listFiles();

FilenameFilter
重写 accept 方法后传入 file 对象的 list 方法中,return true 则加入 list 方法最终返回结果中;

IO 流

字节流

InputStream, OutputStream;
FileInputStream fis = new FileInputStream(“a.txt”);
int length = 0;
while((length = fis.read()) != -1) { fos.write(length); } // read 一次读取一个字节
fis.close();
使用 int 作为 read 返回值是为了防止错误返回,11111111 为 -1 的补码;
fos.write() 逐个字节写入,会进行截位或补位;续写则传入第二个参数;

开发中使用方式:
byte[] arr = new byte[l024];
while…length = read(arr) != -1… fos.write(arr, 0, length);

可使用 BufferedInputStream 对 InputStream 对象进行包装;减少了与硬盘的数据交换次数,运用内存的运算效率;
BIS 一次读入 8192 个字节数据进入缓冲区,一次返回个程序一个字节(内存中),当缓冲区数据读取完毕后在从硬盘重新读取;
BOS 对应就是先写到缓冲区,写满后再写入硬盘。

字节流不利于写入中文等。

实现 AutoClosable 则会在 try-with-resource 中自动调用 close 方法

加密操作:
写入是: fos.write(length ^ 123); 解密依据异或两次等于本身的原则;
字符流
程序需要写入或读入一段文本是使用;不可以读写非纯文本文件;
Reader, Writer;
int c; while((c = fr.read()) != -1) { sout…};
也可以通过类似的字符数组读入;
同时也存在对应的 BufferedReader, BufferedWriter; readLine()(以 \r or \n 为结束标志), write(line), newLine();
newLine() 跨平台输出换行符;

LineNumberReader
String line;
while((line = lnr.readLine()) != null) {}; lnr.getLineNumber();

指定码表读写数据
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(“utf-8.txt”), “utf-8”));

序列流
SequenceInputStream
结合多个流,一次连续完成对多个流的读取;
结合2个以上的时,现将多个流加入集合中,后将由该集合生成的 Enumeration 对象(结合调用 elements 方法)传入
SequenceInputStream 的构造方法中;

内存输出流
ByteArrayOutputStream
写入后可以一次性获取所有数据

随机访问流
RandomAccessFile(File file, String mode);…
seek(): 改变写入读入指针的位置(追加);
用于多线程下载;

对象操作流
ObjectOutputStream 序列化与反序列化对象 对象类型必须实现 Serializable 接口
ObjectInputStream ois.readObject();

数据输入输出流
DataInputStream DataOutputStream
readInt(); writeInt();

打印流
字节流 PinrtStream ps = System.out, 字符流 PrintWriter

标准输入输出流
InputStream in = System.in; PrintStream out = System.out;
修改:
System.setIn(new FileInputStream(…)); System.setOut(new FileOutputStream(…));

Properties
HashTable 子类(存储内容无序), prop.setProperty(,),getProperty();
Enumeration en = (Enumeration) prop.getPropertyNames(); 实现遍历
配合配置文件使用
load(), store()
Properties prop = new …; prop.load(new FileInputStream(…));
修改后调用 store 方法
prop.store(new FileOutputStream(), “comments”);

装饰设计模式
原来功能不足,进行补足;
获取被装饰类应用 -> 构造方法实例化对象 -> 对对象功能升级

多线程
实现方法
继承 Thread 类,重写 run 方法;实例化进程类后调用 start 方法开启线程;可直接使用 Thread 中的方法;
可使用匿名内部类实现;
实现 Runnable 接口重写 run 方法;之后将实例化对象传入 Thread 构造函数中。

getName(); setName(); Thread.currentThread(); sleep();

setDaemon(); 传入 true 设置守护线程(不会单独执行,其他线程结束后自动退出);

join();
当前线程等待调用 join 方法的线程执行完毕后在执行;可以在 join 中指定时间;

Thread.yield()
当前执行线程礼让;

setPriority(); 数值越大优先级越高;可用 Thread.MAX_PRIORITY, Thread.MIN_PRIORITY 等指定;

synchronized 同步代码块
锁对象可以是任意的
synchronized() {}; 使用同一个锁对象的同步代码块在执行过程中不能暂停去执行其他同步代码块;
非静态的同步方法的锁对象为 this;静态同步方法的锁对象则为该类的字节码对象;

猜你喜欢

转载自blog.csdn.net/qq_37427344/article/details/83271259