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

教材学习内容总结

第四章 认识对象

类与对象

1.定义类时使用class关键词再加名称,例如

class Clothes,新建对象时需要用new Clothes。若要将c1名称参考至新建对象,则可以Clothes c1 = new Clothes(),c1是引用,在栈上,new Clothes()在堆上生成对象,c1可以近似看成指向对象的指针。通过程序来学习,程序代码链接在这个程序中有两个类,一个是公开的Field类,另一个是非公开的,此处需要注意一个原始码中可以有多个类定义,但只能有一个是公开类,并且文档中的主文档名必须与公开类名称相同。该程序运行结果如下

构造函数

在上面的代码中可以看到当为个别对象指定数据的代码是类似的,可以通过构造函数来将这一步骤一并进行。例如,代码链接,改程序运行结果与上面的例子相同

分析该代码

class Clothes2
{
String color;
char size;
Clothes2(String color, char size)
{
this.color=color;
this.size=size;
}
}

这一部分完成了定义构造函数,并指定将某个参数的名称指定给这个对象的某个成员。

 Clothes2 sun = new Clothes2("red",'S');
Clothes2 spring = new Clothes2("green",'M');

这一部分是使用指定构造函数建立对象。

标准类

两个基本的标准类: java.util.Scanner以及 java.math.BigDecimal

1. java.util.Scanner可以接受用户的输入,可以通过import java.util.Scanner告诉程序你想偷懒,这样不用每次使用Scanner都输入前面的java.util.ScannerScannernextInt()方法会看看标准输入中有没有下一个字符串,有的话会尝试将之剖析为int型。next()是直接取得上一个字符串,nextLine()是取得用户输入的整行文字,练习书上的代码代码链接,结果如下

对书上的例题进行改编,进行一个小练习, 代码链接 ,得到结果如下图

2.关于 java.math.BigDecimal

Java遵守IEEE 754浮点数运算,使用分数与指数来表示浮点数,因此容易产生误差,那么要得到更好的精确度,我们就需要使用 java.math.BigDecimal了,在之前的学习中我们可以知道在JAVA中1.0-0.8不等于0.2,会产生精度误差,那么我们现在用 java.math.BigDecimal来再次进行尝试,代码链接,得到如下结果

BigDecimal提供plus()substract()multiply()divide()等方法,来进行加减乘除等运算。还有equals()可以比较两个BigDecimal实质上是否相等,避免了判断能不能用==来判断相等的错误。代码链接,得到下图所示结果

此处需要注意a.add(b).add(c).equal(result)的写法。

对象指定与相等性

此处需注意,当你在操作对象的时候,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。

基本类型打包器

打包基本类型,有助于了解基本类型与对象的差别,要想对基本类型像对象一样操作,可以使用long,IntegerDoubleFloatBooleanByte等类来打包基本类型,这些类就是所谓的打包器。

数组对象

在JAVA中数组就是对象。

数组基础

  • 首先建立数组,方法是:

    1.元素类型[] 数组名={元素1,元素2,...元素n};(适用于知道数组各元素)

    2.元素类型[] 数组名=new 元素类型[长度];(适用于不知道数组的元素但知道长度的数组)

    3.元素类型[] 数组名=new 元素类型[]{元素,...};(适用于赋一定初值)

    对于二维:

    1.元素类型[][] 数组名={{第一行个元素},{第二行个元素}...};

    2.元素类型[][] 数组名=new 元素类型[行长度][列长度];

    三维以上同理。
  • 其次要想取出数组中的所有元素,可以用length属性取得数组的长度,再用for循环依次取出数组中的值,也可用更方便的增强式for循环。前者代码链接,运行结果如下:

后者语法为for(int score :scores){ System.out.printf("学生分数: %d %n",score); }

  • 在二维变量中用数组名.length来得知有几行,用数组名[x].length来得知有几列,也可以使用增强式for循环来改写。这样会更简洁,代码链接,运行结果如下图

数组对象的操作以及复制

-数组对象的操作

1.不同数据类型的数组有着各自的初值,要想改变初始值就可以使用java.util.Arraysfill()来设定初始值,例如代码链接,运行如果如下

2.二维数组也可以是不规则的,代码链接,运行结果如下图

3.注意Integer类型的数组初始值为null。

  • 数组复制

    数组复制分千层赋值以及深层复制

    浅层复制有以下几种方法:

    1.在已有数组1下再建立一个新的数组2,长度为数,1的长度,再利用循环一个一个赋值。

    2.新建一个同上的数组,用System.arraycopy(),它的的五个参数分别是来源数组、来源起始索引、目的数组、目的起始索引、复制长度。

    3.用arrays.copyOf()不用另行建立新数组。例如,代码链接,运行结果如下图

深层复制需要将一些属性也一起复制,代码链接,运行结果如下:

字符串

在Java中,字符串是java.lang.String实例,用来打包字符数组,因此在JAVA中字符串是对象,但是可以将字符串剖析为基本类型,进行如下练习,代码链接,运行结果如下图

注意:在JAVA中只要“”包括的字符串一样,那么判断两个字符串是否==时,答案是true,但需注意如果是new string("")时,便是新建一个string实例,所以又是不同的对象了。要判断实际字符内容是否相等依旧应该使用equals()

第五章 对象封装

封装

  • 封装就是将类的内容隐藏起来,让用户不用且不能对类的内容进行修改,将对象的细节隐藏了起来。
  • 可以用构造函数的方法来实现对象初始化流程的封装。
  • 定义方法来操作对象。在类中定义方法,如果不用返回值,方法名称前可以声明void,方法若有返回值,必须在方法前声明返回值的类型。
  • 有些数据是类所私有的,那么可以使用private关键字定义。

类语法细节以及关于构造函数

  • public权限修饰,对于想要可以公开使用的类、函数以及方法等需要声明为public权限。
  • 没有定义任何权限关键字时,就是包权限。
  • 构造函数是与类名称同名,无须声明返回类型的方法。
  • 可以定义多个构造函数,只要参数类型或个数不同,这称为重载。

使用this

  • 在构造函数参数与对象数据成员同名时,可以用this加以区别。
  • this()代表了调用另一个构造函数,至于调运哪个构造函数,则看调用this()时给的自变量类型与个数而定。练习(代码),运行结果如下

static类成员

被声明为static的成员,不会让个别对象拥有,而是属于类,将类名称作为名称空间。通过类名称与"."运算符来存取的。在static方法或区块中不能出现this关键字,也不能调用非static方法或区块。

不定长度自变量以及内部类

使用不定长度自变量时,方法上声明的不定长度参数必须是参数列最后一个。不允许使用两个以上不定长度自变量。

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

  • 1对练习题2中的结果不知道该怎么解释。即均为true的原因。
  • 查阅书籍、上网搜索都没有得到解决。
  • 2.书本p99页上的 int [] score1={88,81,74...}; int[] score2=score1; score2[0]=99,输出score1[0],是99,而不是88,这是为什么呢?
  • 解决:通过再次查看书本的相关内容,数组时对象将score2=score1,就是经score1参考的对象给了score2,也就是两者参考的是一个对象,无论改变谁,对象发生了改变,那么结果也必然改变。

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

  • 1.不明白增强for循环中的控制变量的语法,例如在Score2中的for(int score : scores)score是怎么来的呢,是固定的吗?

  • 解决:通过查阅书籍以及上网查询,发现前面的score只是一个变量,可以将其改为别的例如Score3,代码链接,得到结果如下,与Score2的结果相同。

  • 2.在打印二维数组时在四一层循环里面会有一行System.out.println(),这个是用来二维数组行与行之间换行用的,那么如果换成printf也可以吗?

  • 编了一个程序,将println换成了printf("/n")以及print("/n")这样之后发现结果都是一样的。

  • 3.在深层复制(代码)的时候为什么要将c1中的每个索引参考的对象先给c再给c2?当我把c1中的索引参考的对象直接给c2的时候会出如下错误,是为什么呢?

  • 解决:已解决,不知道哪里出现了错误,再次编译之后的确可以直接复制。

代码托管

  • 代码提交过程截图:

  • 代码量截图:

上周考试错题总结

1.查找前天的文件,应该用2,查java文件应该用name.*java。

2.对于取反以及计算机中负数以补码存放了解的不够深刻。

3.java中,非零数字并不等价于true。

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

相比较前两周这周的学习任务更为繁重一些,因此学习到的内容明显增加,学习时间也有所提高,自己练习的代码行数也明显增加。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 1/4 20/20
第二周 145/165 1/5 12/32
第三周 411/576 1/6 16/48

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

参考资料

20155339 2016-2017-2 《Java程序设计》第3周学习总结的更多相关文章

  1. 20155306 2016-2017-2 《Java程序设计》第九周学习总结

    20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...

  2. 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结

    20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...

  3. 20155331 2016-2017-2 《Java程序设计》第九周学习总结

    20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...

  4. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  5. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  6. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  7. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  8. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  9. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  10. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

随机推荐

  1. Mac原生Terminal快速登录ssh

    1. 创建rsa key 在终端中输入以下命令: ssh-keygen -t rsa 完成之后可以在~/.ssh目录下找到公钥和私钥     如果你与我一样有使用gitlab,那么这个秘钥应该已经存在 ...

  2. 深入剖析Swift性能优化

    简介 2014年,苹果公司在WWDC上发布Swift这一新的编程语言.经过几年的发展,Swift已经成为iOS开发语言的“中流砥柱”,Swift提供了非常灵活的高级别特性,例如协议.闭包.泛型等,并且 ...

  3. http协议要素

    1)网络节点: 2)通信信道: 3)操作命令: 4)数据载体:

  4. 定义一个类Point,代表一个点,public属性有x和y,方法有显示点坐标 show(),构造函数有两个参数分别给x,y赋值,在main方法中构造两个对象,再创建一方法(getMiddle)为取两个点构成线段的中点的坐标,参数为2个点对象,调用此方法后得到一个新的点,编写Application,显示该对象的坐标值。

    这个题让我更加明白了类创建对象的实质 代码中用到:1.对象作形参;2.对象作返回值 以下用代码具体分析: class Point1{ public double x; public double y; ...

  5. 【noip模拟赛 王强的疑惑】 题解

    考试题. 是个DP. 50分可以通过子集枚举+线段覆盖(贪心)完成. 考试没时间写了一个子集枚举30分. #include <cstdio> #include <cstring> ...

  6. 支付宝在ios应用上的开发[转]

    前奏 现在随着移动开发的快速发展,越来越多的应用要求在线支付功能.最近做了一个关于支付宝支付功能的应用,在使用支付宝的过程中,遇到一些不必要的弯路,因此,写了这篇文章总结一下关于ios开发如何使用支付 ...

  7. LWIP network interface 网卡 初始化 以 STM32 为例子 后面会有 用 2G 或者4G 模块 用 PPP拨号的 形式 虚拟出网卡 所以先以 这个为 前提

    LWIP   network interface   网卡 初始化    以  STM32  为例子  后面会有 用  2G 或者4G 模块 用 PPP拨号的 形式  虚拟出网卡  所以先以 这个为 ...

  8. 字符型设备驱动程序-first-printf以及点亮LED灯(四)

    怎么样 把 写的 代码 和 编译 放到  开发板上 去执行? 2017年5月22日16:34:13 需要 自己 编译 Linux 内核.. 需要 以下 几个 条件: 1.正常运行 Linux 的 开发 ...

  9. NIO高并发基础

    NIO高并发 是jdk1.4出现的新的流. NIO - New IO - 同步式非阻塞式IO BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP ==AIO - Async ...

  10. [iOS]为git设置代理

    查看本地git配置信息 git config --global -e 查看自己***的代理地址和端口信息 为git添加代理 git config --global http.proxy https:/ ...