20172303 2017-2018-2 《程序设计与数据结构》第9周学习总结

20172303 2017-2018-2 《程序设计与数据结构》第9周学习总结

教材学习内容总结

第十一章 异常

1.异常

  • 异常处理
    • 异常处理的经常使用方法有三种:
      • 根本不处理
      • 当异常发生时处理异常
      • 在程序的某个位置集中处理异常
    • 处理异常的主要方法是捕获异常
  • 异常捕获——try-catch语句
    • 格式:
    try{语句块}
    catch(异常名称 exception){处理异常的语句}
    finally{语句块}
    • try语句以后必须有一条或多条catch子句,但能够没有finally子句,在finally子句存在使,不管try语句块执行时是否发生异常,finally子句都将执行。
  • 异常的传递
    • 例:假设一个程序执行时,它要调用一个类的Method1方法,但Method1方法要调用Method2方法,但Method2方法中发生了异常,若是没有处理这个异常的话,它就会传递到Method1中,使Method1方法也产生异常。
    • 在遇到传递的异常时,要仔细考虑实际状况,寻找合适的地方来处理异常。
  • 异常类层次结构
    • 见图:
  • 自定义异常
    • throw:抛出异常
    • throws:用于方法名的后面,作一个声明,表示下面可能会有这个异常,可是具体仍是要用throw来抛出异常。
    • 在自定义异常中throws和throw必须是成对出现的,除非用try-each语句解决,可是已经定义好的异常是不用的。
  • I/O异常
    • I/O类执行时产生的异常成为IOEexception异常
    • 标准输入/输出/错误流
标准I/O流 名称 说明
System.in 标准输入流 从键盘输入信息
System.out 标准输出流 在显示器上显示信息
System.err 标准错误流 在显示器上输出错误信息

2.文件读写(虽然此部分不是书上内容,可是是老师上课讲的重点内容)

  • 文件建立(使用File类)
    • 格式
    File file = new File(文件保存路径 文件名称)
    if (!file.exists())
    {file.createNewFile(); }
    • 主要方法截图:
  • 文件夹建立(使用File类)
    • mkdir:只能建立一个新文件夹。
    • mkdirs:能够建立一个新文件夹的同时在这个文件夹下再建立一个新的文件夹。
  • 文件读写
    • 字节操做流(使用FileOutputStream和FileInputStream类)
      • 格式:
      //文件写入
      OutputStream outputStream = new FileOutputStream(file);
      byte[] hello = {'H','e','l','l','o',',','W','o','r','l','d','!'};
      outputStream.write(hello);
      • 主要方法截图:
      //文件读取
      InputStream inputStream = new FileInputStream(file);
      while (inputStream.available()> 0){
          System.out.print((char) inputStream.read()+"  ");
      }
      inputStream.close();
      • 主要方法截图:
    • 字节缓冲流(使用BufferedOutputStream和BufferedInputStream类)
      • 格式:
      //文件读取
      byte[] buffer = new byte[1024];
      String content = "";
      int flag = 0;
      InputStream inputStream = new FileInputStream(file);
      BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
      while ((flag = bufferedInputStream.read(buffer))!=-1){
          content += new String(buffer,0,flag);
      }
      bufferedInputStream.close();
      • 主要方法截图:
      //文件写入
      OutputStream outputStream = new FileOutputStream(file);
      BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
      String content1 = "写入文件的缓冲区内容";
      bufferedOutputStream.write(content1.getBytes(),0,content.getBytes().length);
      bufferedOutputStream.flush();
      bufferedOutputStream.close();
      • 主要方法截图:
    • 字符操做流(使用FileWriter类和FileReader类)
      • 格式:
      //文件读取
      Writer writer = new FileWriter(file);
      writer.write("Hello, World!");
      writer.flush();
      writer.append("Hello,Java"); // 在文件中续写
      writer.flush();
      • 主要方法截图:
      //文件写入
      Reader reader = new FileReader(file);
      System.out.println();
      char[] temp = new char[100];
      reader.read(temp);
      • 主要方法截图:
    • 字符缓冲流(使用BufferedOutputStream类和BufferedInputStream类)
      • 格式:
      //文件读取
      BufferedWriter bufferedWriter = new BufferedWriter(writer);
      String content = "使用bufferedWriter写入";
      bufferedWriter.write(cont.length());
      bufferedWriter.flush();
      bufferedWriter.close();
      • 主要方法截图:
      //文件写入
      BufferedReader bufferedReader = new BufferedReader(reader2);
      while ((content =bufferedReader.readLine())!= null){
          System.out.println(content);}
      • 主要方法截图:

第十二章 递归

  • 递归是一种容许一个方法调用本身以达到最终目的的技术。
    • 例:
    //计算n的阶乘
    factorial(n){
        if(n==1)
        return 1;
        else
        return factorial(n-1)*n;
    }
  • 递归的种类
    • 无穷递归:只有递归定义的部分而没有非递归定义部分的递归
    • 直接递归:方法调用本身的递归
    • 简介递归:一个方法调用其余方法,最终再调用本身的递归。
  • 递归的应用

教材学习中的问题和解决过程

  • 问题1:为何书上的全部例题中,为何在catch的括号内的类型名后有个exception?它是固定的吗?
  • 问题1解决方案:书上说这个东西叫作标识符,但苦逼的是我仍是没想起来标识符是什么,翻书终于在第一章的1.4.3找到了它,但书上没有写清楚标识符到底是干什么的因此我有点懵,去查了一下恍然大悟:标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。因此说类型名后的exception只是一个经常使用的命名方法,它能够换成其余任何合法的其余标识符。
  • 那么再来复习一下标识符的命名规范吧:
    • (1) 标识符由字母、数字、下划线“_”、美圆符号“$”或者人民币符号“¥”组成,而且首字母不能是数字。
    • (2) 不能把关键字和保留字做为标识符。
    • (3) 标识符没有长度限制。
    • (4) 标识符对大小写敏感。

代码调试中的问题和解决过程

  • 问题1:作PP11.1的时候不知道为何不能用break
  • 问题1解决方案:这是一个概念没搞清楚的问题。一开始我用使用Alt+Enter找不到解决方法,后来查了一下break的用法想起来它必须用在循环里面,一样的continue也是。
  • 问题2:作PP12.1时,产生了字符串越界错误
  • 问题2解决方案:使用单步调试和try-each语句捕获异常都没有解决问题,询问告终对的张昊然同窗他说个人这段代码没有非递归定义部分,因此成为了一个无限递归。新代码的逻辑是:首先判断字符串长度是否等于1,等于1则必定为回文;而后判断长度是否等于2,等于2时判断对应字符是否相等,这里就定义了非递归部分;最后若是字符串长度大于2的话,使用递归依次判断对应字符是否相等。
  • 问题3:文件读写中如何分行?
  • 问题3解决方案:使用writer.write(10)来分行,但不知道为何若是把文件放到IDEA里就能够分行,可是放到计算机里就不能够了。因此上网上查了一下java中文件读写如何实现分行,发现大部分的回答都建议并使用了BufferedReader流的形式。找到了一个过程比较详细的代码例子:
public class TestC {
    public static void main(String[] args){
    //获取要读取的文件
            File readFile=new File("D://home/a.txt");
            //输入IO流声明
            InputStream in=null;
            InputStreamReader ir=null;
            BufferedReader br=null;
            
        try {
                    //用流读取文件
                    in=new BufferedInputStream(new FileInputStream(readFile));
            //若是你文件已utf-8编码的就按这个编码来读取,否则又中文会读取到乱码
            ir=new InputStreamReader(in,"utf-8");
            //字符输入流中读取文本,这样能够一行一行读取
            br=new BufferedReader(ir);
            String line="";
            //一行一行读取
            while((line=br.readLine())!=null){
            System.out.println(line);
            }       
            } catch (Exception e) {
            e.printStackTrace();
        } finally{
            //必定要关闭流,倒序关闭
                }
        try {       
        if(br!=null){
            br.close();
        }
        else if(ir!=null){
            ir.close();
        }
        else if(in!=null){
            in.close();
        }
        } catch (Exception e2) {
        }
        }   
    }
}

代码托管

上周考试错题总结(正确为绿色,错误为红色)

  • 错题1:An interface name can be used to declare an object reference variable.
    • A . true
    • B . false
  • 缘由及理解状况:用于声明引用的既能够是类名也能够是接口名。

结对及互评

点评模板

  • 博客中值得学习的或问题:
    • 优势:增长了目录
    • 问题:老问题又犯了,感受从博客内容看不出有过多的深刻思考
  • 代码中值得学习的或问题:
    • 优势:注释一针见血,看的时候能清楚的明白代码的做用是什么
    • 问题:PP12.9没有使用数组

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172322
    • 结对学习内容
      • 在张昊然同窗作IO测试作得快要癫狂的时候给他提供了思路,讲解了一下文件读写的相关内容。
      • 张昊然同窗在这周的教材学习中给我提供了大量帮助,由于把大部分精力花在文件读写上了因此这一块学的有点不扎实,以后会再次复习的。

其余(感悟、思考等,可选)

  • 本周最难的部分我以为是文件读写这部分,虽然感受上课听懂了,可是老师留的实践做业花了整整一天才实现,可是又被学长否认了说实践的不合理因此又推到重来了一遍,可是没想到从新改的一遍只用了一夜时间。因此说,前期漫长难熬的艰苦岁月是必要的,由于它在为你以后能走的捷径铺路。
  • 教材复习状况
    • 复习进度(页数):101/310
    • 重要成长:
      • 复习了String类、Random类、NumberFormat类、DecimalFormat类的相关内容。
    • 感想:这周最大的收获就是把那些经常使用类都标记下来了,这样之后就不用来回翻书了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 120/120 1/1 9/9
第二周 246/366 1/2 9/18
第三周 785/1121 2/4 15/33
第四周 615/1736 1/5 20/53
第五周 1409/2645 1/6 24/77
第六周 561/3206 1/7 20/97 再次搞清了一些本身有点含糊不清的概念
第七周 63/3269 1/8 15/112
第八周 2476/5745 3/11 90/201
第九周 824/6595 1/12 20/221
  • 计划学习时间:15小时
  • 实际学习时间:20小时
  • 改进状况:相比而言可能在异常那一章用的时间更多,尤为是IO异常那一部分。

参考资料

相关文章
相关标签/搜索