• 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.

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

  • 相关阅读:
    【SSH网上商城项目实战05】完成数据库的级联查询和分页
    后台dubug有值且sql也打印出来执行了但是前台就是查不到数据
    Caused by: java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/
    异常:Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z/Caused by: java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreign
    @Resource或者@Autowired作用/Spring中@Autowired注解、@Resource注解的区别
    【SSH网上商城项目实战04】EasyUI菜单的实现
    【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
    【SSH网上商城项目实战02】基本增删查改、Service和Action的抽取以及使用注解替换xml
    【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2
    【SpringMVC学习01】宏观上把握SpringMVC框架
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14922060.html
Copyright © 2020-2023  润新知