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

    20155232 2016-2017-3 《Java程序设计》第3周学习总结

    教材学习内容总结

    • 第四章 认识对象

    1.对象(Object):存在的具体实体,具有明确的状态和行为。

    2.类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制。

    类定义使用class关键词。

    新建对象使用new关键词。

    在构造函数中,将某个参数的值指定给某个对象的的成员时,对象用this表示。

    两个标准类:

    java.util.Scanner
    
    java.math.BigDecimal
    

    Scanner类简化了Java的输入,告诉编译程序接下来想偷懒。scanner的

    nextInt()
    

    方法会查看标注输入输出中,有没有输入下一个字符串。scanner对应每个基本类型,都会有对应的nextxxx()方法。

    由于浮点数误差,别用==直接比较浮点数运算结果。使用

    java.math.BigDecimal
    

    类。BigDecimal中提供的方法可以进行加减乘除等运算。

    小提示: 通过调用equals==()比较是否相同。

    在操作对象时,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。!=是比较两个是否没参考到同一对象上。

    3.基本类型包装

    int-Integer

    long-Long

    byte-Byte

    float-Float

    double-Double

    ...

    4.Java中,数组是对象,要声明数组并做初始值。如果存取超出范围,则会

    ArrayIndexOutOfBoundsException
    

    的异常。数组的length属性可以取得数组长度。

    小提示:在二维数组中,可以利用:数组名称[x].length得知每列有几个元素。

    可以使用

    java.util.Arrays
    

    的fill()方法来设定新建数组的元素值。

    易错点 :在类类型建立的数组中,例如:

    Integer[] scores = new Integer[3];
    

    建立了0个对象而不是三个!因为这个片段的写法建立的数组每个索引都是参考的null。

    Integer[] [] cords =new Integer [3][2];
    

    中还是建立了0个实例,因为有3个Integer类型的索引,分别参考至长度为2的Integer一维数组对象,而每个一位数组的索引都参考null,所以答案还是0个。

    5.使用

    System.arraycopy()
    Arrays.copyof()
    

    使用原生方式复制每个索引元素。其中

    System.arraycopy()
    

    的5个参数分别是来源数组,来源起始索引,目的数组,目的起始索引,复制长度。而第二个方法

    Arrays.copyof()
    

    则不用另行新建数组。且第2个参数是指定建立新数组的长度。

    注意:实际仅仅将第一个数组参考的对象,也给第二个数组来参考,并没有实际复制,仅仅是浅层复制。而深层复制就是将数组索引参考的对象分别指定给另一个数组。

    6.使用length()取得字符串长度,charAt()指定去的字符串中某个字符。使用toUpperCase()将小写转为大写。还可以使用+运算来连接字符串。

    7.在java中为了效率,以""包括的字符串,只要相同,无论在程序代码中出现几次,JVM都只会建立一个string实例,并在字符串池中维护。

    再次强调:
    想比较对象实质是否相同,不要使用==,使用equals()。对比较字符串也是同样。

    8.在java中,字符串一旦建立,就无法更改对象中的任何内容。如果使用+连接字符串,会变成建立java.lang.StringBuilder对象。使用append()来进行左右两边的附加。
    注意使用+连字符会产生新的string的实例,不要用在重复性的连接场合,例如循环,递归,因为会频繁产生新的对象,造成负担。

    9.查询API文件

    • 第五章

    1.在老师的学习指导中对封装进行了解释

    封装(Encapsulation)实际上使用方法(Method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,隐藏对象细节,将对象当作黑箱进行操作。

    2.流程如下:

    通过构造方法(构造函数)封装初始化流程

    通过成员方法(函数)封装操作

    通过成员变量封装数据

    注意在定义方法后,方法若会返回值,必须在方法前声明返回值的类型。

    提示在java命名习惯中,方法名称首字母是小写。

    3.信息隐藏

    对象内部的状态被保护起来了,不会被与该对象沟通的对象直接修改。

    对象内部特征的变化不会改变与其他对象沟通的方式

    如果有些数据是类所私有,在java中可以使用private关键字定义。如果想要修改则必须经过你定义的流程。

    在java命名规范中,取值方法的名称形式是固定的,也就是以get开头,之后接上首字母大写的单词。

    4.public权限修饰

    如果想在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,在java中要使用public加以声明。

    可以声明类为public,表示是个公开类,可以在其他包的类中使用。可以在构造函数上声明public,这表示其他包的类中可以直接调用这个函数。同样适用于方法。

    提示编译程序会在没有撰写任何构造函数时,自动加入默认构造函数,所以在没有撰写时,也可以以无自变量的方式调用构造函数。只有编译程序自动加入的构造函数,才称为默认构造函数,如果自行撰写无参数,没有内容的构造函数,就不称为默认构造函数了。

    5.方法重载

    参数类型和个数不同。

    调用的方法名称vauleOf(),根据传递的自变量类型不同,会调用对应的方法。例如:String.vauleOf(10),因为10是int型,所以会执行vauleOf(int i)版本。

    注意返回值类型不可作为方法重载依据。

    6.在java中,this()代表调用另一个构造函数,至于调用哪个构造函数,视调用this()时给的自编量类型与个数而定。

    注意this()调用只能出现在构造函数的第一行。

    7.被声明为static的成员,不会让个别对象拥有,而是属于类。可以通过.运算符取得static成员。同样适用于方法。

    注意由于static的成员是属于类,而非个别对象,所以在static成员中使用this()会产生语义上的错误。

    8.不定长度自变量

    要使用不定长度自变量,声明参数列时,要在类型关键字后加上...。使用时,方法上声明的不定长度参数必须是参数列最后一个。

    9.内部类

    在类中再定义类。

    10.传值调用

    java当中只有传值调用。

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

    • Java中,next();和nextLine();有什么区别?
    • 我在网上百度了一下,搜索结果如下:
      image
    • java程序中的parselong()方法有什么用?
    • 是将一个字符串转换成数字的。
      比如字符串
    String str="12345";
    
    

    现在你想把得到str表示的数字12345。那么就可以用

    parseLong(String str)
    

    方法转换,返回值就是long类型的数字12345,除parseLong以外,还有

    Integer.parseInt
    
    
    Double.parseDouble
    

    等方法也是同样的功能,只是返回值类型不同而已。

    • op1.add(op2).add(op3).equals(result)是什么用法?

    • 调用add()方法得到它们的和,再调用equals()进行判等。

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

    • 在试验书上p87页的代码时,0.1+0.1+0.1出现了不等于的情况。
      image
      image

    • 解决方案
      image

    • 在输入课本p145不定长度自变量的代码后,编译时都没有问题,在运行时出错。
      image
      image
      -解决方案

    在解决时,上网查了一下,没有找到合适的解决方法。(未解决)

    • p85 Field2.java: 构造方法的使用,构造方法决定了生成对象的方式。构造方法的参数与类成员变量一样,通过this区分。

    image

    结果:image
    加一行

    Clothes2 autumn = new Clothes2();

    能编译、运行吗?为什么?

    结果:image

    • p88 DecimalDemo.java: BigDecimal
      image
      出现错误如下:
      image

    解决过程:
    image

    代码托管

    • 代码提交过程截图:
      image

    • 代码量截图:
      image

    • 脚本截图
      image
      image

    上周考试错题总结

    • 5.判断: Java中, 数字235.00的类型是float. (X)

    原因:对于编译器来讲,如果只写上一个常量的小数,会默认为double型,就如上题,所以需要在定义float类型时必须加f。

    • 6.~0b1011的十进制值是(-12)

    原因:~表示位运算求补码。0000 1011 取反:1111 0100 (负数),因为负数存储以补码存,所以补码为1000 1100(-12)

    • Java中,非零数字等价于true.(X)

    原因:注意在c语言中非0即为真,而在java中只有1为真。

    • 0.123 == 1.23e-2 (X)

    原因:粗心大意,应该是1.23e-1.

    • 0x10%9 的结果是( 7 )

    分析:10转换成10进制为16,9为9,所以余数为7。

    • 0x10&9 的结果是(0)

    分析:10(x)=0001 0000(b)
    9(x)=0000 1001(b)
    按位与之后为0.

    • 运行p69 Odd.class的命令为(java cc.openhome.Odd)。

    原因:没有写cc.openhome直接写的java Odd。

    感悟心得

    • 对教材感悟

    在学习第四章时,觉得前三章比起来明显难度有所增加,也体会到了java和c语言面向的不同。java面向对象的概念有了大概的轮廓。区分了基本类型和类类型,了解了对象与参考的关系,也从打包器认识了对象,以对象观点看待了数组,认识了字符串的特性。在学习第五章时,感觉这部分好难,和c语言大不相同。认识了封装的概念(以前从来没有接触过)与实现。了解了定义类,构造函数与方法,感觉这三个有点混淆。在编写代码的过程中很多语法细节不知道如何修改和所代表的意思。还了解了方法重载的优点,static成员和不定长度自变量。总的来说这周学习的内容有点难度,有的地方看不太懂,会上网搜索查资料等等。但是感觉理解还是不到位,在实践上还是相差甚远。需要多加练习和看书。

    • 对考试感悟

    在这次考试中,对计算进制转换掌握的不够老练,还会犯很多低级错误,导致丢分。对位运算符逻辑运算符有些混淆。对java程序语言掌握的不够老练,换了题目就不会做了。还需要多加练习。

    • 课本中代码的部分展示与思考

    p84 Field.java: 访问对象的成员变量
    image在自己输入代码运行后有了更深刻的理解。程序中建立了两个实例,并声明为sun 与 spring 两个名称来参考,接着将sun绑定对象上的color与size分别指定为red与s,将spring的color与size指定为green与M,最后分别显示sun与spring的数据成员值。这个跟c语言中的结构体相似。
    运行结果:
    image

    p86 Guess.java: Scanner
    image
    运行结果
    image
    类比C语言的scanf。

    p97二维数组的实现
    image
    image

    p98使用java.util.Arrays的fill()方法设定新建数组元素。
    image
    image

    p105利用Array.copyOf()的方法,不用另行新建数组。
    image
    拷贝结果:
    image

    p106浅层复制
    执行结果和我们预期的不同:
    image
    结果是yellow。这是因为循环仅将c1索引处所参考的对象也给c2来参考,没有实际复制出clothes对象。

    p107深层复制
    image
    image

    p112
    image
    image
    利用StringBuilder每次append()调用过后,都会返回原有StringBuilder对象,只产生了一个对象,进行一次输出。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 15/15 1/1 23/26
    第二周 208/240 2/2 35/38
    第三周 376/584 3/3 32/38

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    参考资料

  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/lsqsjsj/p/6537570.html
Copyright © 2011-2022 走看看