3-数据类型和运算符

文档注释

文档注释以斜线后紧跟两个星号 /** 开始,以星号后紧跟一个斜线 */ 结束。

使用 javadoc 工具提取程序的文档注释来生成 API 文档:

1
javadoc 选项 Java源文件|包

javadoc 命令可对源文件、包生成 API 文档,Java源文件可以支持通配符,例如 *.java 来代表当前路径下的所有 Java源文件。

javadoc 常用的选项有如下几个:

  • -d <directory>:该选项指定一个路径,用于将生成的 API 文档放到指定目录下。
  • -windowtitle <text>:该选项指定一个字符串,用于设置 API 文档的浏览窗口标题。
  • -doctitle <html-code>:该选项指定一个 HTML 格式的文本,用于指定概述页面的标题。
  • -header <html-code>:该选项指定一个 HTML 格式的文本,包含每个页面的页眉。

示例:

1
javadoc -d apidoc -windowtitle 测试 -doctitle 学习javadoc工具的测试API文档 -header 我的类 *.java

如果希望 javadoc 工具生成更详细的文档信息,例如为方法参数、方法返回值等生成详细的说明信息,则可以利用 javadoc 标记。常用的 javadoc 标记 如下:

  • @author:指定 Java 程序的作者。
  • @version:指定源文件的版本。
  • @deprecated:该标记表明所标记的方法不推荐使用。
  • @param:方法的参数说明信息。
  • @return:方法的返回值说明信息。
  • @see:”参见”,用于指定交叉参考的内容。
  • @exception:抛出异常的类型。
  • @throws:抛出的异常,和 @exception 同义。

这些标记的使用是有位置限制的。
可以出现在类或者接口文档注释中的有 @see、@deprecated、@author、@version 等;
可以出现在方法或构造器文档注释中的有 @see、@deprecated、@param、@return、@throws 和 @exception 等;
可以出现在成员变量的文档注释中的有 @see、@deprecated等。

javadoc 工具默认不会提取 @author 和 @version 两个标记的信息,但是如果需要提取这两个标记的信息,应该在使用 javadoc 工具时指定 -author 和 -version 两个选项。

API 文档中的包注释并不是直接放在 Java源文件中的,而是必须另外指定,通常通过一个标准的 HTML文件来提供包注释,这个文件被称为 包描述文件。包描述文件的文件名通常是 package.heml
示例:

1
2
3
4
5
- lee 文件夹:包含 JavadocTest.java 文件(该Java类的包为 lee),对应包描述文件 package.html。
- yeeku 文件夹:包含 Test.java 文件和 JavadocTagTest.java 文件(这两个Java类的包为 yeeku),对应包描述文件 package.html。

在命令行窗口进入 lee 和 yeeku 所在路径,执行如下命令:
javadoc -d apidoc -windowtitle 测试 -doctitle 学习javadoc工具的测试API文档 -header 我的类 -version -author lee yeeku

上面命令指定对 lee 包和 yeeku 包来生成 API 文档,而不是对 Java 源文件来生成 API 文档。

基本数据类型

整型

  • byte:-128(-27) ~ 127(27-1)
  • short:-32768(-215) ~ 32767(215-1)
  • int:-2147483648(-231) ~ 2147483647(231-1)
  • long:(-263) ~ (263-1)

如果直接将一个较小的整数值(在 byte 或 short 类型的范围内)赋给一个 byte 或 short 变量,系统会自动把这个整数值当成 byte 或 short 类型处理。
如果使用一个巨大的整数值(超出了 int 类型的范围)时,Java 不会自动把这个整数值当成 long 类型处理。如果希望系统把一个整数值当成 long 类型来处理,应在这个整数值后增加 l 或者 L 作为后缀。

Java 中整数值有4种表示方式:十进制、二进制、八进制 和 十六进制,其中二进制的整数以 0b 或 0B 开头;八进制的整数以 0 开头;十六进制的整数以 0x 或 0X 开头,其中 10 ~ 15 分别以 A ~ F 来表示。

所有数字在计算机底层都是以二进制形式存在。原码是直接将一个数值换算成二进制数。但计算机以补码的形式保存所有的整数。补码的计算规则:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,只是最高位(符号位)保持不变。

字符型

字符型用于表示单个的字符,字符型值必须使用单引号 ' 括起来。Java使用 16 位的 Unicode 字符集作为编码方式,支持各种语言的字符。

所谓字符集,就是给所有给所有字符的编号组成总和。
ASCII 字符集(支持256个字符编号)
16位 Unicode 字符集(支持65536个字符编号)

字符型值有如下三种表示形式:

  • 直接通过单个字符来指定字符型值,’A’,’9’。
  • 通过转义字符表示特殊字符型值,’\n’,’\t’。
  • 直接使用 Unicode 值来表示字符型值,格式是 ‘\uXXXX’,其中 XXXX 代表一个十六进制的整数。

    字符型值也可以采用十六进制编码方式来表示,范围是 ‘\u0000’ ~ ‘\uFFFF’,一共可以表示 65536 个字符,其中前 256 个( ‘\u0000’ ~ ‘\u00FF’ )字符和 ASCII码中的字符完全重合。

由于计算机底层保存字符时,实际上是保存该字符对应的编号,因此 char 类型的值也可以直接作为整型值来使用,它相当于一个 16 位的无符号整数,范围是 0 ~ 65535。反过来,如果把 0 ~ 65535 范围内的一个 int 整数赋给 char 类型变量,系统会自动把这个 int 整数当成 char 类型来处理。

浮点型

Java 的浮点数遵循 IEEE 754 标准,采用二进制数据的科学计数法来表示浮点数,对于 float 型数值,第 1 位是符号位,接下来 8 位表示指数,再接下来的 23 位表示尾数;对于 double 类型数值,第 1 位也是符号位,接下来的 11 位表示指数,再接下来的 52 位表示尾数。

如果需要精确保存一个浮点数,应该使用 BigDecimal 类。

Java的浮点数有两种表示形式:

  • 十进制数形式:例如 5.12、512.0、.512。浮点数必须包含一个小数点,否则会被当作 int 类型处理。
  • 科学计数法形式:例如 5.12e2(即 5.12 × 102),5.12E2(也是 5.12 × 102)。

只有浮点类型的数值才可以使用科学计数形式来表示。例如,51200 是一个 int 类型的值,但 512E2 则是浮点类型的值。Java的浮点类型默认是 double 类型,5.12f 或 5.12F 才表示一个 float 类型的值。

正无穷大:使用一个正数除以 0 将得到正无穷大,通过 Double 或 Float 类的 POSITIVE_INFINITY 来表示。
负无穷大:使用一个负数除以 0 将得到负无穷大,通过 Double 或 Float 类的 NEGATIVE_INFINITY 来表示。
非数:0.0 除以 0.0,或对一个负数开方将得到一个非数,通过 Double 或 Float 类的 NaN 来表示。

只有浮点数除以 0 才可以得到正无穷大或负无穷大。如果一个整数除以 0,则会抛出异常 ArithmeticException

基本类型的类型转换

自动类型转换


小数转换成大数不损失精度。

强制类型转换

大数强制转换成小数会造成精度丢失:(targetType)value

字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型,8个包装类都提供了一个 parseXxx(String str) 静态方法用于将字符串转换成基本数据类型。

表达式类型的自动提升

当一个算数表达式中包含多个基本类型的值时,整个算数表达式的数据类型将发生自动提升。规则如下:

  • 所有的 byte类型、short类型 和 char类型 将被提升到 int 类型。
  • 整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。

运算符

位运算符

  • &:按位与。当两位同时为 1 时才返回 1。
  • |:按位或。只要有一位为 1 即可返回 1。
  • ~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
  • ^:按位异或。当两位相同时返回 0,不同时返回 1。
  • <<:左移运算符。
  • >>:右移运算符。
  • >>>:无符号右移运算符。

左移运算符是将操作数的二进制码整体左移指定位数,左移后右边空出来的位以0填充;
右移运算符有 >>>>>,对于>>而言,把第一个操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位填充,即如果第一个操作数原来是正数,则左边补0;如果第一个操作数是负数,则左边补1。>>>是无符号右移运算符,它把第一个操作数的二进制码右移指定位数后,左边空出来的位总是以0填充。

进行移位运算时还要遵循以下规则:

  • 对于低于 int 类型(如byte、shor、char)的操作数总是先自动类型转换为 int 类型后再移位;
  • 对于 int 类型的整数移位 a>>b,当 b>32 时,系统会先用 b 对 32 求余(因为int类型只有32位),得到的结果才是真正移位的位数。
  • 对于 long 类型的整数移位 a>>b,当 >64 时,总是先用 b 对64求余(因为long类型是64位),得到的结果才是真正移位的位数。

逻辑运算符

  • &&:短路与,前后两个操作数必须都是 true 才返回 true。
  • &`:不断路与。
  • ||:短路或,只要其中一个操作数是 true 就可以返回 true。
  • |`:不短路或。
  • !:逻辑 非。
  • ^:异或。当两个操作数不同才返回 true。

运算符的结合性和优先级

以下是运算符优先级,上一行的运算符总是优先于下一行。