zoukankan      html  css  js  c++  java
  • 20145303 《Java程序设计》第5周学习总结

    20145303 《Java程序设计》第5周学习总结

    教材学习内容总结

    1、java中所有错误都会被打包为对象,如果愿意,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理。

    import java.util.*;
     class Average2 {
        public static void main(String[] args) {
            try{
                Scanner console = new Scanner(System.in);
                double sum = 0;
                int count = 0;
                while (true){
                    int number = console.nextInt();
                    if(number ==0){
                        break;
                    }
                    sum += number;
                    count++;
                }
                System.out.printf("平均 %.2f%n", sum/count);
            }catch (InputMismatchException ex){
                System.out.println("必须输入整数");
            }
        }
    }
    
    

    正确执行结果:

    错误输入结果:

    import java.util.*;
    public class Average3 {
        public static void main(String[] args) {
                Scanner console = new Scanner(System.in);
                double sum = 0;
                int count = 0;
                while (true) {
                    try {
                        int number = console.nextInt();
                        if (number == 0) {
                            break;
                        }
                        sum += number;
                        count++;
                    } catch (InputMismatchException ex) {
                        System.out.printf("略过非整数输入:%s%n", console.next());
                    }
                }
                System.out.printf("平均 %.2f%n", sum/count);
        }
    }
    
    

    结果:

    2、在异常发生时,可使用try 、catch处理当时可进行的异常处理,当时环境下无法决定如何处理的部分,可以由调用方法的客户端处理,想先处理对象在抛出

    import java.io.*;
    import java.util.Scanner;
    public class FileUtil {
        public static String readFile(String name) throws FileNotFoundException{
            StringBuilder text = new StringBuilder();
            try{
                Scanner console = new Scanner (new FileInputStream(name));
                while(console.hasNext()){
                    text.append(console.nextLine())
                            .append('
    ');
                }
            }catch(FileNotFoundException ex){
                ex.printStackTrace();
                throw ex;
            }
            return text.toString();
        }
    }
    

    3、查看堆栈追踪最简单的方法,就是直接调用异常对象的printStackTrace()

    public class StackTraceDemo {
        public static void main(String[] args) {
            try{
                c();
            }catch(NullPointerException ex){
                ex.printStackTrace();
            }
        }
        static void c(){
            b();
        }
        static void b(){
            a();
        }
        static String a(){
            String text = null;
            return text.toUpperCase();
        }
    }
    
    

    4、在使用throw重抛异常时,异常的追踪堆栈起点时,仍是异常的发生根源,而不是重抛异常的地方

    public class StackTraceDemo2 {
        public static void main(String[] args) {
            try{
                c();
            }catch(NullPointerException ex){
                ex.printStackTrace();
            }
        }
        static void c(){
            try{
                b();
            }catch(NullPointerException ex) {
                ex.printStackTrace();
                throw ex;
            }
        }
        static void b(){
            a();
        }
        static String a(){
            String text = null;
            return text.toUpperCase();
        }
    }
    
    

    结果:

    5、fillaInStackTrace()方法会重新装填异常堆栈,将起点设为重抛异常的地方,并返回Throwable对象

    public class StackTraceDemo3 {
        public static void main(String[] args) {
            try{
                c();
            }catch(NullPointerException ex){
                ex.printStackTrace();
            }
        }
        static void c(){
            try{
                b();
            }catch(NullPointerException ex) {
                ex.printStackTrace();
                Throwable t = ex.fillInStackTrace();
                throw(NullPointerException) t;
            }
        }
        static void b(){
            a();
        }
        static String a(){
            String text = null;
            return text.toUpperCase();
        }
    }
    
    

    结果:

    6、无论try区块中有无异常,若撰写finally区块,则finally区块一定会被执行

    public class FinallyDemo {
        public static void main(String[] args) {
            System.out.println(test(true));
        }
        static int test(boolean flag){
            try{
                if(flag){
                    return 1;
                }
            }finally{
                System.out.println("finally...");
            }
        }return 0;
    }
    

    7、
    收集对象的行为,像是新增对象的add()方法、移除对象的remove()方法等,都是定义在java.util.Collection中,既然可以收集对象,也要能逐一取得对象,这就是java.lang.Iterable定义的行为,它定义了iterator()方法返回java.util.Iterator操作对象,可以让你逐一取得收集的对象。

    import java.util.*;
    import static java.lang.System.out;
    public class Guest {
        public static void main(String[] args) {
            List names = new ArrayList();
            collectNameTo(names);
            out.println("访客名单:");
            printUpperCase(names);
        }
        static void collectNameTo(List names){
            Scanner console = new Scanner(System.in);
            while(true){
                out.print("访客名称:");
                String name = console.nextLine();
                if(name.equals("quit")){
                    break;
                }
                names.add(name);
                
            }
        }
        static void printUpperCase(List names){
            for(int i = 0;i<names.size();i++){
                String name=(String) names.get(i);
                out.println(name.toUpperCase());
            }
        }
    }
    

    8、
    如果对象有操作Queue,并打算以队列方式使用,且队列长度受限,通常建议使用offer()、poll()、与peek()等方法。想对队列的前端与尾端进行操作,在前端加入对象与取出对象,在尾端加入对象与取出对象,Queue的子接口Deque就定义了这类行为。

    import java.util.*;
    interface Request{
        void execute();
    }
    public class RequestQueue {
        public static void main(String[] args) {
            Queue requests = new LinkedList();
            offerRequestTo(requests);
            process(requests);
        }
        static void offerRequestTo(Queue requests){
            for(int i=1;i<6;i++){
                Request request = new Request(){
                    public void execute(){
                        System.out.printf("处理数据%f%n",Math.random());
                    }
                };
                requests.offer(request);
            }
        }
        static void process(Queue requests){
            while(requests.peek()!=null){
                Request rquest = (Request) request.poll();
                request.execute();
            }
        }
    }
    

    本周代码托管截图

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

    随着学习进度的跟进,内容越来越多,有些知识的容易相互混淆。现在光敲代码意义没那么大,还是要自己多总结,多思考,才能有所收货,有所进步。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第五周 250/1000 1/9 27/125
  • 相关阅读:
    十,文献研读
    第十周博客作业
    【西北师大-2108Java】第八次作业成绩汇总
    【西北师大-2108Java】期中成绩汇总
    人脸识别性别的卷积神经网络
    主成分分析(PCA)原理详解
    使用KNN算法对鸢尾花数据集进行分类处理
    5.文献研读---基于教育数据挖掘的在线学习者 学业成绩预测建模研究--陈子健 朱晓亮
    4.文献研读---基于数据挖掘的学习者在线学习行为分析模型构建--卓荣庆 柏忠贤
    3.文献研读---基于Canvas Network开放数据集的MOOC学习分析--胡红梅 宗 阳
  • 原文地址:https://www.cnblogs.com/ljq007/p/5350479.html
Copyright © 2011-2022 走看看