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就接近了。

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

    参考资料

  • 相关阅读:
    ios特性访问器方法(setter和getter)
    JavaScript文本收缩展开 showdetail
    MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类) Ver 1.65
    拖动层 拖动div 封装js 貌似不兼容FF,郁闷
    cookie中存储json
    页面get post等查看
    瑞星杀毒软件2010年1月11日8:29:28 【免费】
    div两侧的boder断开 消失 奇怪
    用来武装Firebug的十四款Firefox插件
    在内容页中调用母版页控件、响应控件消息(用户控件、服务器控件有所不同)
  • 原文地址:https://www.cnblogs.com/lsqsjsj/p/6537570.html
Copyright © 2011-2022 走看看