JAVA变量

变量就是指代在内存中开辟的存储空间,用于存方运算过程中需要用到的数据

int a=5;
int b=6;
int c=a+b;
//变量a,b,c指代内存中三块用于存储整数的存储空间,分别用来存储两个整数以及这两个整数之和。

对于变量我们需要关注如下几个方面:

变量的声明:用特定的语法声明一个变量,让运行环境为其分配空间;

变量的命名:变量需要有个见名知以上的名字,而且要符合Java语言规范;

变量的初始化:变量声明后,要为其赋一个确定的初始值后再使用;

变量的访问:可以对变量中的数据进行存取,操作,但必须和其类型匹配。

 

变量的声明:

当需要使用一个变量时,必须对该变量进行声明

变量的声明包含两点:变量名和变量类型。

注意:JVM会为该变量在内存中开辟存储空间,不同的变量类型决定了存储空间的结构。

           Java语言语法规定,变量使用之前必须声明,否则会有编译错误。

           一条语句可以声明多个同类型变量,中间用逗号分隔。

变量的命名

命名需要符合Java标识符语法要求:

-----可以有字母,数字,“_”和“$”符组成;

-----首字符不能以数字开头;

-----Java大小写敏感,命名变量时需要注意;

-----不能使用Java保留字(一些Java语言规定好的,有特殊含义的字符),如:int if for break;

-----中文可以作为变量名,但不提倡使用;

注意:Java变量名的定义应该“见名知意”;同时,Java编译规范要求:变量命名应该采用驼峰命名法“

”,即如果变量的名字由多个单词组成,出第一个单词外,其他单词首字母大写,其余的字母小写;

 

变量的初始化

未经初始化的变量不能使用

Java语言规定变量在使用之前必须初始化,即必须给该变量赋予特定的值。

----C语言中,变量使用之前可以不需要初始化,但是,其初始值不确定;Java语言的设计者为了避免因此而带来的错误,规定变量必须初始化之后才能使用。

可以在变量声明时初始化:int a=3;

可以在变量声明以后,通过赋值语句对变量进行初始化,但一定确保在第一次使用该变量之前:int sum; sum=0;

 

变量的访问

变量是存放数据的空间,可以对其赋值,更改和操作;要把变量的操作理解为是对其所存储的数据的操作

变量在声明时指定了类型,Java编译器会检测对该变量的操作是否与其类型匹配,如果对变量的赋值或者操作与其类型不匹配,会产生编译错误。

Java基本类型

8种基本数据类型

Java语言有8种基本数据类型,分别用于存储整数,浮点数,字符数据和布尔数据类型

整数类型:byte   short   int   long   

浮点类型:float   double

字符类型:char

比尔类型:boolean

8种基本类型的存储空间:

byte:1个字节(8位)  

short:2个字节(16位)

int:4个字节(32位)

long:8个字节(64位)

float:4个字节(32位)

double:8个字节(64位)

char:2个字节(16位)

boolean:1个字节(8位):存储逻辑变量true/false

int类型

int 是最常用的整数类型。一个int 类型的变量占用4个字节(32位),最大表示范围为:-2^31~2^31-1,即-2147483648~2147483647.

整型数据的除法运算中取整:两个整数相除,会舍弃小数的部分,结果也是整数

运算时要防止溢出的发生:

整数运算的溢出:两个整数进行运算时,其结果可能会超过整数的范围而溢出。正数过大而产生溢出。结果为负数;负数过大而产生的溢出,结果为整数。

int a=2147483647 ;//输出结果为a=-2147483648 溢出

int b=-2147483648;//输出结果为 b=2147483647 溢出

 

注意:整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误。

           除了通常的十进制书写形式,整数直接量也经常写十六进制的形式(以0x或0x开头)或8进制的形式(以0开头)

long类型

在表示整数时,如果int 类型的范围不够,可以使用long型,一个long型的变量占用8个字节(64位),最大的表示范围为:-2^63~2^63-1,即-9223372036854775808~9223372036854775807

如果要表示long 直接量,需要以L或l结尾。如 long a=1000000000l;

通过时间毫秒数来存储日期和时间

JDK提供System.currentTimeMillis()方法,返回1970年1月1日零点到此时此刻所经历的毫秒数,其数据类型为long,该方法经常用于计时操作。

long time=System.currentTimeMillis();
System.out.println(time);

 

double类型

使用double进行浮点数的运算

浮点数,就是小数,包括:float和double

double类型的精度值是float类型的两倍,这正是其名称(双精度)的来由。

浮点数的直接量有两种写法:

---通常写法,如:3.14,314,0.1,5.

---科学计数法:1.25E2 , 1.25e2 , 1.25E-2其中:1.25E2表示1.25乘以10的2次方。

默认的浮点数直接量为double型,如果需要表示float类型的直接量,需要加"f"或"F"后缀。例如:float f1=3.14f

注意:2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确表示1/3一样。

           所以,2进制表示10进制会有舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。

           如果需要精确的运算可以考虑采用BigDecimal类来实现

char 类型

在对char型变量赋值时可以采用如下三种方式:

----字符直接量:形如‘A’,变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char 型变量只能存储一个字符。

----整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。

----Unicode形式:形如'/u0041',Unicode字符的16进制形式

如:

char c1=65;
        char c2='A';
        char c3='\u0041';

 

使用转义字符

对于不方便输出的字符采用转义字符表示,例如:

'\n':表示回车符

'\r':表示换行符

'\\':表示反斜杠(\)

'\':表示单引号(')

'\"':表示双引号(")

 

boolean 类型

boolaen 类型适用于逻辑运算,表示某个条件是否成立。一般用于程序的流程控制。

boolean类型只允许取值true或false ,true 表示成立而false表示条件不成立

boolean型变量经常用于存储关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系。

 

基本类型间的转换

不同的基本类型直接可以相互转换

----自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。类型的大小关系如下:

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

char--->int

----强制转换:从大类型到小类型需要强制转换符:(目标类型)变量

注:强制转换可能会造成精度丧失和溢出。

       多种基本类型参与的表达式运算中,运算结果会自动的向较大的类型进行转换

 

byte,char,short转换为int

byte,char,short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:

----int 直接量可以赋值给byte,char和short,只要不超过其表示范围。

----byte,char,short三种类型参与运算时,先一律转换成int类型再进行运算。

逻辑运算

逻辑运算建立在关系运算的基础之上,逻辑云孙符包括:与(&&),或(||)和非(!),参与逻辑运算的变量和表达式都是boolean类型,运算结果也为boolean类型。

与(&&):只有两个变量均为true时,结果才为true,否则结果为false;

或(||):只有两个变量均为false时,结果才为false ,f否则结果为true;

非(!):运算的值与该变量相反,变量为true时结果为false,变量为false时结果为true;

关于“短路逻辑”的问题

Java逻辑运算遵循“短路逻辑”的原则:

对于“&&”,当第一个数为false时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的运算结果一定是false;

对于"||",当第一个操作数为true 时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的结果一定是true.