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

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

    教材学习内容总结

    • 第四章要点:
      • 要点1:面向对象三个性质:封装性、继承、多态;
      • 要点2:类:类声明、类体、成员变量、方法、类的UML图;
      • 要点3:构造方法与对象的建立:构造方法、对象的建立和使用、对象的引用和实体;
      • 要点4:类与程序的基本结构,参数传值;
      • 要点5:对象的组合:组合和复用,类的关联关系与依赖关系;
      • 要点6:实例成员与类成员,方法重载,this关键字;
      • 要点7:包package,import;
      • 要点8:访问权限:public,protected,友好的(friendly),private;
      • 要点9:基本类型的类封装:Byte(byte num)、byteValue()等,对象数组;
      • 要点10:JRE扩展与jar文件xxx.mf,文档生成器javados,应用举例。

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

    1. 引用其他类中的变量数值错误。

    如下列程序用来进行阶乘运算

    public class JDB{
        public static void main(String[] args) {
            int numone=9, numtwo=10;
            HE tet = new HE();      //为tet分配空间
            tet.mult(numone);       //实现9!并输出
            System.out.println(numone+"!的值supnum="+tet.supnum);      //输出阶乘的值
            tet.mult(numtwo);       //实现10!并输出
            System.out.println(numtwo+"!的值supnum="+tet.supnum);      //输出阶乘的值
        }
    }
    
    class HE{       //声明实现阶乘运算的类
        int supnum = 1;     //声明成员变量
        void mult(int  num){
            for (int i=1; i<=num; i++){
                supnum = supnum*i;      //进行阶乘运算
            }
        }
    }
    

    结果如下:

    9!的值supnum=362880
    10!的值supnum=-1736015872
    
    • 问题1解决方案:
      为什么9!的值是对的,但10!就不对了呢?
      重点是:类中的变量分为两种:成员变量和局部变量。成员变量在声明的方法外,成员变量的值一旦通过命令改变就不会恢复初始,进行垃圾回收。但局部变量在方法内,在方法运行完成后就会回收,下次再用方法时,会重新定义为初始值。
      而tet中的supnum是成员变量,supnum是不会随着tet中方法mult的结束而恢复初始1。在进行9!的运算后,supnum=362880;但在进行10!的运算的时候,supnum就不是1了,还是362880。这时进行的运算就是362880*10!,这个算式的结果超过了int类型的最大容量2^31-1,结果就变成了错误的值。
      将程序更改如下,改变的命令已用 //** xxxxx ** 的格式标明:
    public class JDB{
        public static void main(String[] args) {
            int numone=9, numtwo=10;
            HE tet = new HE();
            tet.mult(numone);
            System.out.println(numone+"!的值supnum="+tet.supnum);
            tet.mult(numtwo);
            System.out.println(numtwo+"!的值supnum="+tet.supnum);
        }
    }
    
    class HE{ 
        int supnum = 1; 
        void mult(int  num){
            int innum=1;        //** 声明局部变量 **
            for (int i=1; i<=num; i++){
                innum = innum*i;      //** 使用局部变量进行阶乘运算 **
            }
            supnum = innum;         //** 将局部变量的值赋值给成员变量 **
        }
    }
    

    正确结果如下:

    9!的值supnum=362880
    10!的值supnum=3628800
    

    2. 可变参数的用法

    声明可变参数int ... add基本等同于int[] add,如下程序。
    4个注意事项:
    1.只能出现在参数列表的最后;
    2.位于变量类型和变量名之间;
    3.调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数;
    4.参数的类型必须保持一致。

    public class VariableParameter {
        public static void main(String[] args) {
            //使用可变参数
            System.out.println(add(2,3));
            System.out.println(add(2,3,4));
            //使用数组方式
            int[] x1=new int[]{2,3};
            int[] x2=new int[]{2,3,4};
            System.out.println(add2(x1));
            System.out.println(add2(x2));
        }
    
        public static int add(int x,int ... args){      //隐含建立数组(int)args[]
            int sum=x;
            for(int i=0;i<args.length;i++){
                sum+=args[i];
            }
            return sum;
        }
        //传入数组参数
        public static int add2(int[] args){
            int sum=0;
            for(int i=0;i<args.length;i++){
                sum+=args[i];
            }
            return sum;
        }
    }
    

    3. 编写简单脚本的初尝试

    xxxxxxxx的Shell脚本学习笔记一:变量
    在初次打开终端时,只是进入根目录~,如何快速进入码云的本地仓库目录并开启root权限呢?
    在根目录中vim cas.sh创建脚本文件,输入以下命令、保存退出;chmod +x cas.sh添加执行权限;在根目录中执行脚本文件. ./cas.sh要在普通目录中./xxx.sh命令之前加. ,注意:../之间有空格。

    #!/bin/sh
    clear
    cd /alive/string
    echo "You had cd ~.alive.string."
    echo ""
    sudo su
    

    执行脚本并输入密码结果如下:

    You had cd ~.alive.string.
    
    [sudo] yogile 的密码:
    root@yogile-VirtualBox:/alive/string# 
    

    如果这时输入exit回车,将停留在/alive/string文件夹中,但是失去了root权限。

    菜鸟教程提供的Shell在线编辑器

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

    1. 仍然对类封装不太熟悉。

    在编译第四章例子22时,可编译,但仍然在编译完成后想要运行它,短时间内没有意识到它是有理数的类封装。

    root@yogile-VirtualBox:/alive/string/bin# java Rational
    错误: 在类 Rational 中找不到 main 方法, 请将 main 方法定义为:
       public static void main(String[] args)
    否则 JavaFX 应用程序类必须扩展javafx.application.Application
    

    上述错误并非程序错误,是用法错误。Rational.class 是为Example2_23.java提供 Rational 类的可创建对象的。在 Example4_23.java 中写public static void main(String[] args),以Example4_23为主类即可。

    [代码托管]

    • 代码提交过程截图:

    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
    • 计划学习时间:20小时

    • 实际学习时间:16小时

    • 改进情况:
      较上周,解决了可变参数的问题。

    参考资料

  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/Yogile/p/10544148.html
Copyright © 2011-2022 走看看