20155318 2016-2017-2 《Java程序设计》第三周学习总结
20155318 2016-2017-2 《Java程序设计》第三周学习总结
教材学习内容总结
一、类与对象
Clothes c1 = new Clothes();将c1名称参考至新建对象(其中Clothes是一个类,c1就是一个对象)- 一个原始码可以有多个类定义,但只有一个是公开类,且文档名称与公开类名称相同
- 定义构造函数(与类同名的方法)
- 尽量不要在一个类中写多个class,如果有多个class,也只能有一个类前面加
public System.in对象上的int方法,是以int类型返回读入的字符编码。- 标准类
java.util.Scanner不需要每次输入java.util.Scanner,只需要输入Scanner,Scanner中的nextInt()方法会看标准输入中有没有输入下一个字符串,有的话会将之剖析为int类型。java.math.BigDecimal计算浮点数可以得到更好地精确度,内部提供plus(),substract(),multiply(),divide()方法,例如在整型条件下的a+b+c==0.3在这里写为a.add(b).add(c).equals(0.3)
- '='将某个名牌绑到某个对象,'=='将两个名牌绑到同一个对象上
- 打包器:为对象提供壳的类,类如Integer中的方法doublValue()可以返回double类型,compareTo()可以让Integer中的两个对象相比较,相同返回0;小于传入对象返回-1,大于返回1;
- 自动装箱、拆箱(基本类型):使用Long、Integer、Double、Float、Boolean、Byte等类来打包基本类型,将基本类型当作对象操作。J2SE5.0后可以自动装箱、拆箱。
Integer wrapper =10;//自动装箱
int foo = wrapper;//自动拆箱
封装 = 类 + 访问控制
- 总结:要产生对象必须先定义类,类是对象的模板,对象是类的实例。定义类使用class关键字,实例化对象使用new关键字。
二、数组
- 声明并赋初始值
int[] scores={……}; - 数组名.length表示数组的长度
- Java中数组是对象
- 与C语言不同,Java检查数组边界,越界会触发
ArrayIndexOutOfBoundsException异常 - 操作数组对象:使用new建立数组后,每个索引元素会有默认值,如果默认值不符合需求,则使用
java.util.Arrays的fill()方法设定新建数组的元素值,代码:
Arrays.fill(scores,60);
for(int score : scores){
System.out.printf("%3d",score);
}
运行结果:

- 注意用new指定初始值,不必写数组长度
- 数组复制
- 浅层复制
System.arraycopy()和Arrays.copyof()
scores2 =Arrays.copyOf(scores1,scores1.length)或System.arraycopy()中的五个参数分别是来源数组、来源起始索引、目的数组、目的起始索引、复制长度。
- 深层复制
- 浅层复制
Clothes2[] c2 = new Clothes2[c1.length];
for(int i = 0; i < c1.length; i++)
{
Clothes2 c = new Clothes2(c1[i].color, c1[i].size);
c2[i] = c;
}
三、字符串
- 字符串的本质是打包字符数组的对象,是java.lang.String类的实例
length()取得字符串长度charAt()取得字符串中某个字符toUpperCase()将原本小写的字符串内容转为大写的字符串内容- 用 "" 写下的字符串称为字符串常量,使用 + 连接字符串会产生新的String实例
四、封装
- 封装目的主要是隐藏对象细节。
- 使用private定义私有成员,封装了类私有数据,让用户必须通过你提供的操作方法,经过你定义的流程才有可能存取私有数据。
- 通过构造方法(构造函数)封装初始化流程
- 通过成员方法(函数)封装操作
- 通过成员变量封装数据
五、重载
- 可以定义多个构造函数,只要参数类型或个数不同。
- 定义方法时也可以进行重载,虽然调用的方法名称相同,但根据传递的自变量类型不同,会调用对应的方法
六、this
- this代表其所在函数所属对象的引用,简而言之就是this代本类对象的引用,当在函数内需要用到调用该函数的对象时,我们就可以使用this。
- this()代表了调用另一个构造函数,至于调用哪个构造函数,则视调用this()时给的自变量类型与个数而定。
七、static关键字
- static用于修饰成员(成员变量和成员函数),被声明为static的成员,不会让个别对象拥有,而是属于类。
- 在static方法中不能出现this关键字,static方法中不能用非static数据或方法成员。
- import static语法是为了偷懒,但要注意名称冲突的问题。
教材学习中的问题和解决过程
- 问题1:浮点数误差
- 问题1解决方案:利用BigDecimal
public static void main(String[] args) {
BigDecimal a=new BigDecimal("0.1");
BigDecimal b=new BigDecimal("0.1");
BigDecimal c=a;
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a.equals(b));
}
运行这段代码会得出如下结果

因为a和b都是浮点数,直接用“”会产生误差,利用BigDecimal中的equals()可以解决这个问题,另外需要注意的是'='和 “”的区别。
问题2 package与project与class
解决方案:百度。上周的git截图没有分目录 =,这周将代码重新按照老师给的目录整理了一下,首先要区分的的就是package与project与class的区别
project 是Java的项目,是所做的整个东西的集合,当然也有的大型工程可以是由若干个小项目组合而成的。
package 即包管理;是Java用来识别项目中各个类之间的层次关系,一个project项目中可以采用package的方式对你的class(类)进行分层管理,就好象我们在Windows操作系统中常见的文件目录管理一样。
project采用package方式管理class

问题3:课本92页代码
public static void main(String[] args) {
Integer i=10;
System.out.println(i+10);
System.out.println(i++);
}
运行结果如下:

为什么i++不显示11而是10
- 解决方案
- 运行
Integer i=0;
System.out.println(++i);
System.out.println(i++);
分别显示1和0
- i=i++是先赋值在自增,所以无论循环多少次,左边的i始终是0,最后结果就是0。这里和C语言有所不同
- i=++i,++i是先自增在赋值。
- 问题4:增强式for循环的score和scores
- 解决方法:增强式for循环
for (int score : scores){
System.out.printf("score: %d %n",score);
}
for(数据类型 代表数组中每个元素的名字:数组名)这个score可以是任何名字,这代表代表每次循环时候数组中的每个元素,可以用其他字母代替。
- 问题5:数组的相关问题
- 顺序走访二维数组
public class XY {
public static void main(String[] args) {
int[][] cords={
{1,2,3},
{4,5,6}
};
for(int[] row : cords)
{
for(int value : row)
{
System.out.printf("%2d",value);
}
System.out.println();
}
}
其中
int[][] cords
- 将数组1指给数组2,数组1中的对象也会指给数组2
int scores2=scores1;
scores2[0]=99;
System.out.println(scores1[0]);
- 无论score1怎么初始化,运行结为99
- 因为数组是对象,scores1和scores2是参考名称,将scores1指给scores2,是将scores1参考的对象也指给scores2参考,(scores1和scores2共同指向同一个对象)
- 二维数组也可以是不规则的数组,直接定义即可。
int[][] arr=new int[2][];
arr[0]=new int[] {1,2,3,4,5};
arr[1]=new int[] {1,2,3};
for(int[] row:arr)
{
for(int value:row)
{
System.out.printf("%2d",value);
}
System.out.println();
- 问题6:String/StringBuffer/StringBuilder的区别
- String:字符串常量,字符串长度不可变。
- StringBuffer:字符串变量,可以频繁对字符串内容进行修改,使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。
- StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。StringBuilder > StringBuffer
- 如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer
- 问题7:Java中怎么实现数字与数字字符串的互换
- 解决方案:(不理解)
- 123->“123”:
int atoi(String nptr) - “123”->123
String itoa(int value, int radix)
代码调试中的问题和解决过程
问题1:课本85页利用构建函数指定对象的成员,编译时出现了如图所示的错误提示:

解决方案:删去如图所示代码后毕通过正常运行原因未知

问题2:运行87页代码时产生如下错误提示

解决方案:改变原来代码目录之后,没有改package……这句代码,导致运行错误,应该改为
package chapter04.src问题3:数组复制
int[] scores1={88,66,48,99,12,45,55,76};
int[] scores2=scores1;
用上面这个代码不能复制数组,复制应该是出现两个内容相同的对象,但这只是让两个变量指向了同一个对象,也就是对象只有一个,并没有两个。所以真正的复制应该是这样的:
int[] scores1={88,66,48,99,12,45,55,76};
int[] scores2=new int[scores1.length];
for(int i=0;i<scores1.length;i++){
scores2[i]=scores1[i];
}
问题4:用Idea上传代码的时候总是出现这样一个警告

解决方案:这是在警告我们需要填写Commit Message,填写后可以上传。
代码托管
代码提交过程截图:

运行(起初Idea没有调试,依然使用了git bash here上传代码,Idea可以给每个代码填注释,今后会使用)
git add .
git commit -m "week03"
git push origin master
并截图



代码量截图:
运行statistics脚本
#!/bin/sh
#by rocedu(http://www.cnblogs.com/rocedu/)
echo "//==========Today====================================="
echo "code summary infomation:"
find . -name "*.java" -mtime 0 | xargs cat | grep -v ^$ | wc -l
echo "documents summary infomation:"
find . -name "*.md" -mtime 0 | xargs cat | grep -v ^$ | wc -l
echo "commit history:"
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F`
echo ""
echo ""
echo "//==========This Week================================="
echo "code summary infomation:"
find . -name "*.java" -mtime -7| xargs cat | grep -v ^$ | wc -l
echo "documents summary infomation:"
find . -name "*.md" -mtime -7| xargs cat | grep -v ^$ | wc -l
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-1 days"`
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-2 days"`
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-3 days"`
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-4 days"`
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-5 days"`
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-6 days"`
git log --pretty=format:"%h - %an,%ci: %s " | grep `date +%F --date="-7 days"`
echo ""
echo ""
echo "//==========All================================="
echo "code summary infomation:"
find . -name "*.java"| xargs cat | grep -v ^$ | wc -l
echo "documents summary infomation:"
find . -name "*.md"| xargs cat | grep -v ^$ | wc -l
echo "commit history:"
git log --pretty=format:"%h - %an,%ci: %s "
- 代码量截图

上周考试错题总结
- Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)。注意前天参数为2
- 判断: Java中,数字235.00的类型是float. (X)float类型范围为-127~128
- 填空:~0b1011的十进制值是(-12)
- 判断:Java中,非零数字等价于true.(X)
- 0x10%9 的结果是(7)0x10&9 的结果是(0)
其他(感悟、思考等,可选)
上周错题有些多,这周新知识量也比较大,觉得学习起来问题挺多,之后会继续努力。学Java还是要多编代码,建议老师减轻一下每周的学习任务,让我们有更多的时间去编代码练习。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 50/100 | 1/1 | 24/24 | 安装学习Java的一系列软件 |
| 第二周 | 250/300 | 1/2 | 30/54 | 了解Java的基本语法 |
| 第三周 | 552/852 | 1/3 | 16/60 | 了解Java是面向对象的语言 |
计划学习时间:20小时
实际学习时间:14小时
参考资料
20155318 2016-2017-2 《Java程序设计》第三周学习总结的更多相关文章
- Java程序设计第三周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
- 20155318 2016-2017-2 《Java程序设计》第一周学习总结
20155318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 上周总结 上周学习了一些大学的学习方法,比如知识分为为三种:元知识.软知识和硬知识,讲述技能 ...
- 20155318 2016-2017-2 《Java程序设计》第二周学习总结
20155318 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 Java编程风格 基本语法与C相似:调用main函数写public static void ...
- 20155304 2016-2017-2 《Java程序设计》第九周学习总结
20155304 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC ...
- 20155330 2016-2017-2 《Java程序设计》第九周学习总结
20155330 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
随机推荐
- python 脚本运行时报错: AttributeError: 'module' object has no attribute ***
最近在编写Python脚本过程中遇到一个问题比较奇怪:Python脚本完全正常没问题,但执行总报错"AttributeError: 'module' object has no attrib ...
- scala当中的Actor并发编程
注:Scala Actor是scala 2.10.x版本及以前版本的Actor. Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃. 1.什么是Sc ...
- 聊聊host中ip/域名映射记录的解析规则
今天宝叔突然在群里发了个问题; host做如下配置,a.com会指向哪里?或者说ping一下a.com结果会是什么? 127.0.0.1 a.com 192.168.4.106 a.com 192.1 ...
- 纯css3跑马灯demo
我们写跑马灯一般都是用js控制定时器不断循环产生,但是定时器消耗比较大,特别是程序中很多用到定时器的时候,感觉有的时候比较卡.但是css3样式一般不会.这里主要的思路就是用css3代替js定时器实现一 ...
- What Shape Layers Are-CAShapeLayer
矢量图.gpu直接使用.占用内存小 What Shape Layers Are Shape layers are layers capable of defining shapes as vector ...
- js的鼠标事件整理-------Day47
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/marSmile_tbo/article/details/34202437 今天回来的有些晚了,实在是 ...
- CentOS学习:第一天
阿里的一台ECS还有一个月到期,就趁这一个月的时间,用它来学习一下梦寐已久的CentOS. 由于历史原因,一直使用Windows环境,还从没接触过任何一种Linux系统. 在服务器端部署MySQL/T ...
- 解决MySQL新建用户后无法登录问题
在PHPMyAdmin里创建了一个新的用户,并且创建了密码,但是却一直无法使用这个账户登录到MySQL里. 解决过程分享给大家~ 1.以root身份登录mysql 2.删除MySQL中默认存在一个用户 ...
- Linux中PATH环境变量的作用和使用方法
关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...
- Ubuntu 14.04 系统安装后无法上网的问题(eth0识别不出)
Ubuntu 14.04 1.网口处网线状态等正常跳动 2.ifconfig 指令查询不到网卡信息 说明缺少了网卡驱动. 使用 lspci 指令查看系统中所有的驱动信息,找到 Ethernet Con ...