Java开发中常见的问题(一)

空指针问题

使用 Optional<T> 避免空指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Optional<User> optionalUser = Optional.ofNullable(user);

// 存在即返回,空则返回默认值
User user1 = optionalUser.orElse(new User());

// 存在即返回,空则由函数产生
User user2 = optionalUser.orElseGet(() -> new User());

// 存在即返回,否则抛异常
User user3 = optionalUser.orElseThrow(() -> new RuntimeException("异常了"));

// 存在就去做相应的处理
optionalUser.ifPresent(u -> System.out.println(u.getName()));

// 对Optional中这个元素做相应的操作,且会返回一个Optional对象(这样就绝对避免了空指针问题)
Integer nameLength = optionalUser.map(u -> u.getName()).map(name -> name.length()).orElse(0);
System.out.println(nameLength);


Shell编程实战之Nginx和Tomcat脚本

功能简介

Tomcat用于发布JSP Web页面,根据企业实际需求,会在单台服务器配置N个Tomcat实例,同时手动将Tomcat创建后的实例加入至Nginx虚拟主机中,同时重启Nginx,开发Nginx、Tomcat自动创建Tomcat实例及Nginx虚拟机管理脚本能大大减轻人工的干预,实现快速交付。

本篇shell脚本实现Nginx自动安装、虚拟主机及自动将Tomcat加入虚拟机,实现思路如下:

  1. 手动拷贝Tomcat与脚本一致的目录(可自行修改);
  2. 手动修改Tomcat端口为6001、7001、8001(可自行修改);
  3. 脚本指定参数为v1.example.com;
  4. 创建v1.example.com Tomcat实例;
  5. 修改Tomcat实例端口,保证Port唯一;
  6. 将Tomcat实例加入Nginx虚拟


ThreadLocal原理

ThreadLocal是什么

早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。


Java注解初步

元注解

要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:

Java数据类型

基本数据类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
Java 的两大数据类型:

  • 内置数据类型
  • 引用数据类型