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程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
随机推荐
- 【转】多线程Core Data
原文地址:http://www.cocoanetics.com/2012/07/multi-context-coredata/ Multi-Context CoreData When you star ...
- TreadingTCPServer
TreadingTCPServer实现的socket服务器内部会为每个client创建一个线程,该线程用来和客户端进行交互. 1.TreadingTCPServer基础 使用TreadingTCPSe ...
- Mac下安装Spark
1.Scala 官网下载scala安装包后解压,路径随意. 编辑/etc/bash_profile添加$SCALA_HOME并修改相应PATH 2.SSH无密码登陆 ssh-keygen -t rsa ...
- SOJ 1089 FatMouse的奶酪 暴力
BackGround FatMouse拥有许多奶酪,所有的奶酪都有一个彼此不同的重量.FatMouse为了控制它自己的体重,在每天早上它都会计算今天应该吃多少奶酪才能无痛苦地减肥. The Probl ...
- UVa 10288 - Coupons(数学期望 + 递推)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- js replace替换一段文本中所有的相同字符
在html<textarea>标签中回车换行的代码是: \n,html编辑器的回车换行是:\r\n或是\n. 下图是存入后台的<textarea>的文本,需要在页面上显示出来, ...
- 大数据学习之HDFS的工作机制07
1:namenode+secondaryNameNode工作机制 2:datanode工作机制 3:HDFS中的通信(代理对象RPC) 下面用代码来实现基本的原理 1:服务端代码 package it ...
- springboot项目用maven打jar包
clean package -Dmaven.test.skip=true idea eclipse STS
- CVPR2018_Crafting a Toolchain for Image Restoration by Deep Reinforcement Learning
CVPR2018_Crafting a Toolchain for Image Restoration by Deep Reinforcement Learning http://mmlab.ie.c ...
- HDU 1165 Eddy's research II(给出递归公式,然后找规律)
- Eddy's research II Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...