当前位置 博文首页 > weixin_30677073的博客:20155201 2016-2017-2 《Java程序设计》

    weixin_30677073的博客:20155201 2016-2017-2 《Java程序设计》

    作者:[db:作者] 时间:2021-07-19 10:26

    20155201 2016-2017-2 《Java程序设计》第三周学习总结

    教材学习内容总结

    - 第四章要点:

    • 4.1类与对象
    • 类定义时使用class关键词,基本模式为
    class name{
        int a;
        int b;
        float c;
        String d;
    }

    对比c语言中结构体struct的定义,帮助记忆。
    想要在建立对象时,一并进行某个初始流程,比如指定数据成员值(int a,b),选择定义构造函数。

    class name{
        int a;
        int b;
        String d;
        name(int a,int b,String d){
            this.a=a;
            this.b=b;
            this.d=d;
        }
    }

    在java.math.BigDecimal的使用中,数值的加减和等于由

    result=op1+op2;
    result2=op1-op2;
    if(result==op1+op2)

    对应为

    BigDecimal result=op1.add(op2);
    BigDecimal result2=op1.substract(op2);
    if(op1.add(op2)equals(result))

    “=”在基本类型与类类型中的差别:
    =用于基本类型时,将值赋值给某个变量;==用于基本类型时,是比较两个变量储存的值是否相同。
    =在操作对象中,=用在指定参考名称参考某个对象,==用在比较两个参考名称是否是参考同一对象。想要比较两个参考名称的对象内含值是否相同,则要使用a.equals(b)。

    • 4.2基本类型打包器
    基本类型类类型
    intInteger
    longLong
    floatFloat
    doubleDouble
    booleanBoolean
    byteByte

    自动装箱:

    int data1=1;
    int data2=2;
    Integer warpper1=new Integer(data1);
    Integer warpper2=new Integer(data2);

    对应如下:

    Integer data1=1;
    Integer data2=2;
    • 4.3数组对象

    定义一个数组:

    int[] a={1,2,3};

    数组的复制:

    int[] score1={1,2,3};
    int[] score2=score1;

    这段代码只是将score1参考的数组对象也给score2参考,即书本中比喻将score1名牌绑的对象也绑上score1的名牌。

    int[] score1={1,2,3};
    int[] score2=new int[score1.length];
    for(int i-0;i<score1.length;i++){
        score2[i]=score1[i];
    }

    这段代码建立score2数组,长度与score1相同,逐一将score1中的索引元素指定到score2的对应索引位置。

    浅层复制与深层复制的应用区别在于是否复制类中的属性。
    浅层复制:

    for(int i=0;i<c1.length;i++){
        c2[i]=c1[i];
    }

    深层复制:

    for(int i=0;i<c1.length;i++){
        c2[i]=new Clothes(c1[i].color,c1[i].size);
    }
    • 字符串对象
      字符串常量与字符串池:
    public class compare {
        public static void main(String[] args) {
            String name1="Justin";
            String name2="Justin";
            String name3=new String("Justin");
            String name4=new String("Justin");
            System.out.println(name1==name2);
            System.out.println(name1==name3);
            System.out.println(name3==name4);
        }
    }
    

    "Justin"建立的String在字符串池中维护,所以name12参考的是同一个对象,而name34因为是new String所以建立的两个不一样的字符串,所以name34参考的对象不同。

    - 第五章要点:

    • 5.1 何谓封装
      使用java的构造函数语法,实现对象初始化流程的封装,拿到封装类的用户,不用重复撰写对象初始化流程。
      封装对象操作流程实例:
    void fun(int a){
        if(a>0){
            this.num++;
        }
    }
    • 5.2类语法细节
      public、private可以使用在类、方法、成员变量前定义。
      构造函数:在定义类时,可以使用构造函数定义对象建立的初始流程。构造函数是与类名称同名,无需声明返回类型的方法。示例:
    class name{
        int a=0;
        String strs;
        name(int a,String strs){
            this.a=a;
            this.strs=strs;
        }
    }

    数据成员初始值

    数据类型初始值
    byte0
    short0
    int0
    long0L
    float0.0F
    double0.0D
    char\u0000
    booleanfalse
    Stringnull
    null

    编译程序会在你没有撰写任何构造函数时,自动加入默认构造函数,所以可以这样以无自变量方式调用构造函数:

    Some some=new Some();

    重载构造函数: 可以定义多个构造函数,只要参数类型不同或者个数不同。

    public class Some{
        private int a=10;
        private String text ="n.a.";
        public Some(int a){
            if(a>0){
                this.a=a;
            }
        }
        public Some(int a ,String text){
            if(a>0){
                this.a=a;
            }
            if(text!=null){
                this.text=text;
            }
        }
    }

    final与static的区别在于:

    final double PI=3.14159;

    表示仅成员对象PI拥有不变值3.14159,

    static final double PI=3.14158;

    表示整个类拥有PI值;取值时应用:

    name(类名称).PI

    传值调用中c.name="String"与c=new classname("String");后者产生了新的参考对象,在结束函数调用时被JVM清除,而前者直接改变了函数穿入值。

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

    • 教材P121操作题斐波那契数列尝试:
    import java.util.Scanner;
    
    public class Fibonacci {
        public static void main(String[] args) {
            System.out.printf("求几个斐波那契数?");
            int num;
            Scanner scanner=new Scanner(System.in);
            num=scanner.nextInt();
            int[] fb=new int[num];
            fb[0]=0;
            fb[1]=1;
            int i=0;
            for(i=0;i<num;i++){
                if(i>1){
                    fb[i]=fb[i-1]+fb[i-2];
                }
                System.out.printf("%3d",fb[i]);
            }
        }
    }
    

    运行结果:
    1065407-20170312213028123-886910085.png

    • P121操作题查找数组中用户指定数字是否存写
    import java.util.Scanner;
    public class Find {
        public static void main(String[] args) {
            int[] num={1,10,31,33,37,48,60,70,80};
            System.out.println("Input find-number:");
            Scanner scanner=new Scanner(System.in);
            int find;
            find=scanner.nextInt();
            int i;
            for(i=0;i<9;i++){
                if(find==num[i]){
                    System.out.println("find it!");
                    break;
                }
            }
            if(i==9){
                System.out.println("No!");
            }
        }
    }
    

    运行结果:
    1065407-20170312213040576-1314495696.png

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

    • 教材P124页CashApp代码中缺少对CashCard类的定义,缺少编译不通过:
      1065407-20170312213104389-1798510271.png

    补上定义CashCard类:

    class CashCard1{
        String number;
        int balance;
        int bonus;
        CashCard1(String number,int balance,int bonus){
            this.number=number;
            this.balance=balance;
            this.bonus=bonus;
        }
    }
    

    运行结果如下:
    1065407-20170312213054795-1559192307.png

    代码托管

    • 代码提交过程截图:
      • 运行 git log --pretty=format:"%h - %an, %cd : %s"
        1065407-20170312213120357-1642030220.png
    • 代码量截图:
      • 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l
        1065407-20170312213128498-815689152.png

    1065407-20170312213140498-93178535.png

    上周考试错题总结

    • 1.Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)。
    • 2.判断:Java中,非零数字等价于true.(X)
    • 3.填空:编译p60 Comparison.java的命令为(javc –d xxx Comparison.java )
    • 4.判断:P64 Shift.java中第三个printf的输出结果是”2的2次方:4”。(X)
    • 5.判断:byte a=3;byte b=4; 那么 a+b的类型也是byte.(X)

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

    又一次尝试课后操作题,这次的操作题对于刚还是新手的我还是有一点难度的,起码不能很流畅、迅速的编出代码,还是需要翻翻前面的章节,好在一次运行通过,没出现什么错误,还是小有成就感的。大一学习c语言时,老师在期末总评中平时成绩一项采用部分作业系统的分数,最初我在作业系统上刷题是为了更高的平时成绩,刷着刷着我就发现我对于题目的理解变得更好了,也能更快、更好的写出答案。在作业系统上刷题不再仅仅只是为了分数,更是为了练习、提高自己的水平,学弟学妹问我们c语言如何学习的时候,我的答案就是多做题多练,掌握的很快。到了这学期学习java语言,虽然没有所谓的作业系统,但我觉得我更应该做到的是自律,没有作业系统也应该保持不间断的练习,这样才能刚快的入门,对java的理解才能更快。希望成长一年的我能够做到。

    学习进度条

    代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
    第三周554/7001/117/20
    • 计划学习时间:15小时

    • 实际学习时间:17小时

    参考资料

    • Java学习笔记(第8版)

    • 《Java学习笔记(第8版)》学习指导

    cs