方法
检查参数的有效性
绝大多数方法和构造器对于传递给它们的参数值都会有某些限制。例如,索引值必须是非负数,对象引用不能为null,等等,这些都是很常见的。对于参数的校验,可以使用 @NotNull
必要时进行保护性拷贝
谨慎设计方法签名
慎用重载
在Java中,参数类型或者个数不一样,对返回参数没有要求,叫做重载。
慎用可变参数
可变参数如下代码所示:
1 | static int sum(int... args) { |
1、尽可能地使每个类或者成员不被外界访问。换句话说,应该使用与你正在编写的软件的对应功能相一致的、尽可能最小的访问级别。例如,想在实体类的中,使用private定义属性值。
这样可以防止粗心或者恶意的子类假装对象的状态已经改变,从而破坏该类的不可变行为。为了防止子类化,一般做法是使这个类成为 final的,但是后面我们还会讨论到其他的做法。
通过系统的强制方式,这可以清楚地表明你的意图。而且,如果一个指向新创建实例的引用在缺乏同步机制的情况下,从一个线程被传递到另一个线程,就必需确保正确的行为,正如内存模型( memory model)中所述。
最近比较空,就抽时间看了《Efffectice Java》这本书,虽然这本书的第二版和现在的Java版本有点老了,但是看了一遍后,感觉,其中的一些思想,平时写代码的时候需要注意的地方,还是讲的不错的。
对于Map的new,在Java的后面的版本中,已经修改了,不需要如书上说的创建一个newMap的静态工厂类,可以如下进行创建一个新的Map:
1 | Map<Integer,String> map = new HashMap<>(); |
这种模式就是利用重载,不断调用构造函数,生成需要的bean:
1 | class MyClass{ |
从这代代码可以看出,这种写法有点复杂,个人觉得实际开发中,不会去使用
声明:本文使用JDK1.8
Java8提供了丰富的lambda的API。今天我们来讲讲关于其中的stream(流的操作)。对于List集合,有了stream的流操作,感觉如虎添翼。
1 | String str = "1,2,3,4,10,11,9,66,222,12"; |
上面的代码Stream.of 为我们生成了一个List
下面来简单的介绍下stream。
map:对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素
map方法是对列表里面的对象的转换,比如上面的map的功能是吧String转换成Integer。除了这样的转换,你也可以对对象进行你需要的操作。比如现在有一个对象ListDTO:
1 | @Data |
现在这么一个List
1 | List<Integer> idList = beans.stream().map(ListDTO::getId).collect(Collectors.toList()); |
之前Mac上面使用Python都是使用系统自带的Python,哈哈。。。使用Mac的知道,Mac上面已经安装了Python2.7,这个是Mac系统需要的。现在Python有两个版本,2.x和3.x。Python2.7支持延迟时间是到2020年,2.7是2.x系列的最后一个版本,之后将不再更新了。虽然这两个版本很相似,只是语法上面有点差别。所有,如果现在学Python的话,还是下载Python3来学习吧。
在Mac上面安装一些软件,还是在Homebrew下面安装吧,像Git,mysql,node.js等,都可以在homebrew里面安装,这样安装卸载都方便,只需要brew install/uninstall <软件名字>
安装Homebrew之前,需要安装Xcode,这个可以到APP Store里面去下载。
1.到Homebrew官网去下载
2.在命令终端里面下载
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
homebrew的一些基本命令:
相比较于之前的版本之前的版本,增加了很大新特性,其中关于时间多了很多功能:LocalDateTime,LocalDate,LocalTime。
LocalDate是年月日;LocalTime是时分秒;LocalDateTime则是两者的合并,可以通过下面得到:
1 | LocalTime localTime = LocalTime.now(); |
或
1 | LocalDateTime localDateTime = LocalDateTime.now(); |
Java8对这几个时间提供了丰富的时间计算接口。
关于Date和String之间的转化,我这里就不多说了
String类型转化新特性时间可以使用 DateTimeFormatter 功能。
1 | DateTimeFormatter dateformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
最近想自己搭建一个个人博客,就去网上去看下有没有开源的代码可以拿来使用,在比较了网上一些开源的博客后,选择了Hexo。主要自己想在平时学习积累的时候,有个地方记录下自己的学习,嗯,还有一个和重要的的因素,那就是顺便装个B。
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
安装hexo之前先安装 Node.js 和 Git,之后使用npm下载hexo
1 | $ npm install -g hexo-cli |
安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
1 | $ hexo init <folder> |