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

    学号 20175223 《Java程序设计》第 5 周学习总结
    目录

    教材学习内容总结

    • 第六章要点:
      • 要点1:接口:interface;
      • 要点2:实现接口implements:类实现接口、重写接口中的方法;
      • 要点3:接口的UML图;
      • 要点4:接口回调、理解接口;
      • 要点5:接口与多态;
      • 要点6:接口参数;
      • 要点7:abstract类与接口的比较;
      • 要点8:面向接口编程;
      • 要点9:应用举例。

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

    1. 在 jdb 调试时使用命令行参数。

    • 问题1解决方案:

    同在解释文件时,java xxxx <参数1> <参数2> <参数3> ... 的通过命令行传入参数命令相同:

    javac -g -d bin xxx.java
    jdb xxx <参数1> <参数2> <参数3> ...
    

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

    1. 在jdb调试时通过命令行传入参数

    • 问题1解决方案:

    在执行完 javac -g -d bin src/*.java 后,一般都是 jdb -classpath .:./out xxxx
    如果在调试时要用到命令行传入参数,直接在 jdb -classpath .:./out xxxx 后加入参数即可:

    jdb -classpath .:./out xxxx <参数1> <参数2> ... <参数n> <Enter>
    

    2. “可能尚未初始化变量” 或 “无法从静态上下文中引用非静态 变量”

    源文件见 迭代和JDB ,简略程序如下:

    public class Recursion {                //执行C(n,m)的递归公式
        ......
    }
    
    public class Estimate {             //执行主要的判断
        ......
    }
    
    public class Combination {             //主类
        public static void main(String[] args) {
            int n, m;                       //**[代码1]**
            if (args.length == 2) {             //判断命令行输入参数的格式是否正确
                n = Integer.parseInt(args[0]);             //将命令行参数中的 String 型转化为 int 型,并赋值给 n 、 m
                m = Integer.parseInt(args[1]);
            }
            else {
                System.out.println("Input args Error!");
                System.exit(0);
            }
            Estimate esti = new Estimate();
            esti.estimate(n, m);
        }
    }
    
    

    编译时会报错:

    Error:(13, 23) java: 可能尚未初始化变量n
    Error:(13, 26) java: 可能尚未初始化变量m
    

    问题分析:
    这是成员变量与局部变量区别的问题:成员变量会有初始值,局部变量没有初始值。
    上述程序的第 11 行 [代码1] int n, m; 是在 public static void main(String[] args) {} 之中的,属于局部变量,无初始值,会报错。解决方案如下:

    • 问题2解决方案一:
      局部变量 n、m 没有初始值,给它们赋值即可。
      将上述程序的第 11 行 [代码1] 更改如下,就不会报错。
    int n=0, m=0;
    
    • 问题2解决方案二:
      将 n、m 由局部变量变更为成员变量。
      而如果只是将 [代码1] int n, m;移至 [代码2]
    public class Combination {             //主类
        int n, m;                       //**[代码2]**
        public static void main(String[] args) {
            if (args.length == 2) {             //判断命令行输入参数的格式是否正确
        ......
    

    是不对的,会报错:

    Error:(6, 13) java: 无法从静态上下文中引用非静态 变量 n
    Error:(7, 13) java: 无法从静态上下文中引用非静态 变量 m
    Error:(14, 23) java: 无法从静态上下文中引用非静态 变量 n
    Error:(14, 26) java: 无法从静态上下文中引用非静态 变量 m
    

    这是因为 [代码2] int n, m; 是非静态(动态)的,而 main 是静态的。
    需要在 [代码2] int n, m; 前加静态前缀:static,使 n、m 成为静态成员变量。

    public class Combination {             //主类
        static int n, m;                       //**[代码2]**
        public static void main(String[] args) {
            if (args.length == 2) {             //判断命令行输入参数的格式是否正确
        ......
    

    即完成编译。

    [代码托管]

    • 代码提交过程截图:

    image.png

    image.png

    • 代码量截图:

    image.png

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

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 322/322 1/1 23/23
    第二周 520/842 3/4 25/48
    第三周 458/1300 2/6 16/64
    第三周 914/2214 2/8 21/85
    第四周 685/2899 1/9 18/103

    2899

    • 计划学习时间:20小时

    • 实际学习时间:18小时

    参考资料

  • 相关阅读:
    JAVA语言 第五周
    JAVA语言 第四周
    Good Bye 2016 D. New Year and Fireworks BFS
    Codeforces Round #402 (Div. 2) D. String Game 二分
    Codeforces Round #401 (Div. 2) E. Hanoi Factory 栈
    Good Bye 2016 C. New Year and Rating 模拟
    Codeforces Round #147 (Div. 2) C. Primes on Interval 二分
    Codeforces Round #398 (Div. 2) B. The Queue 思维
    Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) D. Jon and Orbs 概率DP
    Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones Nim游戏
  • 原文地址:https://www.cnblogs.com/Yogile/p/10632965.html
Copyright © 2011-2022 走看看