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

教材学习内容总结

1.了解Lambda语言

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

Lambda表达式的优点:

  • 提升性能、自动的并行化

  • 更棒的API(comparing(...) 成为标准)

  • 编码风格得到改进、代码简化

Lambda不从父类型中继承任何名字,包括:

  • 接口的静态final字段

  • 接口的静态嵌套类

  • 默认方法(将在后续介绍)

将全部被排除在作用域之外。

Lambda参数与表达式体中的局部声明可以屏蔽字段名。

Lambda中的this和super的含义完全同外部一致。

而若在匿名内部类访问外部对象的当前实例须用OuterClass.this,非常笨拙:

new Thread((LetsRun) () ->
    System.out.println(Foo.this.getClass().toString())
).run();

递归Lambda时须注意Lambda变量无法被初始化,只能直接调用相应函数式接口中的方法。

java中的方法

所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。

语法:

访问修饰符,返回值类型,方法名(参数列表){

  方法体
 }
  • 1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用

  • 2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值

  • 3、 方法名:定义的方法的名字,必须使用合法的标识符

  • 4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开 。

  • 根据方法是否带参、是否带返回值,可将方法分为四类:

  • 1)无参无返回值方法

  • 2)无参带返回值方法

  • 3)带参无返回值方法

  • 4)带参带返回值方法

  • GMT时间现在已经不作为标准时间使用,但GMT时间常常被当成UTC时间。在导入UTC时间之前,GMT和UT是相同的。UTC时间是具有折中修正版本的世界协调时间,这是为了保持TAI和UT时间不要相差太大,UTC时间采用了闰秒修正。

    • Unix系统的时间表示法定义为UTC时间的1970年1月1日0时0分0秒为起点经过的秒数,不考虑闰秒修正,用以表达时间轴上的某一瞬间。Epoch为某个特定时代的开始,时间轴上的某一瞬间。各个国家修改日历的时间并不相同,所以在Unix或者Linux中查询1752年9月会发现时间少了11天。
    • ISO8601在严格意义上并非年历系统而是时间日期表示方法的标准,用以统一时间日期的数据交换格式,ISO8601在数据定义上大部分与格里高日历相同,但有些细微差别。在ISO8601的定义中19世纪是1900-1999年,而在格里高日历中19世纪是1801-1900年。
  • 教材学习中的问题和解决过程

    • 什么是final?
  • final关键字大家经常使用。final可以用于声明字段、方法和类。final声明字段时,若为基本类型,表示该变量值初始化后不再改变;若为引用类型,则表示引用不可变,但引用所指向的对象是可以改变的。final声明方法时表示方法不可覆写(常用来限制子类不可以改写父类中方法)。final声明类时,表示类不可继承,如String类就是final的,你不能继承它。

  • final字段的详细语义与普通字段稍有不同。尤其是,编译器有很大的自由,能将对final字段的读操作移到同步屏障之外,然后调用任意或未知的方法。同样,也允许编译器将final字段的值保存到寄存器,在非final字段需要重新加载的那些地方,final字段无需重新加载。另外,将对象声明为不可变的,则可实现并发访问,即final可提供一种非同步状态下轻量级的线程安全方法。

代码调试中的问题和解决过程

  • 问题1

  • 问题2

代码托管


上周考试

上周考试错题总结
下面哪条命令可以把 f1.txt 复制为 f2.txt ?

A . cp f1.txt f2.txt
B . copy f1.txt f2.txt
C . cat f1.txt > f2.tx
D . cp f1.txt | f2.tx
E . copy f1.txt | f2.tx
答案: A C

2.下面代码中共有()个线程?

public class ThreadTest {
  public static void main(String args[]){
    MyThread myThread =new MyThread();
    Thread t1=new Thread(myThread);
    Thread t2=new Thread(myThread);
    t1.start();
    t2.start();
 }
}

class MyThread extends Thread {
...
}
A .1

B .2

C .3

D .4

除了t1,t2, 不要忘了main所在的主线程,故选C

3.以下()方法会使线程进入阻塞状态?

A .Thread.sleep()

B .wait()

C .notify()

D .interrupt()

答案A和B

结对及互评

评分标准

正确使用Markdown语法(加1分):

不使用Markdown不加分

有语法错误的不加分(链接打不开,表格不对,列表不正确...)

排版混乱的不加分

模板中的要素齐全(加1分)

缺少“教材学习中的问题和解决过程”的不加分

缺少“代码调试中的问题和解决过程”的不加分

代码托管不能打开的不加分

缺少“结对及互评”的不能打开的不加分

缺少“上周考试错题总结”的不能加分

缺少“进度条”的不能加分

缺少“参考资料”的不能加分

教材学习中的问题和解决过程, 一个问题加1分

代码调试中的问题和解决过程, 一个问题加1分

本周有效代码超过300分行的(加2分)

一周提交次数少于20次的不加分

其他加分:

周五前发博客的加1分

感想,体会不假大空的加1分

排版精美的加一分

进度条中记录学习时间与改进情况的加1分

有动手写新代码的加1分

课后选择题有验证的加1分

代码Commit Message规范的加1分

错题学习深入的加1分

点评认真,能指出博客和代码中的问题的加1分

结对学习情况真实可信的加1分

扣分:

有抄袭的扣至0分

代码作弊的扣至0分

迟交作业的扣至0分

点评过的同学博客和代码

20155202

结对学习内容

上周博客互评情况
20155226
20155321
20155325
20155228
20155202

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第四周 560/1280 1/9 30/90

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted on 2017-04-09 11:08  吕宇轩  阅读(170)  评论(4编辑  收藏  举报