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

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

    教材学习内容总结

    4.1 类与对象

    1. 定义类用class关键字,建立实例用new关键字
    2. 一个原始码中可有多个类定义,但只能有一个是公开类且其名称与文档名一致
    3. 构造函数是与类名称同名的方法,其作用相当于是初始化
    4. this的相关用法
    5. 两个基本的标准类:java.util.Scanner与java.math.BigDecimal
    6. ==用在对象类型,比较两个名称是否参考同一对象;!=用来比较两个名称是否没参考统一对象;equal()可自行定义如何比较两对象的内含值。如果用在基本类型,就与C语言一样,详见参考资料

    4.2 基本类型打包器

    1. 使用基本类型主要是为了效率,但是更多的时候基本类型所携带的信息不如对象多,因此为了让基本类型像对象一样操作,可用Long、Integer等类来打包基本类型,而Long、Integer等类就是所谓的打包器
    2. 基本类型打包器都是归类于java.lang包中
    3. J2SE5.0后提供自动装箱(拆箱)功能。输入:打包器 变量名 = 相应类型的数据

    4.3 数组对象

    1. 在Java中数组是对象,不是单纯的数据集合,数组的length属性可以取得数组长度,也就是数组的元素个数
    2. 若要循序地从头至尾取出数组值,从JDK5之后,有了增强式的for循环语法

    4.5 查询Java API文件

    Java中的类库非常丰富,要清楚地记得每个类以及每个类中所包含的方法也是一件难度很高的事情,因此API就像是一个字典一样,当我们在设计程序的时候,首先应该去想想会不会已经存在一个类,类里包含了所需要的方法,此时就要用到API。因此学会查询API并获得自己所需要的信息是学Java很重要的一步。

    5.2

    1. public权限修饰
      若想在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,用public进行声明

    2. 关于构造函数:与类名称同名,无返回类型,主要对对象进行初始化。

      注意:成员变量在堆内存中有默认初始化值(整型与字节型为0,float型为0.0F,double型为0.0D,字符型为u0000,布尔型为false,类类型为null)

    3. 构造函数与方法重载:因为不同对象在初始化的时候需要初始化不同的属性,但是也许本质操作都是一样的,为了阅读性更强,不需要程序员想出各种各样表达统一操作的名字,于是方法重载就是最好的办法。重载主要是看参数列表,系统根据参数列表自动选择需要调用的构造函数

      注意:JDK5后有自动装箱、拆箱的功能,若是输入1,系统会认为其是int型,若是希望它是Integer型,则需特别标明。

    4. 关于this:在使用构造函数的时候,有时为了阅读性更强,可能会使函数内部出现“number = number”这样的赋值语句,为了分辨清楚这两个number之间到底有什么区别,要用this进行区分且谁哪个对象调用this,this就是哪个对象。不仅如此,this还可以调用别的构造函数,至于具体调用哪个,也是由给this的自变量类型与个数来定,这样可使代码更加简洁

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

    5. 关于static:许多对象也许具有同一个属性,例如一个班级的学生都是属于这个班级的,因此逐一进行编写,不仅很麻烦而且浪费内存,因此用static进行修饰就好

      注意:1)养成良好的编成习惯,用类名加个.来调用static成员;
      2)由于static属于类并不是对象,因此在static成员中不能使用this。同理,在static方法或区块中也不能出现this关键字

    6. 不定长度自变量

    7. 内部类:类中再定义类

    8. 传值调用

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

    • 问题1:即类与对象在内存上的存储有什么不同?

    • 解决方案:通过学习资源以及网上的资料,我对课本P85的代码的理解为(见下图)

    • 问题2:课本P85中提到了构造函数,构造函数与函数有什么不同?其作用是什么?

    • 解决方案:通过老师给的学习资源、网上的解释以及自己实际动手进行编程操作,让我明白了构造函数相当于是一个初始化的作用,当某一个对象一出现便拥有某些属性的时候,便可用构造函数对其进行初始化,就像书上P85中Field2的程序中的Clothes2类一样,一出现就带着color和size这两个属性,但是它好像也有一个缺陷,如果接下来要修改color或者size的值就无法用构造函数进行修改,这时还是需要一个函数进行修改。另外从实际编程的结果来看(见下图),即使没有对p1进行初始化,系统也会专门给予一个值(String型的为NULL,int型的为0)

    • 问题3:课本P86提到的关键字this的用法是什么?

    • 解决方案:根据书上的解释,this主要是为了区分局部变量和成员变量,但是从网上的资料,this还有更多的用法

    • 问题4:对封装的理解,学习指导的解释“封装 = 类 + 访问控制(public,protected,private...)”是什么意思?

    • 解决方案:根据前面的学习,我的理解是类的封装性是指关于这个类的方法(函数)在这个类里,它本身提供接口与输出,如果后面的程序设计中需要用到这个方法,可以直接进行调用,而不需要明白这个方法在这个类中是如何写的,像现在使用的println()就是一个例子,目前只知道这个方法的功能是打印,但是具体这个方法在某个类中如何实现并不需要被知道。对于访问控制,根据学习资料上的指导,是使用了在变量前加上类似private这样的关键字,但是加上了之后便不可以直接使用这个变量,便要用函数的形式进行访问(例如set###或者get###),见下图

    关于public,protected,private的区别

    public:任何地方都能访问

    protected:在本包内能访问,而在包外只有它的子类能访问

    private:只有在本类中才可以访问

    • 问题5:课本P88提到了java.util.Scanner和java.math.BigDecimal,这些类中有哪些方法?学习中较常用到哪些方法?

    • 解决方案:通过网上的资料进行学习让我了解到:Java 5.0添加了java.util.Scanner类,用于扫描输入文本,可以任意地对字符串和基本类型(如int和double)的数据进行分析。Scanner对每个基本类型都有个相对应的next###()的方法(类似nextByte(),nextShort(),nextLong(),nextFloat(),nextBoolean()等)。

      对于java.math.BigDecimal,因为在某些计算中,要求的数字精度比较高,所以要用到此类,它支持任何精度的定点数。BigDecimal提供有plus(),substract(),multiply(),divide()等方法,可以进行加、减、乘、除等运算,这些
      方法返回BigDecimal类型

    • 问题6:对于数组的定义,int[] a = {}与int[] a = new int[]有什么区别?

    • 解决方案:前种定义是简化版的定义,由外界直接输入数组中的具体内容,因此可以省略掉数组的长度,后种定义是正式的定义,需要给出数组的长度。但是在定义数组的时候,不能既给出长度又给出数组的各个元素,这样编译会出错!

    • 问题7:在编程时定义了一个二维数组a[][],为什么a与a[0]的地址不一样?它们不都是数组a的起始地址吗?

    • 解决方案:通过下图较易理解,二维数组是由一维数组构成的,因此a[0],a[1],a[2]里面都是引用类型,引用类型的初始化值默认为NULL

    • 问题8:课本P138提到了关键字final,对此不太了解,final的特点与作用是什么?

    • 解决方案:final修饰类的时候,类不能被继承;final修饰方法的时候,被修饰的方法不能被重写;final修饰变量的时候,该变量不能被重新赋值,即只能被赋值一次(此时这个变量是常量(自定义常量)),其中,final修饰局部变量的时候(初始化的最佳时机是在构造方法完毕前(非静态的常量))分为两种:final修饰基本类型的时候,基本类型的值不能发生改变;final修饰引用类型的时候,是指它修饰的变量的地址值不能变,但是该对象的堆内存的值是可以改变的

    • 问题9:包是什么?(补前面学习未明白的地方,课本P35)

    • 解决方案:包其实就是文件夹,包的作用是对类进行分类整理,区别相同类名,因为同一文件夹下不能有相同类名(即把相同的类名放到不同的包中)

      对包的分类方案:方案1:按功能分(比较好找);方案2:按模块分;也可结合使用

      定义包的方法:package 包名;多级包用.分开

      注意事项 :1)package语句必是程序的第一条可执行的(能被识别)代码;2)package语句在一个Java文件中只能有一个;3)若无package,默认为表示无包名

      带包后何编译和执行的方法:1)手动式,编写一个带包的Java文件————编译————手动创建包名————把编译好的文件放在创建好的包中的最里面一层————回到和包根目录在同一目录的地方带包运行;2)自动式,编译时带上-d . 即可,访问的时候带包运行

      不同包下的类之间的访问:首先要对程序中要使用到的文件进行编译,再对最外层的Java文件进行编译并运行,(注意对Java文件里所涉及到的其他类的.class文件的路径说完整(全路径),如果太长且经常用,可以用import简化工作量,即导包)

      关于导包: import 包名;这种方式是导入到类的级别,要写在package下面

      1)package:只能有一个 2)import:可有多个3)class:可有多个,但最好是一个

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

    • 问题1 课本P109的程序运行结果为什么是NaN?
    • 解决方案:看了学长们的博客,发现之前也有人碰到过这个问题

    代码托管


    上周考试错题总结

    • 填空:~0b1011的十进制值是(-12)

      原因:对~是什么意思不理解

      理解情况:~是取反的意思,0000 1011去反后是1111 0100,这在计算机中属于补码的形式,因此真值就是1000 1100,即-12

    • 判断:Java中,非零数字等价于true (X)

      原因:以为Java在处理非零数字的时候C语言一样

      理解情况:Java是一种强类型的语言,Java既不能用非0代表true,也不能用0代表false,只能用布尔型的true和false来进行条件判断。

    • 判断: 0.123 == 1.23e-2 (X)

      原因:尚不理解,程序运行的结果也没有问题

    • 判断:byte a=3;byte b=4; 那么 a+b的类型也是byte.(X)

      原因:没注意到类型转换

      理解情况:java的自动转型机制。在两个byte类型的数据相加后,变成了int类型的了。需要转型。

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

      原因:只写了java Odd

      理解情况:要写全路径,写完整

    • 填空:Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)

      原因:对find的格式有不太理解的地方

      理解情况:-ctime n 查找n天以前文件状态被修改过的所有文件;find的格式为find pathname -options [-print -exec -ok ...]

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

    总的来说,这周的学习内容还是不少的,要每天都有一定量的学习才能完成学习任务。同时,我觉得在敲书上的代码的时候,不能仅仅是敲,更要明白这个代码是什么意思,为什么要这么写,改一下写法会有什么其他的问题也很重要

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 25/25 1/1 20/20 对IDEA、git、JDK、JVM有了更多的了解,面对学习过程中遇到的困难学会自己主动地寻找办法去解决
    第二周 156/181 1/2 18/38 掌握了Java中的基本运算符和基本语句
    第三周 1083/1264 1/3 22/60 对面向对象、封装、构造函数等重要知识点有了初步理解,学会自主学习,遇到困难的时候从多方面寻找资料以求答案

    但因之前目录结构有错,所以进行了一定的调整,把之前一二周上传过的文件又再次上传了一次,因此实际的代码行数要减掉一些。

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

    参考资料

  • 相关阅读:
    Vue 冷知识(一)
    Google Chrome 谷歌浏览器 调试被坑之路
    全选、全不选、反选
    赋值运算符
    JS 数组的常用方法归纳之不改变原数组和其他
    CSS控制文字,超出部分显示省略号
    火狐浏览器解决跨域问题
    JS 数组的常用方法详解归纳之改变原数组方法
    vue项目 多文件上传并显示在页面上
    二叉搜索树操作
  • 原文地址:https://www.cnblogs.com/rafell/p/6537694.html
Copyright © 2011-2022 走看看