Java的单例模式

Java的单例模式(Singleton Pattern)是指在任何情况下,都只有一个类实例存在。该模式也是众多设计模式中最简单的模式之一,但其中还是有不少门道,今天做一个学习总结。单例模式的多种实现方式单例模式的实现方式众多,一般的套路就是在常规的类上面增加三个特性:将构造方法设为private,包含一个静态的类实例字段作为唯一的一个类实例,如果上一条中的类实例是private的,那就还需要一个静态工厂方法,用于返回该实例字段;如果是public的,那就不需要这一条了。另外,不同的实现方法也有不同的效果,主要从是否多线程安全、是否惰性初始化(直到第一次访问时才初始化它的值)、性能高低三个方面考

Java Lambda表达式(下)

上篇文章中我们总结了Lambda的一些基本知识,本文总结剩余的一个知识点:Lambda表达式中变量的作用域问题。Lambda表达式变量作用域这里使用书上面给的一个例子,我们定义了一个静态的repeatMessage方法,代码如下:public static void repeatMessage(String text, int delay) { ActionListener listener = event -> { System.out.println(text); Toolkit.getDefaultToolkit().beep(); }

Java Lambda表达式(上)

Java 8中引入了Lambda表达式,目的是支持函数式编程。为了说明问题假设我们有一个需求:使用List的forEach方法遍历输出一个List。先说明两个点:当然遍历List有很多种方式,这里限定使用forEach只是为了说明Lambda;其实forEach和Lambda一样都是Java 8才引入的,但不影响问题说明。旧方式:在没有Lambda之前,我们的代码类似下面这样:List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); list.forEach(new Consumer<Integer>() {

Java 8接口新特性

定义Interfaces, is a way of describing what classes should do, without specifying how they should do it.和大多数有接口这项技术的语言里面一样,接口只负责定义行为(方法),具体行为的实现由类完成。另外要说明的就是Java 8(Java SE 8/JDK 1.8)引入的函数式接口(functional interface):只包含一个抽象方法的接口。这里要注意有两个条件:只包含一个,且是抽象的方法(所以只限定了抽象方法,可以包含多个非抽象方法)。函数式接口可以选择性使用@FunctionalInte

Java的异常

异常分类先上图:Java的顶级异常类是Throwable类,下面分为Error和Exception两大子类。Error及其子异常代表的是Java运行时系统内部错误,资源耗尽等情况。如果这种异常发生了,我们只能让自己的程序退出。而Exception及其分支异常则是我们写代码时需要关注的。上面是按照类的继承来分的。另外一种更重要的分法是把Error和RuntimeException及其子类异常称为非受检异常(unchecked exception),剩余其它的所有异常称为受检异常(checked exception)。所谓非受检异常就是我们代码中无需对这类异常进行捕获处理,但受检异常则必须有地方捕

OOP中static的原罪

最近项目中使用Spring Boot,让我稍微有些水土不服,主要原因就是static。看下面两种代码风格:风格1:@Autowired MyService myservice; // doSomething是MyService类的非静态方法 Response resp = myservice.doSomething(someParameters);风格2:// doSomething是MyService类的静态方法 Response resp = MyService.doSomething(someParameters);你平时Coding喜欢哪一种?对我而言,如果doSomething是无

关于996

前段时间996.icu出现后,便迅速蹿红,本来最近热度稍微下降了一些,但马老师和东哥这两天的发声,又把这个话题推上热搜。本来不想讨论这个问题,有蹭热度之嫌,但这个东西的确是和技术人关系非常大的一个话题,所以今天简单聊聊,但都是我的个人看法,不代表任何立场。欢迎讨论。我是反感996的我反感996,是因为这样的工作强度一方面伤身体,另一方面对生活影响比较大。我反感996,是因为有些管理者将996与奋斗者划等号。如果员工不能996,那他就是不奋斗,不上进,应该被淘汰。我反而认为一些管理者推崇996恰好体现了其管理方面的懒惰和无能,因为他不愿意主动或者没有能力去思考能真正提高团队效率、产出的方式,只能

也说编程语言

为什么想说这个呢?有几个原因:前几天在知乎上面看到一个提问说自己要工作了,想学习一门编程语言,是学习Java好还是Python好呢?经常看到各种机构统计的yyyy年mm月的编程语言变化榜单,我也老想点进去看看自己喜欢的语言排名如何?编程语言对于我们技术人是基本功。不过话说现在编程已经全民化了,小学生已经开始学了,或许以后就不光是我们技术人的基本技能了。当然最后一个就是想表述一下我自己对编程语言的看法。先立个flag:之前几篇文章比较长,今天这篇必须简短。我认为必须掌握的语言前端工程师必须擅长JavaScript、CSS、HTML(5)。我不是前端,JS、CSS、HTML都懂点皮毛,能照猫画虎,