Java 数据类型 & 变量与常量 & 注释

一、数据类型

  1、数据类型分类

    Java 的数据类型分为两大类:

      •  基本数据类型:整数、浮点数、字符型、布尔型
      •     引用数据类型(对象类型):类、数组,字符串、接口等。 

  2、基本数据类型

   四类八种基本数据类型:

  

数据类型关键字内存占用取值范围
字节型byte1个字节-128~127
短整形short2个字节-32768~32767
整形int(默认)4个字节-2的31次方~2的31次方-1
长整型long8个字节-2的63次方~2的63次方-1
单精度浮点型float4个字节1.4013E-45~3.4028E+38
双精度浮点型double(默认)8个字节4.9E-324~1.7977E+308
字符型char2个字节0~65535
布尔类型boolean1个字节true、false

    (1)整数类型

      整数用来存储整数数值,可以是正整数,负数,有3种表示形式:

-88    // 十进制
0123   //八进制必须以 0 开头
0x25   // 十六进制必须以 0X 或 0x 开头

      int类型为默认的整数类型,对于long 类型的值,在定义是在数字后加 L 或  l,表示该数值为长整型。

     (2)浮点数类型

      浮点数默认的是double类型,如果想要为float类型数据赋值,、应在后面加 F 或 f 。                                                                                                                

     (3)字符类型   

       1、char c1 = ‘A’;

       2、char c2 = 65;

      3、char c3 = ‘\u0041’

      转义字符 “\” 是一种特殊的字符变量,不同的字符代表不同的意义。

         "\n"  表示换行

          "\t" 表示制表符

     (4)布尔类型

      只有 true 、false 两个字值。

      注:在java语言中,boolean类型不能参与运算

  Tips

    (1)Java中的默认类型:整形类型是 int、浮点类型是 double。

    (2)字符串不是基本类型,而是引用类型。

    (3)浮点型可能只是一个近似值,并非精确的值。

    (4)数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节。

    (5)浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。推荐使用大写字母后缀。

二、变量与常量

  1、关键字(keywords):

    是指在程序中,java 已经定义好的单词,具有特殊含义。

    Java关键字表:

 

intpublicthisfinallybooleanabstract
continuefloatlongshortthrowthrows
ifgotodefaultbytedocase
strictfppackagesupervoidtryswitch
elsecatchimplementsprivatefinalclass
extendsvolatilewhilesynchronizedinstanceofchar
protectedimporttransientdefaultdouble interface
returnbreakforstaticnew 

  2、标识符

    是指在程序中,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。

    •  命名规则:(硬性要求)
      •   标识符可以包含 英文26个字母(区分大小写)、0-9数字、$()美元符号 和 _(下划线) 组成。
      •        标识符不能以数字开头。
      •        标识符不能是关键字。
      •        长度没有限制
    •     命名规范:(软性建议)
      •   类名规范:首字母大写,后面的每个单词首字母大写(大驼峰式)。
      •        方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
      •        变量名规范:全部小写
      •        常量名规范:全部大写。
      •        包名规范:全部小写
      •        望文生义的原则

  3、变量

    (1)在程序执行过程中,值可以被改变的量称为变量

    (2)变量的分类:

    

类型含义数据举例
整数常量所有的整数0,1,578,-6
小数常量所有的小数3.14,-0.1
字符常量单引号引起来,只能写一个字符,必须有内容'a',' ','中'
字符串常量双引号引起来,可以写多个字符,也可以不写"a","hello","中国"
布尔常量只有两个值true、false
空常量只有一个值null

    (3)变量的定义(声明变量)

      变量定义的格式包括三个要素:数据类型、变量名、数据值。

      语法:

(1)数据类型 变量名 = 数据值;       // 一步到位的格式,声明并赋值
(2)数据类型 变量名;              // 声明一个变量,
   变量名 = 数据值;              // 赋值,将右边的数据值,赋值交给左边的变量
 (3)数据类型 变量名称1,变量名称2,变量名称3  = 值,变量名称4,变量名称5 =值2;    //多个相同类型的变量声明并赋值

      Tips:

      (1)如果创建多个变量,那么变量之间的名称不可以重复。(在同一作用域内)

      (2)对于 float 和 long 类型来说,字母后缀 F 和 L 不要丢掉。

      (3)java 语言是强类型的编程语言,要求数据类型必须和值的类型相同

      (4)如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。

      (5)没有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。

      (6)变量使用不能超过作用域的范围。

        【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。

      (7)可以通过一个语句来创建多个变量,但是一般情况不推荐这么写。

 1     // 同时创建了三个全都是int类型的变量
 2         int a, b, c;
 3         // 各自分别赋值
 4         a = 10;
 5         b = 20;
 6         c = 30;
 7         System.out.println(a); // 10
 8         System.out.println(b); // 20
 9         System.out.println(c); // 30
10         
11         // 同时创建三个int变量,并且同时各自赋值
12         int x = 100, y = 200, z = 300;
13         System.out.println(x); // 100
14         System.out.println(y); // 200
15         System.out.println(z); // 300

    (4)变量的有效范围

      变量被定义出来后只是暂存在内存中,等到程序执行到某一个点,该变量会被释放掉,也就是变量的生命周期。变量的有效方位能够访问该变量的区域,若超出该区域,则在编译的时候出现错误。根据“有效范围”可以分为以下两类:

      a. 成员变量

        在类中定义的变量称为成员变量,成员变量在整个类中都有效。成员变量又可分为两种:静态变量和实例变量。

        Demo:

1 class var{
2   int x = 45;
3   static int y = 80;
4 }

 

      x 为实例变量,y 为静态变量(也称类变量)。如果在成员变量的类型前面加上关键字 static 这样的成员变量就称为 静态变量。

      静态变量的有效范围可以跨类,甚至可在整个应用程序之内。对于静态变量,除了能在定义它的类中存取,还能直接以 “类名.静态变量” 的方式在其他类内使用。

      b. 局部变量

        在类的方法体重定义的变量,方法内部定义,在 { } 之间的代码中声明的变量称为局部变量。局部变量只在当前代码块有效。

        在类的方法中声明的变量,包括方法的参数,都属于局部变量。局部变量只在当前定义的方法内有效。局部变量的生命周期取决于方法,当方法被调用时,为变量分配空间,方法调用结束后,则释放局部变量的内存空间,局部变量销毁。

      Tips:局部变量与成员变量同名时,成员变量将被隐藏。即这个成员变量在此方法中暂时失效。

  4、常量

      在程序执行过程中,值不变的量,即固定不变的量称为常量。也被称为 "final变量"。

    常量在整个程序中只能被赋值一次,在为所有的对象共享值时,常量非常有用。

    语法:

final double PI = 3.14159;       // 声明 double 型的常量PI 并赋值

三、数据类型转换

   类型转换是从一种类型更改为另一种类型的过程。如果从低精度数据类型向高精度转换,则永远不会溢出,总是成功。相反,从高精度向低精度转换,可能出现信息丢失,有可能失败。

  1、自动转换(隐式转换)

    将 取值范围小的类型 自动提升为 取值范围大的类型。

    Demo:

public static void main(String[] args) {
  int i =1;
  byte b = 2;
  // byte x = b + 1;   报错
  // int类型和 byte 类型运算,结果是 int类型
  int j = b + i;
  System.out.println(j);        
}

    转换原理图解:

    byte 类型内存占有1个字节,在和 int 类型运算会提升为 int 类型,自动补充 3个字节,因此计算后的结果是 int  类型。

              

    转换规则:范围小的类型向范围大的类型提升,byte、short、char 运算时直接提升为 int 类型。

byte、short、char --> int --> long --> float --> double 

    总结:

    a、特点:代码不需要进行特殊处理,自动完成。

    b、规则:数据范围从小到大

  2、强制转换(显式转换)

    强制类型转换

数据类型 变量名 = (数据类型) 被转数据值;

    Demo:

 1 public static void main(String[] args){
 2    // short 类型变量,内存中2个字节
 3    short s = 1;
 4    /*
 5       出现编译失败
 6       s 和 1做运算的时候,1是int类型,s 会被提升为 int 类型
 7       s+1 后的结果是 int 类型,将结果在赋值 short 类型时发生错误
 8       short  内存2个字节,int  类型4个字节
 9       必须将 int 强制转成 short 才能完成赋值  
10    */    
11      s = s + 1;          // 编译失败
12      s= (short) (s+1);   // 编译成功
13 }

    转换原理图解: 

      

     注意:

      •   浮点转成整数,直接取消小数点,可能造成数据损失精度。
      •        int  强制转成 short  去掉2个字节,可能造成数据丢失。 

    总结:

      a、特点:代码需要进行特殊的格式处理,不能自动完成。

      b、格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;

      注意事项:

      a、 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
      b、byte/short/char这三种类型都可以发生数学运算,例如加法“+”.
      c、byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
      d、 boolean类型不能发生数据类型转换

  3、ASCII 编码表

    字符与数字的对照关系表(编码表):当有 字符 类型的变量参与运算的时候,会把字符转变为相应的数字,然后再进行计算。

   

    将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for Information Interchange 美国标准信息交换码),里面只有字母数字和常用符号,并没有汉字。

   Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。

   Tips:

   在 char 类型和 int 类型计算的过程中,char 类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。

四、注释(comment)

  注释:就是对代码的解释和说明。其目的是让人们能够更好轻松地了解代码。为代码添加注释,是十分必要的,并不影响程序的编译和运行。

  分类:

    •  单行注释:以 // 开头 换行结束
    •     多行注释:以 /* 开头,以 */ 结束
    •     文档注释:以 /** 开头,以 */ 结束,(文档注释只能注释类和函数,编译文档注释源文件 javadoc -d -doc 源文件名称

五、扩展知识(编译器的两点优化)

  1、自动类型转换问题

    对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。

   (1)如果没有超过左侧的范围,编译器补上强转。

   (2)如果右侧超过了左侧范围,那么直接编译器报错。

    Demo:

 1     // 右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的。
 2     // int --> byte,不是自动类型转换
 3       byte num1 = /*(byte)*/ 30; // 右侧没有超过左侧的范围
 4       System.out.println(num1); // 30
 5         
 6      // byte num2 = 128; // 右侧超过了左侧的范围
 7         
 8      // int --> char,没有超过范围
 9       // 编译器将会自动补上一个隐含的(char)
10         char zifu = /*(char)*/ 65;
11         System.out.println(zifu); // A

 

    2、编译器的常量优化

   在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。

   short result = 5 + 8; // 等号右边全都是常量,没有任何变量参与运算编译之后,得到的 .class字节码文件当中相当于【直接就是】:short result = 13; (右侧的常量结果数值,没有超过左侧范围,所以正确。)

   注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。

   Demo:

 1 public static void main(String[] args) {
 2         short num1 = 10; // 正确写法,右侧没有超过左侧的范围,
 3         
 4         short a = 5;
 5         short b = 8;
 6         // short + short --> int + int --> int
 7         // short result = a + b; // 错误写法!左侧需要是int类型,含有两个变量
 8         
 9         // 右侧不用变量,而是采用常量,而且只有两个常量,没有别人
10         short result = 5 + 8;
11         System.out.println(result);
12         
13         short result2 = 5 + a + 8; // 18 错误,里面有变量
14 }

 

转载于:https://www.cnblogs.com/niujifei/p/11210155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值