一、数据类型

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

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

  2、基本数据类型

   四类八种基本数据类型:

  

数据类型

关键字

内存占用

取值范围

字节型

byte

1个字节

-128~127

短整形

short

2个字节

-32768~32767

整形

int(默认)

4个字节

-2的31次方~2的31次方-1

长整型

long

8个字节

-2的63次方~2的63次方-1

单精度浮点型

float

4个字节

1.4013E-45~3.4028E+38

双精度浮点型

double(默认)

8个字节

4.9E-324~1.7977E+308

字符型

char

2个字节

0~65535

布尔类型

boolean

1个字节

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 两个字值。

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关键字表:

 

int

public

this

finally

boolean

abstract

continue

float

long

short

throw

throws

if

goto

default

byte

do

case

strictfp

package

super

void

try

switch

else

catch

implements

private

final

class

extends

volatile

while

synchronized

instanceof

char

protected

import

transient

default

double

 interface

return

break

for

static

new

 


  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  类型。

              

java poi 数字类型取值不带E java数值数据类型_数据类型

转换规则:范围小的类型向范围大的类型提升,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 }



    转换原理图解:

      

java poi 数字类型取值不带E java数值数据类型_java poi 数字类型取值不带E_02

   注意:

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

    总结:

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

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

注意事项:

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

  3、ASCII 编码表

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

   

java poi 数字类型取值不带E java数值数据类型_java_03

将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表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 }