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

教材学习内容总结

一、类与对象

  1. Clothes c1 = new Clothes();将c1名称参考至新建对象(其中Clothes是一个类,c1就是一个对象)
  2. 一个原始码可以有多个类定义,但只有一个是公开类,且文档名称与公开类名称相同
  3. 定义构造函数(与类同名的方法)
  4. 尽量不要在一个类中写多个class,如果有多个class,也只能有一个类前面加public
  5. System.in对象上的int方法,是以int类型返回读入的字符编码。
  6. 标准类
    1. java.util.Scanner不需要每次输入java.util.Scanner,只需要输入Scanner,Scanner中的nextInt()方法会看标准输入中有没有输入下一个字符串,有的话会将之剖析为int类型。
    2. java.math.BigDecimal计算浮点数可以得到更好地精确度,内部提供plus(),substract(),multiply(),divide()方法,例如在整型条件下的a+b+c==0.3在这里写为a.add(b).add(c).equals(0.3)
  7. '='将某个名牌绑到某个对象,'=='将两个名牌绑到同一个对象上
  8. 打包器:为对象提供壳的类,类如Integer中的方法doublValue()可以返回double类型,compareTo()可以让Integer中的两个对象相比较,相同返回0;小于传入对象返回-1,大于返回1;
  9. 自动装箱、拆箱(基本类型):使用Long、Integer、Double、Float、Boolean、Byte等类来打包基本类型,将基本类型当作对象操作。J2SE5.0后可以自动装箱、拆箱。
Integer wrapper =10;//自动装箱
int foo = wrapper;//自动拆箱

封装 = 类 + 访问控制

  • 总结:要产生对象必须先定义类,类是对象的模板,对象是类的实例。定义类使用class关键字,实例化对象使用new关键字。

二、数组

  1. 声明并赋初始值int[] scores={……};
  2. 数组名.length表示数组的长度
  3. Java中数组是对象
  4. 与C语言不同,Java检查数组边界,越界会触发ArrayIndexOutOfBoundsException异常
  5. 操作数组对象:使用new建立数组后,每个索引元素会有默认值,如果默认值不符合需求,则使用java.util.Arraysfill()方法设定新建数组的元素值,代码:
Arrays.fill(scores,60);
for(int score : scores){
System.out.printf("%3d",score);
}

运行结果:

  • 注意用new指定初始值,不必写数组长度
  1. 数组复制

    1. 浅层复制System.arraycopy()Arrays.copyof()
    • scores2 =Arrays.copyOf(scores1,scores1.length)System.arraycopy() 中的五个参数分别是来源数组、来源起始索引、目的数组、目的起始索引、复制长度。
    1. 深层复制
 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;
}

三、字符串

  1. 字符串的本质是打包字符数组的对象,是java.lang.String类的实例
  2. length()取得字符串长度
  3. charAt()取得字符串中某个字符
  4. toUpperCase()将原本小写的字符串内容转为大写的字符串内容
  5. 用 "" 写下的字符串称为字符串常量,使用 + 连接字符串会产生新的String实例

四、封装

  1. 封装目的主要是隐藏对象细节。
  2. 使用private定义私有成员,封装了类私有数据,让用户必须通过你提供的操作方法,经过你定义的流程才有可能存取私有数据。
  3. 通过构造方法(构造函数)封装初始化流程
  4. 通过成员方法(函数)封装操作
  5. 通过成员变量封装数据

五、重载

  1. 可以定义多个构造函数,只要参数类型或个数不同。
  2. 定义方法时也可以进行重载,虽然调用的方法名称相同,但根据传递的自变量类型不同,会调用对应的方法

六、this

  1. this代表其所在函数所属对象的引用,简而言之就是this代本类对象的引用,当在函数内需要用到调用该函数的对象时,我们就可以使用this。
  2. this()代表了调用另一个构造函数,至于调用哪个构造函数,则视调用this()时给的自变量类型与个数而定。

七、static关键字

  1. static用于修饰成员(成员变量和成员函数),被声明为static的成员,不会让个别对象拥有,而是属于类。
  2. 在static方法中不能出现this关键字,static方法中不能用非static数据或方法成员。
  3. 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:数组的相关问题
  1. 顺序走访二维数组
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. 将数组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共同指向同一个对象)
  1. 二维数组也可以是不规则的数组,直接定义即可。
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”->123String 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 "
  • 代码量截图

上周考试错题总结

  1. Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)。注意前天参数为2
  2. 判断: Java中,数字235.00的类型是float. (X)float类型范围为-127~128
  3. 填空:~0b1011的十进制值是(-12)
  4. 判断:Java中,非零数字等价于true.(X)
  5. 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程序设计》第三周学习总结的更多相关文章

  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. 20155318 2016-2017-2 《Java程序设计》第一周学习总结

    20155318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 上周总结 上周学习了一些大学的学习方法,比如知识分为为三种:元知识.软知识和硬知识,讲述技能 ...

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

    20155318 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 Java编程风格 基本语法与C相似:调用main函数写public static void ...

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

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

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

    20155330 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛 ...

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

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

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

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

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

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

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

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

随机推荐

  1. Linux命令--获取帮助

    man命令 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息. 语法 man(选项)(参数) 选项 -a:在所有的man帮助手册中搜索: -f:等价 ...

  2. 阿里八八“好记”——UML设计

    团队分工 叶文滔:软件整体框架部分 俞鋆:后端数据库部分 王国超:日程多日显示部分 黄梅玲:日程详细显示部分 张岳.刘晓.李嘉群:用户部分 UML设计 整体框架 用例图 类图 活动图 状态图 数据库部 ...

  3. Tomcat是如何将请求一步步传递到我们编写的HttpServlet类中的

    我们平常编写好的HttpServlet类后,就可以处理请求了,但是服务器在接收到请求信息以后是如何将这些请求传递到我们编写的Servlet类中的???这个疑问在我心中的已经很久了,现在要来解决它. 我 ...

  4. 四级菜单实现(Python)

    menu_dict = { '山东' : { '青岛' : { '四方':{'兴隆路','平安路','杭州路'}, '黄岛':{}, '崂山':{} }, '济南' : { '历城':{}, '槐荫' ...

  5. POJ 2407 Relatives 欧拉函数题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  6. [HEOI2012]朋友圈

    题目 我们发现我们要求的是一个最大团问题,众所周知这是一个\(NP\)难问题,除了爆搜没有什么别的方法,但是这道题我们可以根据图的特殊性质入手 我们如果把\(B\)国的人分成奇数和偶数两类,就会发现奇 ...

  7. My97datepicker使用方法

    My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 2.在页面中引入该组件js文件:     <script type=&quo ...

  8. Controller如何写的更简化

    Controller层相当于MVC中的C,也是安卓或者前端请求的接口. 首先说Controller为什么需要写的更加简化? 第一.Controller是不能复用的: 第二.即便是将Controller ...

  9. SpringMVC DELETE,PUT请求报错 添加支持Http的DELETE、PUT请求

    SpringMVC删除与修改操作需要用DELETE,PUT请求方式提交. 但要知道浏览器form表单只支持GET与POST请求,而DELETE.PUT等method并不支持. spring3.0添加了 ...

  10. HDU 1829 A Bug's Life (种类并查集)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1829 A Bug's Life Time Limit: 15000/5000 MS (Java/Oth ...