20155339 2016-2017-2 《Java程序设计》第3周学习总结
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.Scanner。Scanner的nextInt()方法会看看标准输入中有没有下一个字符串,有的话会尝试将之剖析为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,Integer、Double、Float、Boolean、Byte等类来打包基本类型,这些类就是所谓的打包器。
数组对象
在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.Arrays的fill()来设定初始值,例如代码链接,运行如果如下

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就接近了。
计划学习时间:18小时
实际学习时间:16小时
改进情况:学习时间有所提高。
参考资料
20155339 2016-2017-2 《Java程序设计》第3周学习总结的更多相关文章
- 20155306 2016-2017-2 《Java程序设计》第九周学习总结
20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...
- 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结
20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...
- 20155331 2016-2017-2 《Java程序设计》第九周学习总结
20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
随机推荐
- 关于由ajax返回的数据在for循环中只能取到最后一个数的问题
关于由ajax返回的数据在for循环中只能取到最后一个数的问题 以上是来自后台的数据格式.从数据中可以看出,里面包含两个商品,每个商品价格分别为:1.98,13.60.这里我要计算两个商品的总价格,但 ...
- SGU---462 Electrician 最大生成树
题目链接: https://cn.vjudge.net/problem/SGU-462 题目大意: 有N条电线需要接入电网,第i条电线计划连接ai和bi两个地点,电线有两个属性:ri(电线稳定度)和c ...
- c++ 一般虚函数
类图: 代码: #include <iostream> using namespace std; class CFather //父类 { public: virtual void dis ...
- 问题:android学习内容破碎,我个人关于如何学习android的一些个人经历
android学习两个月心得 我于大三下学期,开始准备学习android,在寒假期间,学了毕向东的java视频的前10天,觉得还不错,上网找评论,他们都说,只要学到多线程就可以学习android了, ...
- 3109. [CQOI2013]新数独【DFS】
Description Input 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第偶数行包含上下方向的符号(^和v). Output 输出包含9行,每行 ...
- 「bzoj 4025: 二分图」
题目 显然二分图没有奇环 于是考虑使用并查集维护一下看看是否存在奇环 我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离 由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就 ...
- POJ 1743 Musical Theme 【后缀数组 最长不重叠子串】
题目冲鸭:http://poj.org/problem?id=1743 Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Su ...
- Oracle输出数字1-10
,) from dual connect by level<
- DataFrame 加减乘除
headlist = ['a', 'b'] datalist = [[1, 2], [0,3], [3,2]] df = pd.DataFrame(data=datalist,columns=head ...
- Eclipse操作Servlet入门案例,创建类无法实现Servlet接口和继承HttpServlet类
问题描述: 从昨天下午到今天中午,这个问题被缠绕了良久.百度了很多,却都没有一言命中要害. 首先,还是基于对Web的理解. 第一:建立的是Dynamic Web Project: 第二:然后需要 ...