经过八天对Java高级部分的学习,我对Java中工具类的使用、异常、集合框架、流、和网络编程和线程都有了更深的理解。在高级部分的学习中,需要理解记忆的地方很多,例如集合家族中的实现类(ArrayList、LinkedList、HashSet、TreeSet和HashMap等),每一个实现类都有各自的特点和方法;再如流(FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedReader、BufferedWriter、ObjectOutputStream、ObjectInputStream等),读取和写入不同类型的数据时需要考虑使用不同的流对象,并且容易记混;
学习过程中遇到的难点:1.变量在方法调用时的传值问题
参数只有是引用类型(类、数组、接口),且方法中直接操作该参数时(如使用下标,set()方法等),才会对实参造成影响。
2.流的使用
FileInputStream和FileOutputStream用于读取和写入文件字节流,FileReader和FileWriter则可以读取和写入字符,字符缓冲输入流BufferedReader中的readLine()方法可以读取一整行字符串,字符缓冲输出流BufferedWriter中的newLine方法可以写入换行,并且在new BufferedReader和BufferedWriter时需要使用Reader或Writer的实现类作为参数
3.死锁出现的原因和解决方法
如果线程A拥有线程B需要的资源,并且线程B只能从线程A获取该资源,同时线程B拥有线程A需要的资,并且只能从线程B获取该资源,这个时候两个程序就会互相等待对方释放资源从而造成死锁,在运行的程序中死锁不会报错,一般难以发现。
解决方法:
- 让线程 A 和线程 B 获取资源 A 和资源 B 的顺序保持一致。
- 让线程 A 和线程 B 获取资源 A 和资源 B 之前,再获取第三个资源,并对其使用 synchronized 进行同步, 这样线程A 在获取第三个资源后,将所有事情执行完后,线程 B 才能继续。
在Java高级部分有一些应用型的知识可能难以记住,也不用全部记住,需要在今后的学习和工作中知道如何使用便可。



