20155325 2016-2017-2 《Java程序设计》第8周学习总结
教材学习内容总结
- NIO用于高级输入/输出处理
名称 | 衔接数据源与目的地 |
---|---|
IO | InputStream,OutputStream |
NIO | Channel |
类 | 方法 | 方法的作用 |
---|---|---|
ReadableByteChannel | read() | 将ReadableByteChannel中的数据读取至ByteBuffer |
WritableByteChannel | write() | 将ByteBuffer的数据写到WritebaleByteChannel |
ScatteringByteChannel | read() | 将ScatteringByteChannel中的数据读取至ByteBuffer |
GatheringByteChannel | write() | 将ByteBuffer的数据写GatheringByteChannel |
Channel继承架构:
- Buffer继承架构:
方法 | 作用 |
---|---|
split() | 将指定字符串依规则表达式切割 |
matcher() | 指定要比较的字符串 |
find() | 看看是不是有下一个符合字符串 |
lookingAt() | 看看字符串开头是否符合规则表达式 |
group() | 可以返回符合的字符串 |
replaceAll() | 可以将符合规则表达式的部分以指定的字符串取代 |
replaceFirst() | 取代首个组合规则表达式的部分 |
replaceEnd() | 取代最后符合规则表达式的部分 |
start() | 取得符合字符串的初始索引 |
end() | 取得符合字符串最后一个字符后的索引 |
parallelPrefix() | 指定×××BinaryOperator实例 |
parallelSetAll()) | 对数组进行初始化或者全面重设每个索引元素 |
parallelSort | 将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序 |
教材学习中的问题和解决过程
问题1:研究DecimalFormat类
问题1解决方案:资料如下
作用:DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
符号 | 含义 |
---|---|
0 | 一个数字 |
# | 一个数字,不包括 0 |
. | 小数的分隔符的占位符 |
, | 分组分隔符的占位符 |
; | 分隔格式 |
- | 缺省负数前缀 |
% | 乘以 100 和作为百分比显示 |
? | 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用 |
国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代 | |
替十进制分隔符。 | |
X | 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。 |
代码调试中的问题和解决过程
问题1:p481 Hello
问题1解决方案:改了一下
但是还是不行
最后参考以下链接:
java.util.ResourceBundle使用详解
最后将messages放到了存代码的根目录下就运行成功了
问题2:贪婪、非贪婪、独占量词
问题2解决方案:
贪婪 | 非贪婪 | 独占 |
---|---|---|
X? | X?? | X?+ |
X* | X*? | X*+ |
X+ | X+? | X++ |
X | X{n}? | X{n}+ |
X | X{n,}? | X{n,}+ |
X | X{n,m}? | X{n,m}+ |
Greedy:贪婪 | ||
匹配最长。在贪婪量词模式下,正则表达式会尽可能长地去匹配符合规则的字符串,且会回溯。 |
Reluctant :非贪婪
匹配最短。在非贪婪量词模式下,正则表达式会匹配尽可能短的字符串。
Possessive :独占
同贪婪一样匹配最长。不过在独占量词模式下,正则表达式尽可能长地去匹配字符串,一旦匹配不成功就会结束匹配而不会回溯。
参考资料:正则的回溯
上周考试错题总结
- JDK8中的Lambda表达式有以下好处:
A .
消除重复性
B .
提高性能
C .
提高安全性D .
改善可读性
答案:AD
- JDK8 中新时间API中,用于度量时间的类有()
A .
Instant
B .
Duration
C .
Period
D .
LocalDateTime
答案:BC
解析:……在这里“度量”的意思等同于“定义”
3.Java 8之前,对日期进行运算,使用()类。
A .
Date
B .
DateFormat
C .
Calendar
D .
SimpleDateFormat
答案:C
4.new Date(System.currentTimeMillis( ))等价于new Date()
A .
True
B .
False
答案:A
解析:
public class DateDemo {
public static void main(String[] args) {
Date date1 = new Date(currentTimeMillis());
Date date2 = new Date();
out.println(date1.getTime());
out.println(date2.getTime());
}
}
结果是:
5.When applied to instance variables, the ________________ visibility modifier enforces encapsulation(当应用到实例变量时,____可见性修饰符强制执行封装).
A .
static
B .
final
C .
public
D .
private
E .
none of the above(以上都不是)
答案:D
解析:私有可见性修饰符防止不适当的数据访问,因此促进封装。选择A和B不是可见性修饰符,而选择C是可见性修饰符,允许对对象数据的公共访问,这违背了封装的原则。
6.Which of the following method headers is most likely a header for a mutator method?(以下哪个方法头部最有可能是设值方法的头部?)
A .
public int getAge()
B .
public double computeSalary()
C .
public Person()
D .
public void setAge(int newAge)
E .
none of these are headers for a mutator method(以上均不是设值方法的头部)
答案:D
解析:应用程序的方法,改变一个实例变量的值,通常称为“setters”,因此,选项D是正确答案。选择是一个访问器方法的头一个例子,通常被称为“getter”,选择C是一个构造函数,选择B是一个类的方法。
7.__________________ parameters are the values that are used when calling a method(___参数是调用方法时传给方法的值).
A .
formal(形式参数)
B .
actual(实际参数)
C .
useful(有用的参数)
D .
informal(非正式参数)
E .
none of the above(以上都不是)
答案:B
解析:调用方法时发送实际参数。定义方法时使用形式参数。
8.A method that has multiple definitions is an __________________ method(具有多重定义的方法称为方法___).
A .
overloaded(重载)
B .
overridden(重写)
C .
overlooked(忽略)
D .
overclocked(超频)
E .
none of the above(以上均不是)
答案:A
解析:有多个定义的方法是重载方法。重载方法的版本由参数的数量、类型和顺序区分。重写的方法是在继承层次结构中重新定义的方法。他们将更详细地研究。选择C和D是不是在java类的方法。
9.An object can be thought of as a blueprint for a set of classes(对象被认为是类集合的蓝图).
A .
true
B .
false
答案:B
解析:类可以被看作是一组对象的蓝图,而不是另一种方式。
10.When an object is passed to a method, the actual and formal parameters become aliases(当把对象传递给方法时,实参和形参互为别名).
A .
true
B .
false
答案:A
解析:实际参数是发送到方法中的数据。方法定义中使用了形式参数。当对象被发送到一个方法时,这些值都是引用,它们成为彼此的别名。
11.Which of the following objects could contain the information “eastern standard time”?(下面哪些类的对象会包含“东部标准时间”的信息)
(Choose all that apply.)
A .
Instant
B .
LocalDate
C .
LocalDateTime
D .
LocalTime
E .
ZonedDateTime
答案:E
解析:localxxxx明确排除时区。瞬间代表一个时间点,但
始终使用GMT而不是所需时区。
12.Which of the following are stored in a Period object? (Choose all that apply.) 下面哪些内容会出现在Period对象中?
A .
Year
B .
Month
C .
Day
D .
Hour
E .
Minute
F .
Second
答案:ABC
解析:持续时间使用小时/分钟/秒和周期使用年/
措施月/日。
13.Given the following, which answers can correctly fill in the blank? (Choose all that apply.)针对下面的代码,()中应填入哪个选项?
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, zoneId);
long epochSeconds = 0;
Instant instant = ( );
A .
Instant.now()
B .
Instant.ofEpochSecond(epochSeconds)
C .
date.toInstant()
D .
dateTime.toInstant()
E .
time.toInstant()
F .
zonedDateTime.toInstant()
答案:F
解析:选项正确创建当前瞬间。选项B正确转换
秒到瞬间。选项F也是一个适当的转换。选项C,D和E是
不正确,因为源对象不代表时间点。没有时区,
java不知道什么时候使用即时。
14.What is the output of the following code?(下面代码的运行结果是?)
LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
System.out.println(date.getYear() + " " + date.getMonth()
- " "+ date.getDayOfMonth());
A .
2018 APRIL 4
B .
2018 APRIL 30
C .
2018 MAY 10
D .
Another date
E .
The code does not compile.
F .
A runtime exception is thrown.
答案:F
解析:java抛出异常如果无效的日期值传递。没有第四十天
四月或任何其他月份
...
结对及互评
评分标准
正确使用Markdown语法(加1分):
不使用Markdown不加分
有语法错误的不加分(链接打不开,表格不对,列表不正确...)
排版混乱的不加分
模板中的要素齐全(加1分)
缺少“教材学习中的问题和解决过程”的不加分
缺少“代码调试中的问题和解决过程”的不加分
代码托管不能打开的不加分
缺少“结对及互评”的不能打开的不加分
缺少“上周考试错题总结”的不能加分
缺少“进度条”的不能加分
缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
本周有效代码超过300分行的(加2分)
一周提交次数少于20次的不加分
其他加分:
周五前发博客的加1分
感想,体会不假大空的加1分
排版精美的加一分
进度条中记录学习时间与改进情况的加1分
有动手写新代码的加1分
课后选择题有验证的加1分
代码Commit Message规范的加1分
错题学习深入的加1分
点评认真,能指出博客和代码中的问题的加1分
结对学习情况真实可信的加1分
扣分:
有抄袭的扣至0分
代码作弊的扣至0分
迟交作业的扣至0分
点评模板:
博客中值得学习的或问题:
xxx
xxx
...
代码中值得学习的或问题:
xxx
xxx
...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
参考示例
点评过的同学博客和代码
本周结对学习情况
20155328
结对照片
结对学习内容
14、15章
...
上周博客互评情况
20155227
20155231
20145234
20155233
20155336
...
其他(感悟、思考等,可选)
下一周终于要没那么多工作了,喘气,太好了可以更多时间补一补之前觉得很虚的地方了。
标了页码的解析让我觉得安心。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 16篇 | 400小时 | |
第一周 | 9/9 | 1/1 | 19/19 | 熟练下载安装技能,锻炼解决问题能力 |
第二周 | 185/194 | 1/2 | 16/35 | 下载并熟悉IDEA,练习使用码云、git的技能。 |
第三周 | 488/535 | 1/3 | 18/53 | 花了更少时间磨合软件,学习更顺利 |
第四周 | 366/901 | 2/5 | 18/71 | 继承、多态、行为 |
第五周 | 611/1512 | 1/6 | 14/67 | 异常处理、Collection与Map |
第六周 | 337/1849 | 1/7 | 16/73 | 输入与输出、线程与并行API |
第七周 | 459/2308 | 2/9 | 15/88 | Lambda、时间与日期 |
第八周 | 554/2862 | 1/10 | 16/104 | NIO与NIO2&通用API |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。 |
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
计划学习时间:17小时
实际学习时间:15小时
改进情况:
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)
参考资料