20155320 2016-2017-3 《Java程序设计》第三周学习总结
20155320 2016-2017-3 《Java程序设计》第三周学习总结
教材学习内容总结
定义类
步骤:
- 在程序中定义类
- 使用
new
关键词新建一个对象 - 声明参考名称,并将名称参考至新建对象
- 定义对象数据成员
运行结果为:
同时还可以通过定义构造函数的方法来达到同样的目的,在这种情况下使用new创建对象时,就可以直接传入字符串与字符,最后结果并无差异。
运行结果如下,与上一个运行结果一致:
使用标准类
使用java.util.Scanner
- 使用import偷懒,这样每次都只要输入Scanner就行
- 在建立Scanner实例时,必须传入java.io.InputStream的实例,此处即为
System.in
- Scanner的nextInt方法会将输入的下一个字符串剖析为int类型,nextByte()、nextShort()、nextLong()等同理。若想直接取得上一个字符串,则使用next(),nextLine()能取得用户输入的整行文字。scanner 的nextInt()代码
运行结果为:
使用java.math.BigDecimal
- 在使用浮点数时为了避免误差,得到更好的精确度可以使用java.math.BigDecimal
- BigDecimal 提供有plus(),substract(),multiply(),divid()等方法,可以进行加、减、乘、除==。BigDecimal的加减乘除代码
运行结果为
- =是用指定参考名称参考某个对象,==是比较两个参考名称是否参考同一对象,equals()是比较两对象的内涵值。==,=,equals()的区别代码
运行结果为:
数组对象
- 数组是用来收集数据,具有索引的数据结构
- 若要依次取出数组中的每个值可以有两种方法1.使用for循环2.使用增强式for循环。两者效果相同,但增强式for循环更简洁。
- 数组的length属性可以取得数组长度
运行结果一致,均为:
- 可以使用new关键词来指定数组长度建立数组,例如:
int[] scores=new scores[10]
,当想一并指定初始值时不要定义数组长度,
可以使用java.util.Arrays的fill方法来设定新建的初始值。
使用Arrays.fill的程序
运行结果为:
二维数组同一维数组类似
二维数组下的两种取值方法使用类类型建立数组时需注意,
Integer[] scores=new Integer[3]
建立的是0个参考对象,因为如果建立的是类类型,那么每个索引都是参考至null的。数组的复制,可以使用
Arrays.copyOf()
方法,括号内第一个为需复制的数组,第二个位新建数组的长度。无论
Systemh.arraycopy()
还是Arrays.copyof()
,用在类类型声明的数组时都是 浅层复制程序。
运行结果为:
- 深层复制需要自行复制元素。深层复制程序
运行结果为:
由深层复制与浅层复制的程序运行结果与程序对比可以看出虽然都新建了参考但是浅层复制并没有实际复制元素。
字符串对象
- 字符串本质是打包字符数组的对象,是java.lang.String类是实例,用来打包字符数组。
- 字符串拥有对象的操作性质,
length()
取得字符串长度,charAt()
指定取得字符串中某个字符(索引从0开始),toUpperCase()
将原本小写的字符串内容转换为大写。 - 可以使用
toCharArray()
方法将字符串以char[]数组的形式输出。 - 将字符串转化为整数、浮点数等类型,可以使用类似
Byte.parseByte(number)
- 可以用+连接字符串。
字符串的转换为基本类型的代码 - 为了效率,以“”包括的字符串,只要内容相同,无论在程序中出现几次,都只会建立一个String实例,并在字符串池中维护,而new一定是建立新对象。
字符串池的程序
public class Justin {
public static void main(String[] args) {
String name1="justin";
String name2="justin";
String name3=new String("justin");
String name4=new String("justin");
System.out.println(name1.equals(name2));
System.out.println(name3.equals(name4));
System.out.println(name1==name2);
System.out.println(name4==name3);
}
}
运行结果为(可明显看出字符串池的特点):
- 要比较字符串实际内容是否相同,不要使用==,要使用
equals()
- 在java中,字符串对象一旦建立就无法改变对象中的任何内容
- 使用+连接会产生新的String实例,因此不要将+用在重复性的连接场合,例如循环和递归时
对象封装
在编写具有多步重复步骤的程序时,可以1.定义方法2.使用数组来让程序更简洁。
使用
private
关键字定义那些类所私有的数据,这样就阻止了用户自由存取类私有数据,只有当提供有方法存取private成员时,用户才能存取。取值方法的名称形式是固定的,以get开头,之后接上首字母大写的单词。
声明为private的成员,用户无法再其他类的程序代码中直接存取,没有声明权限修饰的成员,只有在相同包的类程序代码中才可以直接存取。若要直接存取,必须要使用public声明
方法重载可根据传递自变量的类型不同,也可根据参数列个数的不同来设计方法重载,返回值类型不可以作为方法重载依据。
this()代表调用另外一个构造函数,但是this()调用只能出现在构造函数的第一行
若对象数据成员被声明为final,但没有明确使用=指定值,那表示延迟对象成员值的指定且必须要指定,否则编译错误。
被声明为static的成员不会让个别对象拥有,而是属于类,方法也能被声明为static成员,可以通过类名称与“.“运算符来调用,极度不建议使用参考名称存取static成员
static方法或区块中不能出现this关键词,也不能调用非static方法或区块
教材学习中的问题和解决过程
- 在学习第四章时,StringBuilder.append操作并不是很懂,我按照课本上的程序编写了one To 100
- 后来我按照课本方法到官网查阅了相关的API,但看不太懂,最后我在一篇名为java中stringBuilder的用法的博客中了解到
Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder对象表示的字符串的结尾处。
Append()每次调用过后,都会返回StringBuilder对象。
- 在学习第四章的操作数组对象时,在编写IntegerArray时(代码如下),为何装箱是
scores[0]=new Integer(90)
,而不是Integer scores[0]=new Integer(90)
,且如果写成这样的话编译还会出现错误
public class IntegerArray {
public static void main(String[] args) {
Integer[] scores=new Integer[3];
for(Integer score:scores){
System.out.println(score);
}
scores[0]=new Integer(90);
scores[1]=91;
scores[2]=88;
for(Integer score:scores){
System.out.println(score);
}
}
}
-这个我目前还没有找到原因。
代码调试中的问题和解决过程
- 在按照书上以类类型建立数组时,输出每个数组中的每个值时,出现了如下错误:
我的代码是:
public class IntegerArray {
public static void main(String[] args) {
Integer[] scores=new Integer[3];
for(score:scores){
System.out.println(score);
}
scores[0]=90;
scores[1]=91;
scores[2]=88;
for(score:scores){
System.out.printf("%2d",score);
}
}
}
- 通过对照我发现,这是由于我在使用增强for循环时,没有给score定义为同参考名同类的类类型。修改后编译成功,正确代码ps:此处极易出错,在后边的编程中我多次出现了同一错误。
-在练习BigDecimal的加法时,课本上说plus()和add()均为其加法,然而我在编程写plus()时却出现了编译错误。
程序如下:
错误截图:
- 查阅资料后发现BigDecimal的加法就是add()。
代码托管
代码提交过程截图:
代码量截图:
上周考试错题总结
- 题6,0b1011的十进制数是(-12),没有正确理解补码,以及在java中均为有符号数,且以1byte即8位来储存,所以,0b1011=11110100,补码的原码为10001100,十进制即为-12。
- 题12,看错了,正确应该为0.123=1.23e-3
-题1, Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)
其他(感悟、思考等,可选)
本周的学习任务有两章且难度相较前几周都有提升,但是我吸取了前几次的经验,分散了学习时间,且在本周的学习中我发现了编程的必要性,有许多看了以后觉得理解了的,实际操作起来就会忘,并且通过自己编程我发现了许多和书上描述的不同的地方,比如BigDecimal的加法,编写程序IntegerDemo时,使用doubleValue()将打包值以double类型返回后,结果并不是书上写的3.3333333333...,而是
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/4 | 20/20 | 安装了JDK及IDEA |
第二周 | 144/164 | 1/5 | 18/38 | 学习了java语言的基本语法 |
第三周 | 447/567 | 1/6 | 20/ 58 | 掌握了一些有关对象和封装的内容 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:22小时
实际学习时间:20小时
改进情况:
参考资料
20155320 2016-2017-3 《Java程序设计》第三周学习总结的更多相关文章
- Java程序设计第三周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
- 20155320 2016-2017-2《Java程序设计》第九周学习总结
20155320 2016-2017-2<Java程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 ...
- 20155320 2016-2017-2 《Java程序设计》第二周学习总结
20155320 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 本周主要学习了java语言的基础语法,我发现与以前学过的c语言有许多共同点,无论是从一些基本 ...
- 20155326 2016-2017-2 《Java程序设计》第九周学习总结
20155326 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 1.撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. 2.JDBC目的 ...
- 20155227 2016-2017-2 《Java程序设计》第九周学习总结
20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...
- 20155328 2016-2017-2 《Java程序设计》第九周学习总结
20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...
- 20155216 2016-2017-2 《Java程序设计》第九周学习总结
20155216 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC架构 JDBC API的使用 JDBC连接数据库 1.导入JDBC包: 添加impo ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
随机推荐
- CRF++ 如何制定自己的特征模板
工具的简单介绍 对该工具的安装及介绍我这里就不再赘述,请参考官方文档或者国内一些翻译后的中文版.也还比较清楚. 我只介绍一下crf++在命名实体识别中的一些用法,这些都建立在你了解crf++的一些最基 ...
- Shell的egrep、grep、fgrep命令的使用
Linux egrep 命令用于在文件内查找指定的字符串.与grep-E使用语法及参数相似,不同点在于解读字符串的方法. 语法: egrep [范本模式] [文件或目录] 参数说明: [范本模式]:查 ...
- 【[LNOI2014]LCA】
这题好神啊 能够\(1A\)真是不可思议 首先看到要求的这个柿子\(\sum_{i=l}^{r}deep[LCA(i,z)]\),而且\(l\)和\(r\)并不是来自与一棵子树或者一条链,而是编号连续 ...
- 【[国家集训队] Crash 的文明世界】
先写一个五十分的思路吧 首先这道题有一个弱化版 [POI2008]STA-Station 相当于\(k=1\),于是就是一个非常简单的树形\(dp\)的\(up\ \ and\ \ down\)思想 ...
- 5、Spring-Cloud-声明式调用 Feign(上)
5.1.写一个 Feign 害户端 新建项目: 依赖: <dependency> <groupId>org.springframework.boot</groupId&g ...
- No.1 - 制作一个简单的菜单动画效果---百度IFE
最近比较闲,在家做点训练 http://ife.baidu.com/course/detail/id/18?t=1527144851578#learn CSS3新特性,兼容性,兼容方法总结 https ...
- LORA芯片SX1272IMLTRT资料介绍
升特公司(Semtech)(纳斯达克:SMTC)日前推出新型远程RFIC平台的首款产品SX1272,可将器件的无线传输距离扩大至15公里. 该器件集成了升特公司的新型LoRa(远程)调制技术,相比其他 ...
- 【Linuc-CentOS 】通过yum安装 指定版本的nodejs
原 [Linuc-CentOS ]通过yum安装 指定版本的nodejs 2018年06月21日 06:56:32 黑夜的风 阅读数:884 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- log4j 日志配置和jar包下载
1.日志log4j文件配置 ${webapp.root}才是项目根目录log4j.appender.logfile.File= ${catalina.home}/log/filter.log 指生成日 ...
- 错误的另一个常见原因是默认的安全组规则。default security group默认情况下不允许ICMP(ping命令使用的协议)
可以在openstack horizon界面中添加ICMP和ssh(TCP)规则,也可以通过命令行.命令行方式给默认安全组添加规则的方法如下: $ nova secgroup-add-rule def ...