Java学习day004 数据类型与变量

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。

day004  数据类型与变量


一、数据类型

Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。

注意:Java有一个能够表示任意精度的算术包,通常称为“大数值”(bignumber)。虽然被称为大数值,但它并不是一种新的Java类型,而是一个Java对象。

接下来就介绍一下这些类型:

  • 整型

    • 整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型,具体内容如下:
    • Java学习day004 数据类型与变量_第1张图片
    • 在通常情况下,int类型最常用。但如果表示星球上的居住人数,就需要使用long类型了。byte和short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。
    • 长整型数值有一个后缀L或l(如4000000000L)。十六进制数值有一个前缀Ox或0X(如OxCAFEL八进制有一个前缀0,例如,010对应八进制中的8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。
    • int x = -1;
      int y = 1;

       

  • 浮点类型

    • 浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,具体内容如下:
    • double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。实际上,只有很少的情况适合使用float类型,例如,需要单精度数据的库,或者需要存储大量数据。
    • float类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如,3.14D)。
    • 可以使用十六进制表示浮点数值。例如,0.125=2—3可以表示成0xl.0p-3。在十六进制表示法中,使用p表示指数,而不是e。注意,尾数采用十六进制,指数采用十进制。指数的基数是2,而不是10。
    • 需要注意的是:浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1)将打印出0.8999999999999999,而不是人们想象的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。
    • 所有的浮点数值计算都遵循IEEE754规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
      • 正无穷大
      • 负无穷大
      • NaN(不是一个数字)。例如,一正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
  • char类型

    • char类型原本用于表示单个字符。char类型的字面量值要用单引号括起来。例如:W是编码值为65所对应的字符常量。它与"A"不同,"A"是包含一个字符A的字符串,char类型的值可以表示为十六进制值,其范围从\u0000到\Uffff。
    • 还有一些用于表示特殊字符的转义序列,例如:
    • Java学习day004 数据类型与变量_第2张图片
    • 所有这些转义序列都可以出现在加引号的字符字面量或字符串中。
  • Unicode和char类型

    • Unicode打破了传统字符编码机制的限制。在Unicode出现之前,已经有许多种不同的标准:美国的ASCII、西欧语言中的ISO8859-1俄罗斯的KOI-8、中国的GB18030和BIG-5等。这样就产生了下面两个问题:一个是对于任意给定的代码值,在不同的编码方案下有可能对应不同的字母;二是采用大字符集的语言其编码长度有可能不同。例如,有些常用的字符采用单字节编码,而另一些字符则需要两个或更多个字节。
    • 设计Unicode编码的目的就是要解决这些问题。在20世纪80年代开始启动设计工作时,人们认为两个字节的代码宽度足以对世界上各种语言的所有字符进行编码,并有足够的空间留给未来的扩展。在1991年发布了Unicode1.0,当时仅占用65536个代码值中不到一半的部分。在设计Java时决定采用16位的Unicode字符集,这样会比使用8位字符集的程序设计语言有很大的改进。
    • 从JavaSE5.0开始。码点(cod epoint)是指与一个编码表中的某个字符对应的代码值。在Unicode标准中,码点采用十六进制书写,并加上前缀U+,例如U+0041就是拉丁字母A的码点。Unicode的码点可以分成17个代码级别(code plane)。第一个代码级别称为基本的多语言级别(basicmultilingual plane),码点从U+0000到U+FFFF,其中包括经典的Unicode代码;其余的16个级另丨〗码点从U+10000到U+10FFFF,其中包括一些辅助字符(supplementary character)。
    • UTF-16编码采用不同长度的编码表示所有Unicode码点。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元(code unit);而辅助字符采用一对连续的代码单元进行编码。这样构成的编码值落人基本的多语言级别中空闲的2048字节内,通常被称为替代区域(surrogate area)[U+D800~U+DBFF用于第一个代码单兀,U+DC00~U+DFFF用于第二个代码单元]。这样设计十分巧妙,我们可以从中迅速地知道一个代码单元是一个字符的编码,还是一个辅助字符的第一或第二部分。例如,⑪是八元数集(的一个数学符号,码点为U+1D546,编码为两个代码单兀U+D835和U+DD46。
    • 在Java中,char类型描述了UTF-16编码中的一个代码单兀。
  • boolean类型

    • boolean(布尔)类型有两个值:false和true,用来判定逻辑条件整型值和布尔值之间不能进行相互转换。
    • 在Java中你可以这样对boolean类型赋值:
    • 但是当你对其进行数值赋值时,就会报错:
    • 你也可以这样使用:
    • 此时输出的结果是:
    • 当你将1<2改为1>2时,输出的结果就是false了。

二、变量

在Java中,每个变量都有一个类型(type)。在声明变量时,变量的类型位于变量名之前。这里列举一些声明变量的示例:

int id;
int count;
long earthPopulation;
boolean done;

可以看到,每个声明以分号结束。由于声明是一条完整的Java语句,所以必须以分号结束。变量名必须是一个以字母开头并由字母或数字构成的序列。

不能使用 Java保留字作为变量名,可以在一行中声明多个变量:

int i,j;//both are integers

不过,不提倡使用这种风格。逐一声明每一个变量可以提高程序的可读性。

  • 变量初始化

    • 声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量。例如,Java编译器认为下面的语句序列是错误的:
    • int x;
      System.out.println(x);//ERROR variable not initialized
    • 要想对一个已经声明过的变量进行赋值,就需要将变量名放在等号(=)左侧,相应取值的Java表达式放在等号的右侧。也可以将变量的声明和初始化放在同一行中。
    • int x;
      x=1;
      //int x = 1;

      在Java中可以将声明放在代码中的任何地方。在Java中,变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的程序编写风格。在Java中,不区分变量的声明与定义。

  • 常量

    • 在 Java中,利用关键字 final 指示常量。例如:
      public class He
       {
      	public static void main(String[] args) 
              {
                  final double CM = 2.54;
                  double CD = 8.5;
                  double CE = 11;
                  System.out.println("size:"+CD*CM+"by"+CE*CM);
              }
       }
      	

       

    • 关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。
    • 在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。
      public class He
       {
          public static final double CM = 2.54;
      
      	public static void main(String[] args) 
              { 
                  double CD = 8.5;
                  double CE = 11;
                  System.out.println("size:"+CD*CM+"by"+CE*CM);
              }
       }
      	

       

    • 需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

学过C\C++的同学应该知道,C和C++区分变量的声明与定义。例如:int i=10;是一个定义,而extern int i;是一个声明。

你可能感兴趣的:(Java基础学习,java)