0%

类和接口

使类和成员的可访问性最小化

1、尽可能地使每个类或者成员不被外界访问。换句话说,应该使用与你正在编写的软件的对应功能相一致的、尽可能最小的访问级别。例如,想在实体类的中,使用private定义属性值。

在公有类中使用访问方法而非公有域

使可变性最小化

不要提供任何会修改对象状态的方法(也称为 mutator)

保证类不会被扩展。

这样可以防止粗心或者恶意的子类假装对象的状态已经改变,从而破坏该类的不可变行为。为了防止子类化,一般做法是使这个类成为 final的,但是后面我们还会讨论到其他的做法。

使所有的域都是final的。

通过系统的强制方式,这可以清楚地表明你的意图。而且,如果一个指向新创建实例的引用在缺乏同步机制的情况下,从一个线程被传递到另一个线程,就必需确保正确的行为,正如内存模型( memory model)中所述。

阅读全文 »

最近比较空,就抽时间看了《Efffectice Java》这本书,虽然这本书的第二版和现在的Java版本有点老了,但是看了一遍后,感觉,其中的一些思想,平时写代码的时候需要注意的地方,还是讲的不错的。

用静态工厂方法代替构造器

对于Map的new,在Java的后面的版本中,已经修改了,不需要如书上说的创建一个newMap的静态工厂类,可以如下进行创建一个新的Map:

1
Map<Integer,String> map = new HashMap<>();

遇到多个构造器参数时要考虑用构建器

重叠构造器模式

这种模式就是利用重载,不断调用构造函数,生成需要的bean:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class MyClass{
//必要的参数
private final int one;
private final int two;
//可选的参数
private final int three;
private final int four;
public MyClass1(int one,int two){
this(one,two,0);
}
public MyClass(int one,int two,int three){
this(one,two,three,0);
}
public MyClass(int one,int two,int three,int four){
this.one=one;
this.two=two;
this.three=three;
this.four=four;
}
@Override
public String toString(){
return " one="+this.one+" two="+this.two+" three="+this.three+" four="+this.four;
}
}

从这代代码可以看出,这种写法有点复杂,个人觉得实际开发中,不会去使用

JavaB ean

阅读全文 »

声明:本文使用JDK1.8

Java8提供了丰富的lambda的API。今天我们来讲讲关于其中的stream(流的操作)。对于List集合,有了stream的流操作,感觉如虎添翼。

生成一个List

1
2
3
4
5
6
7
String str = "1,2,3,4,10,11,9,66,222,12";
List<Integer> list = Stream.of(str.split(","))
.map(Integer::valueOf)
.filter(x-> !Objects.equals(x,3))
.sorted(Comparator.reverseOrder())
.limit(4)
.collect(Collectors.toList());

上面的代码Stream.of 为我们生成了一个List,但是我们需要的Integer,所以我们还需要使用map来转换类型。然后对于生成的列表,我们不想要其中的3,于是我们使用filter来过滤掉列表中的3。对于现在列表我们又想是倒序后的列表的前四条数据,于是我们在使用sorted来对列表来进行倒序后,再使用limit取前四条。顺便说一句,对于比较,推荐使用Objects.equals(a,b).
下面来简单的介绍下stream。

map

map:对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素
map方法是对列表里面的对象的转换,比如上面的map的功能是吧String转换成Integer。除了这样的转换,你也可以对对象进行你需要的操作。比如现在有一个对象ListDTO:

1
2
3
4
5
6
7
8
9
10
11
@Data
public class ListDTO{
public Integer id;
public String name;
public ListDTO() {
}
public ListDTO(Integer id, String name) {
this.id = id;
this.name = name;
}
}

现在这么一个List,你现在只想得到这个列表中ListDTO对象里面的id,现在你就可以这样操作:

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来学习吧。

Homebrew

在Mac上面安装一些软件,还是在Homebrew下面安装吧,像Git,mysql,node.js等,都可以在homebrew里面安装,这样安装卸载都方便,只需要brew install/uninstall <软件名字>

安装Xcode

安装Homebrew之前,需要安装Xcode,这个可以到APP Store里面去下载。

安装Homebrew

1.到Homebrew官网去下载
2.在命令终端里面下载

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装Python3

homebrew的一些基本命令:

阅读全文 »

相比较于之前的版本之前的版本,增加了很大新特性,其中关于时间多了很多功能:LocalDateTime,LocalDate,LocalTime。

时间介绍

LocalDate是年月日;LocalTime是时分秒;LocalDateTime则是两者的合并,可以通过下面得到:

1
2
3
LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);

1
LocalDateTime localDateTime = LocalDateTime.now();

Java8对这几个时间提供了丰富的时间计算接口。
关于Date和String之间的转化,我这里就不多说了

String –> LocalDate/LocalTime/LocalDateTime

String类型转化新特性时间可以使用 DateTimeFormatter 功能。

1
2
DateTimeFormatter dateformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate ld = LocalDate.parse("2017-08-01", dateformatter);
阅读全文 »

最近想自己搭建一个个人博客,就去网上去看下有没有开源的代码可以拿来使用,在比较了网上一些开源的博客后,选择了Hexo。主要自己想在平时学习积累的时候,有个地方记录下自己的学习,嗯,还有一个和重要的的因素,那就是顺便装个B。

什么是 Hexo?

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

安装

安装

安装hexo之前先安装 Node.js 和 Git,之后使用npm下载hexo

1
$ npm install -g hexo-cli

建站

安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install
阅读全文 »