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

教材学习内容总结

定义类

步骤:

  • 在程序中定义类
  • 使用new关键词新建一个对象
  • 声明参考名称,并将名称参考至新建对象
  • 定义对象数据成员

按如上步骤写的代码Field

运行结果为:

同时还可以通过定义构造函数的方法来达到同样的目的,在这种情况下使用new创建对象时,就可以直接传入字符串与字符,最后结果并无差异。

定义构造函数代码Field2

运行结果如下,与上一个运行结果一致:

使用标准类

使用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关键字和取值方法的程序

  • 声明为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就接近了。

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

参考资料

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

  1. Java程序设计第三周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...

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

    20155320 2016-2017-2<Java程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 ...

  4. 20155320 2016-2017-2 《Java程序设计》第二周学习总结

    20155320 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 本周主要学习了java语言的基础语法,我发现与以前学过的c语言有许多共同点,无论是从一些基本 ...

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

    20155326 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 1.撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. 2.JDBC目的 ...

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

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

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

    20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...

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

    20155216 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC架构 JDBC API的使用 JDBC连接数据库 1.导入JDBC包: 添加impo ...

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

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

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

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

随机推荐

  1. apt 安装 tomcat

    apt 安装 tomcat 直接使用 agt-get 安装 apt-get install tomcat7 # or apt-get install tomcat8 需要一段时间后就安装完成了. 安装 ...

  2. java二维数组定义初始化-杨辉三角

    public class Array2Demo2_3 { public static void main(String[] args) { //定义初始化 int[][] arr = new int[ ...

  3. 关于javascript的单线程和异步的一些问题

    关于js单线程和异步方面突然就糊涂了,看别人的文章越看越糊涂,感觉这方面是个坑,跳进去就不好跳出来.再去看,看着看着感觉自己明白了一些东西,也不知道对不对,反正是暂时把自己说服了,这样理解能理解的通, ...

  4. sed.md

    SED sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用s ...

  5. Owin+ASP.NET Identity浅析系列(三)框架结构分析

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...

  6. virtualbox+vagrant学习-5-Boxes-1-简介

    Boxes boxes是vagrant环境的包格式.在vagrant支持的任何平台上,任何人都可以使用一个box来创建一个相同的工作环境.vagrant box实用程序提供了管理boxes的所有功能. ...

  7. Ubuntu安装PHP7

    安装PHP7 Ubuntu 16.04官方源自带PHP7,所以可以直接使用apt-get来安装. (1)安装PHP7以及常用扩展. -fpm php7.-mysql php7.-common php7 ...

  8. PL/SQL Developer编码格式设置

    通过PL/SQL中文字段显示乱码或者导出数据出现乱码,原因是数据库的编码格式和PL/SQL的编码格式不统一导致. 查看ORACLE数据库字符集: select userenv('language') ...

  9. CC2540 低功耗串口, POWER_SAVING 模式 下 串口 0 的使用

    低功耗 模式 下 使用 串口 ,  因为 PM2 或者 PM3 状态下  32M晶振 是不工作 的,根据手册得知没有32M晶振, 串口是不能工作的,但是可以使用 外部中断,因此,我把  串口的接收引脚 ...

  10. WAPM环境配置(PHP入门2)

    WAMP介绍 W:Window:开源免费 A:Apache:开源免费 M:MySQL:开源免费 P:PHP:开源免费 Apache下载 Apache下载地址:https://www.apachehau ...