Java · 基本程序设计

命名

  • 包名:统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

    1
    正例:应用工具类包名为 com.alibaba.ai.util、类名为 MessageUtils
  • 类名:使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。

    • 抽象类名:使用 AbstractBase 开头。
    • 异常类名:使用 Exception 结尾。
    • 测试类名:以它要测试的类的名称开始,以 Test 结尾。
    1
    2
    正例:JavaServerlessPlatform / UserDO / XmlService / TcpUdpDeal / TaPromotion 
    反例:javaserverlessplatform / UserDo / XMLService / TCPUDPDeal / TAPromotion
  • 方法名、参数名、成员变量、局部变量:都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。

    1
    正例:localValue / getHttpMessage() / inputUserId
  • 常量名:全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

    1
    2
    正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME 
    反例:MAX_COUNT / EXPIRED_TIME
  • 各层命名规范

    • Service/DAO 层方法命名
      • 获取单个对象的方法用 get 做前缀
      • 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects
      • 获取统计值的方法用 count 做前缀
      • 插入的方法用 save/insert 做前缀
      • 删除的方法用 remove/delete 做前缀
      • 修改的方法用 update 做前缀
    • 领域模型命名
      • 数据对象:xxxDO,xxx 即为数据表名
      • 数据传输对象:xxxDTO,xxx 为业务领域相关的名称
      • 展示对象:xxxVO,xxx 一般为网页名称
      • POJODO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO

注释

注释类型

  • 单行注释://
  • 多行注释:/*..*/
  • 文档注释:/**..*/

注释规范

  • 类、类属性、类方法的注释必须使用 Javadoc 规范,使用 /**..*/ 格式。
  • 抽象方法必须要用 Javadoc 注释、除了返回值、参数、 异常说明外,还必须指出该方法实现的功能。
  • 所有的类都必须添加创建者和创建日期。
  • 方法内部单行注释。
  • 所有的枚举类型字段必须要有注释,说明每个数据项的用途。

数据类型

Java 中,一共有 8 种基本类型,其中有 4 种整型、2 种浮点类型、1 种字符类型、1 种布尔类型。

整型

类型 存储 取值范围
int 4 字节 -2147483648 ~ 2147483647(约20亿)
short 2 字节 -32768 ~ 32767
long 8 字节 -9223372036854775808 ~ 9223372036854775807
byte 1 字节 -128 ~ 127

提醒:Java 没有任何无符号类型(unsigned),且整型的范围与运行 Java 代码的机器无关。

浮点型

类型 存储 取值范围
float 4 字节 有效位数 6~7 位
double 8 字节 有效位数 15 位

警告:浮点数值不适用于禁止出现舍入误差的金融计算中。

char

char 类型用于表示单个字符,是一个单一的 16 位 Unicode 字符,最小值是 \u0000(即为 0),最大值是 \uffff(即为 65,535),建议不要在程序中使用 char 类型。

boolean

布尔类型有两个值:false 和 true,用于判定逻辑条件,整型值和布尔值之间不能进行相互转换。

变量

在 Java 中,每一个变量属于一种类型(Type),在声明变量时,变量所属的类型位于变量名之前,声明变量之后,必须用赋值语句对变量进行显式初始化。

1
2
3
4
5
double salary = 6500.0;
int vacationDays = 12;
long earthPopulation = xx;
boolean done = false;
Box box = new Box();

常量

在 Java 中,利用关键字 final 指示常量,final 表示这个变量只能被赋值一次,一旦赋值后就不能改再修改了,习惯上常量名使用全大写。

1
final double CM_PER_INCH = 2.54;

运算符

优先级 运算符 简介 结合性
1 [ ].( ) 方法调用,属性获取 从左向右
2 !、~、 ++、 – 一元运算符 从右向左
3 * 、/ 、% 乘、除、取模(余数) 从左向右
4 + 、 - 加减法 从左向右
5 <<、 >>、 >>> 左右位移 从左向右
6 < 、<= 、>、 >=、 instanceof 对象是否属于同类型 从左向右
7 == 、!= 是否相等 从左向右
8 & 按位与 从左向右
9 ^ 按位异或 从左向右
10 | 按位或 从左向右
11 && 短路与 从左向右
12 || 短路或 从左向右
13 ?: 三元运算符 从右向左
14 =、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= 混合赋值运算符 从右向左

提醒:&& 和 || 是按照“短路”方式求值,如果第一个操作数已经能够确定表达式的值,第二个操作数就不必要计算了。& 和 | 这两个运算符与前面非常相似,只是不按“短路”方式计算,即在得到计算结果之前,一定要计算两个操作数的值。

字符串

从概念上讲,Java 字符串就是 Unicode 字符序列。Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,叫做 String。Java 有自动垃圾回收机制,如果一块内存不再使用了,系统最终会将其回收。

  • 检测字符串是否相等:使用 equals 方法,不区分大小写使用 equalsIgnoreCase 方法,不要使用 == 运算符。

  • 空串:空串 “” 是长度为 0 的字符串,用以下方式可以检查是否为空。

1
2
if (str.length() == 0)
if (str.equals(""))
  • Null 串:表示目前没有任何对象与该变量关联,检查一个字符串既不是 null 也不为空串。
1
if (str != null && str.length() != 0)
  • 字符串 APIjava.lang.string

输入输出

读取输入:使用 java.util.Scanner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;

/**
* This program demonstrates console input.
* @version v1.0 2019-11-20
* @author Rao Hui
*/
public class Demo {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);

// get frist input
System.out.print("What is your name? ");
String name = in.nextLine();

// get second input
System.out.print("How old are you? ");
int age = in.nextInt();

// dispaly output on console
System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1));
}
}

格式化输出:使用 System.out.printf()

  • d:整数类型
  • c:Unicode 字符
  • b:Boolean 值
  • s:String
  • f:浮点数(十进制)
  • e:浮点数(科学计数)
  • x:整数
  • h:散列码(十六进制)
  • %:字符 “%”

控制流

  • 条件语句:if (condition) statement
  • 循环:while (condition) statement、do statement while (condition)、for (int i = 1; i <= n; i++)
  • 多重选择:switch…case…
  • 中断控制:break(跳出循环)、continue(跳转到下一次循环)

数组

数组是一种数据结构,用来存储同一类型值的集合。用于数组的增强 for 循环:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {
public static void main(String args[]){
int[] numbers = {10, 20, 30, 40, 50};

for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String[] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
}

关键字

类别 关键字 说明
访问控制 private 私有的
protected 受保护的
public 公共的
类、方法和变量修饰符 abstract 声明抽象
class
extends 继承
final 不可改变的
implements 实现(接口)
interface 接口
native 本地
new 创建
static 静态
strictfp 严格
synchronized 线程同步
transient 短暂
volatile 易失
程序控制 break 跳出循环
continue 继续
switch 根据值选择执行
case 定义一个值以供 switch 选择
default 默认
do 运行
if 如果
else 否则
for 循环
instanceof 实例
return 返回
while 循环
错误处理 assert 断言表达式是否为真
catch 捕捉异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
try 捕获异常
import 引入
package
数据基本类型 byte 字节型
short 短整型
int 整型
long 长整型
float 单精度浮点
double 双精度浮点
char 字符型
boolean 布尔型
变量应用 super 超类
this 本类
void 无返回值
保留关键字 goto 是关键字,但不能使用
const 是关键字,但不能使用
null