JavaSE:核心类库 (二) 学习笔记

一. 索引

  1.  异常机制

      <1>  异常的基本概念:  https://www.cnblogs.com/JasperZhao/p/14857862.html

      <2>  异常的避免与捕获:  https://www.cnblogs.com/JasperZhao/p/14858766.html

      <3>  finally的使用:  https://www.cnblogs.com/JasperZhao/p/14859366.html

      <4>   异常的抛出:  https://www.cnblogs.com/JasperZhao/p/14862411.html

      <5>  自定义异常:  https://www.cnblogs.com/JasperZhao/p/14865733.html

 

  2.  File类

      <1>  File类:  https://www.cnblogs.com/JasperZhao/p/14866444.html

  

  3.  IO流

      <1>  IO流的概念:  https://www.cnblogs.com/JasperZhao/p/14866571.html

      <2>  FileWriter类 & FileReader类:  https://www.cnblogs.com/JasperZhao/p/14866634.html

      <3>  FileOutputStream类 & FileInputSteam类:  https://www.cnblogs.com/JasperZhao/p/14867467.html

      <4>  BufferedOutputStream类 和 BufferedInputStream类:  https://www.cnblogs.com/JasperZhao/p/14867583.html

      <5>  BufferedWriter类 和 BufferedReader类:  https://www.cnblogs.com/JasperZhao/p/14867678.html

      <6>  PrintStream类 和 PrintWriter类:  https://www.cnblogs.com/JasperZhao/p/14869680.html

      <7>  OutputStreamWriter类 和 InputStreamReader类:  https://www.cnblogs.com/JasperZhao/p/14869726.html

      <8>  字符编码:  https://www.cnblogs.com/JasperZhao/p/14869785.html

      <9>  DataOutputStream 类 和 DataInputStream 类:  https://www.cnblogs.com/JasperZhao/p/14869844.html

      <10>   ObjectOutputStream 类 和 ObjectInputStream 类:  https://www.cnblogs.com/JasperZhao/p/14869960.html

      <11>  RandomAccessFile 类:  https://www.cnblogs.com/JasperZhao/p/14870050.html

 

  4.  多线程

      <1>  程序 / 进程 / 线程 的概念:  https://www.cnblogs.com/JasperZhao/p/14874037.html

      <2>  线程的创建:  https://www.cnblogs.com/JasperZhao/p/14874444.html

      <3>  线程的生命周期:  https://www.cnblogs.com/JasperZhao/p/14874557.html

      <4>  与线程的编号和名称有关的方法:  https://www.cnblogs.com/JasperZhao/p/14889919.html

      <5>  与线程有关的常用方法:  https://www.cnblogs.com/JasperZhao/p/14891998.html

      <6>  线程同步机制:  https://www.cnblogs.com/JasperZhao/p/14892192.html

      <7>  线程 - 静态方法的锁定:  https://www.cnblogs.com/JasperZhao/p/14893757.html

      <8>  线程安全类和不安全类:  https://www.cnblogs.com/JasperZhao/p/14893795.html

      <9>  线程 - 死锁的概念:  https://www.cnblogs.com/JasperZhao/p/14893842.html

      <10>  使用Lock(锁)实现线程同步:  https://www.cnblogs.com/JasperZhao/p/14894036.html

      <11>  Object类中与线程有关的常用方法:  https://www.cnblogs.com/JasperZhao/p/14894096.html

      <12>  线程池:  https://www.cnblogs.com/JasperZhao/p/14894261.html

      <13>  线程 - 生产者与消费者模型:  https://www.cnblogs.com/JasperZhao/p/14913002.html

 

  5.  网络编程

      <1>  有关网络编程的常识:  https://www.cnblogs.com/JasperZhao/p/14874592.html

      <2>  和网络相关的协议:  https://www.cnblogs.com/JasperZhao/p/14875015.html

      <3>  基于TCP协议的编程模型:  https://www.cnblogs.com/JasperZhao/p/14875334.html

      <4>  TCP相关的ServerSocket类 和 Socket类:  https://www.cnblogs.com/JasperZhao/p/14884855.html  

      <5>  基于UDP协议的编程模型:  https://www.cnblogs.com/JasperZhao/p/14884999.html

      <6>  URL类 / URLConnection类:  https://www.cnblogs.com/JasperZhao/p/14886166.html

 

  6.  反射机制

      <1>  反射机制的基本概念:  https://www.cnblogs.com/JasperZhao/p/14887957.html

      <2>  反射机制 - Class类:  https://www.cnblogs.com/JasperZhao/p/14888037.html

      <3>  反射机制 - Constructor类:  https://www.cnblogs.com/JasperZhao/p/14888264.html

      <4>  反射机制 - Field类:  https://www.cnblogs.com/JasperZhao/p/14888721.html

      <5>  反射机制 - Method类:  https://www.cnblogs.com/JasperZhao/p/14888982.html

      <6>  反射机制 - 获取其他结构信息:  https://www.cnblogs.com/JasperZhao/p/14889007.html

 

二. 练习题

1.  下面方法调用后的输出结果是什么?

int show(){
    int x = 1;
    try{
         return ++x;
    }catch(Exception e){
    }finally{
         ++x;
    }
    return x;
}        

答案:2

分析: try{} 与 finally{} 中的 ++x 表达式,相互独立,在内存中各自占有一块独立的内存空间。 return 语句返回的是 try中的表达式 ++x,即为2

 

2.  已知,InputStream类中的read()和read(byte[] data),在读取到文件末尾时,会返回-1。

     如果,文件中的数据内容恰好是-1时,应该如何处理?  

     答:不存在数据内容是 -1 (数值)的情况  

     原因: read() 用于读取单个字节,并且返回值类型为int类型。

      -1 由字节(byte类型)转换为 int类型时,数值不等同于 -1

      

3.  简述synchronized关键字 和 volatile关键字的主要区别

   <1>volatile, adj, 易变的

     使用volatile关键字修饰一个变量时,意味着这个变量的值是易变的,便于这个数据在内存和缓存中的同步,以实现线程同步

   <2>vlolatile关键字用于实现线程的轻量同步,比 synchronized关键字 性能更佳

       vlolatile关键字修饰变量,而synchronized关键字修饰代码块 / 方法

 

三. 编程题

1.

  a.  使用List集合,实现简易的学生信息管理系统,要求打印字符界面,提示用户选择相应的功能,根据用户输入的选择,

     去实现增加、删除、修改、查找,以及遍历所有学生信息的功能

  b.  自定义学号异常类 和 年龄异常类,并在该成员变量不合理时,产生异常对象,并抛出

  c.  当系统退出时,将List集合中所有学生信息,写入到文件中。

       当系统启动时,读取文件中所有学生信息,到List集合中

 

  思路:

     a.

     <1> switch...case结构:根据用户输入的选择,实现增删改查,以及遍历打印的功能

     <2> 注意代码的分层:

        字符界面 --> Client.java

        功能处理 --> Server.java,包含五个成员方法(add,delete,set,get,print)

 

    <3> 把储存学生信息的集合,定义为Server.java中的一个成员变量:便于对其进行增删改查操作 

    <4>    在Client.java中,声明一个Server类型的引用:便于从Client.java中,调用Server.java中的方法 (体现了合成复用原则)

    <5> 图解

    

 

 

    b.

    <1>  在Server.java中:        

        if (年龄 / 学号 数值不合理) {

          throw new 对应的Exception();

        }else{

          List.add(年龄 / 学号)

        }

    <2>  自定义 IdException.java 和 AgeException.java (继承Exception),

          提供 无参构造 和 以字符串为参数的 构造方法

 

    c.  

    <1>  创建Database.java,用于实现学生信息的读、写功能

    <2>  故,需要两个方法read() 和 write()

    <3>  准备一个类型为List集合的成员变量,把集合当作对象,使用ObjectOutputStream,将对象整体写入到文件中

        使用ObjectInputStream,使用readObject一次性地将文件读取到集合中

    <4>  为了保持Server.java 和 Database.java 中集合 ( studentList ) 的公用,

        需要在测试类中定义一个集合,通过构造方法 ( new Server(List) & new Database(List)  ),

        分别传入到Server 和 Database 中 

 

 

 

2.  

  a.  使用线程池,将一个目录中的所有内容,拷贝到另外一个目录中,包含子目录中的内容

  b.  实现将指定目录中的所有内容删除,包含子目录中的内容(都要全部删除)

 

  思路:

    a.  可以分为三步:

        <1>  将一个目录中的所有内容拷贝到另外一个目录

              创建拷贝方法,通过for...each遍历调用拷贝方法,将所有文件进行拷贝

        <2>  子目录中的内容的拷贝

            在拷贝方法中:

              if ( 是子目录) {

                递归

              }

              if (是文件){

                采用匿名内部类的方式, 调用线程池的run()方法,来实现拷贝

              }

        <3>  使用线程池

              创建一个ExecutorService类型的引用,在线程池的run()方法中,来调用copy()方法

 

    b.

        与题目 “遍历指定目录以及子目录中的所有内容并打印出来” 相似:

          https://www.cnblogs.com/JasperZhao/p/14866444.html

  

3.

  使用基于tcp协议的编程模型,实现多人同时在线聊天。

  要求:<1> 每个客户端,将发送的聊天内容发送到服务器;

     <2> 服务器接收到后,转发给当前所有在线的客户端

 

  思路: <1>

        与案例题目相同:https://www.cnblogs.com/JasperZhao/p/14884855.html

      <2>   

        传发给所有客户端 ---->

        建立当前在线的所有客户端的输出流 --->

        需要知道所有客户端的Socket (端点) --->

        需要调用accept()方法  (accept():等待客户端的连接请求,并返回一个与客户端通信的Socket) --->

        需要得到accept()方法的所有返回值 --> 使用List集合来储存accept()方法的所有返回值

      

     <3>  子线程:负责接收消息 

        主线程:负责发送消息

 

4.

  备注:控制台需要打印出程序的执行流程和最后结果,第二题不可忽略,将正在复制和正在删除的文件名字打印到控制台中

posted @ 2021-06-23 11:39  Jasper2003  阅读(39)  评论(0编辑  收藏  举报