一、数据类型
java共有8大基本数据类型,其中4中属于整型、1种属于字符型、2种属于浮点型、1中属于布尔型。除了基本类型外所有的其他类型都是以对象存在的,都属于对象类型。
1、java提供了4中属于整型的数据类型,包括byte型、int型、short型、long型。
byte(字节)型是以一个字节来表示整数值,它的范围介于-128~127之间。通常,byte型有八进制、十进制、十六进制。无论采用什么进制,再输出到控制台时,系统都会自动转化为十进制。
short型又成为短整型,它以2字节来表示整数值,其整数值介于-32768~32767之间。它也有八进制、十进制、十六进制3种表示方法。
int型邮箱恒威整数型,它以4字节来表示整数值,其整数值介于-2147483648~2147483648之间,刚好超过20亿。它也有八进制、十进制、十六进制3中表示方法。
long型又成为长整型,它以8字节来表示整数型,其数值介于-9223372036854775808~9223372036854775807之间,它也有八进制、十进制、十六进制
long型后缀:”L”是long的缩写,大写、小写都是可以接受的。
long型是jaba中可以表示最大数的基本类型了,那如果超过这个数值了怎么办?在java中还有一种表示任意精度数值的类型,那就是”大数字”,(Big Numbers)。大数字属于对象类型。
在java中需要注意几点
1)、八进制的数据以0作为前缀
2)、十六进制的数据以0X作为前缀。
2、char型
char型又成为字符型,它占2个字节,是以单引号表示的类型
字符类型只能用于标识单个字符,任何超过一个字的内容都不能生命为字符,字符的声明是用单引号。
3、浮点型
浮点型表示有小数部分的数字。它有两种类型:单精度浮点型(float型)或双精度浮点型(double型)
float型 占4个字节,有效数字最长为7位,它有后缀F,也是大小写都可以接受。如果想声明一个float型的浮点数值,后面必须加上f或F,否则系统会认为是double型的。
double型占8字节,有效数字最长为15位,它也有个后缀D,也是大小写都可以接受。后缀有没有都OK。
4、布尔型
布尔型在java中是最简单的,但也是常用的一种类型,它用来表示”true”和”false”两种状态。
二、变量
1、变量的声明
在java中,必须为声明的任何一个变量分配一个类型。声明一个变量时,应该先写上所声明变量的类型,随后再写上变量的名字。如:double salary;
分号是必需的,这是java语句的结束符号,如果没有这个分号,java就不会认为这是一句完全的java语句。
变量名的规则:
1)、变量名中不能有空格
2)、变量名大小写很重要
3)、变量名是不限长度的
4)、保留字和关键字是不能作为变量名
同一类型的不同变量可以声明在同一行,也可以声明在不同行。如果声明在同一行,不同变量之间用逗号分隔。
2、变量的含义
所谓变量,就是”在变量的有效作用范围内,向物理内存申请的一段内存空间,在程序运行过程中,空间内的值是变化的”。为了程序操作方便,我们给内存空间起了个名字,这个名字就是变量名,该内存空间的值就是变量值。
由此我们可以得出这样一个结论:申请了内存空间,并不意味着空间内就要有值,要想使空间内有值,必须要放入值。
3、变量的分类
根据作用范围
根据作用范围分类,变量可以分为全局变量和局部变量
1)、全局变量 就是在某个范围内都起作用的变量。它影响类所属的整个范围,在类的任何位置都可以对该变量进行操作。
全局变量就是在程序运行的全过程中,由程序自动向内存申请的内存空间,空间的内容可以在程序全过程中进行操作或修改。
2)、局部变量 局部变量是针对全局变量的。根据全局变量的定义我们可以想象,所谓的局部变量就是在程序运行的局部过程中,由程序自动向内存申请的内存空间,空间的内容再程序的局部范围内可以被操纵或修改。
按照类型分类
按照类型分类,可以将变量分为基本类型变量和对象类型变量。
基本类型变量就是上面提到的8种基本类型,除了基本类型变量以外的其他变量,都可以被看成是对象变量。基本类型对应的是基本变量,在一个类中又被成为成员变量。对象类型对应的就是对象类型变量,在类中又可以被称为实例变量。
对象类型为什么有被称为实例变量
对象类型变量所操作的原型是一个类,根据面向对象的思想,类是有对象抽象出来的。要想对一个类进行操作,必须得到一个类的实例,所对应的过程被称为累的实例化。因此对象类型变量又可被称为实例变量。
按照所属范围分类
按照所属范围分类,可以将变量分为类变量和成员变量。
类变量是指用关键字static声明的全局变量,它是属于类本身的,不代表任何对象的状态。
成员变量是与类变量相对的,没有static声明的其他的实例变量,她是与具体对象相关的,保持对象的状态。
4、变量的引用
在java中,变量的引用主要有两种方式:传值引用和传址引用
内存的分配 java中的变量主要保存在6个地方
1)、寄存器
对于java来讲,寄存器是最快的保存区域,他为与计算机CPU的内部。因为寄存器的数量十分有限,所以寄存器是根据需要又编译器自主分配的,我们对寄存器没有任何控制权,再程序中也找不到任何寄存器的操作踪迹。
2)、栈
他是仅次于寄存器的保存区域,对于物理上的概念就是驻留常规的RAM区域,又被称为随机访问存储区域。它是通过栈指针来进行操作的,指针下移,创建新的内存;指针上移,释放内存。我们所说的基本类型的变量就放在这里。我们还要讲一个概念,那就是对象句柄。对象句柄也是存放着这里的,请注意不是对象本身,而是对象句柄。
3)、堆
这是一种常规用途的内存池,也就是RAM区域。在java中,我们的任务基本上都是在堆中进行的,我们一直所说的对象就位于堆中。
4)、静态存储
这里所说的静态是指”位于固定位置”。程序再运行期间,静态的数据讲随时等候调用,他也是位于RAM中。在java中可用static关键字指出一个对象的特定元素是静态的,但java对象本身永远不可能置于静态存储空间。
5)、常量存储
常量存储通常直接写在程序代码中,在java中通常是用final来声明的,这样做的目的可以保证它们的值永远不被改变。
6)、非RAM存储
这主要是针对程序外部的资源而言的。也就是说,数据完全独立于程序之外,程序不运行仍然可以存在,并在程序的控制范围之外。
传值引用
说到传值引用,主要是针对基本类型而言的。传值引用是在进行变量的传递过程中,传递的是变量的实际值,是一个新的拷贝,一个变量值的改变不会影响另一个变量值的改变。
传址引用
传址引用主要针对的是对象操作的。它传递的是一个对象句柄的拷贝,也就是形成了多个变量操纵一个对象的状态,这种现象的结果就是任何一个对于句柄操作的变量,都会影响到其他的变量。
对象传递是传址引用,也称按址传递,不同的句柄操纵的是同一个对象
三、基本类型的初始化
基本变量作为全局变量是可以不用初始化,系统会自动初始化的。这个自动初始化的值我们成为默认值,字符型的默认值是空,不是null。如果作为局部变量,程序必须初始化,系统不会为局部变量进行初始化工作。
四、常量
在java中,常量就是在程序运行过程中,其值不变的量。java中是以关键字final来声明一个常量的。
关键字final对变量赋值后,它的值一旦设定,就不再变化。习惯上常量名都用大写。
常量的声明从某种程度上讲是保证了数据的唯一性。在程序的运行中有时为了需要一个常量在所有的代码中都代表同一个值,并且这个值是不允许改变的,我们通常声明这个变量为常量。如果想为一个类声明类常量,使用关键字static final。
在定义类常量后,可以在该类中任何一个方法中使用这个常量。
五、java运算符
在java中,运算符基本上可分为算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和转型运算符等
算数运算符
byte —- short —–int —– long(double)
char — int - long(double)
float — double
以上三种精度转化不会信息丢失
long —– double(float)
int —– float
以上这两种转换会有信息丢失
char —- byte\short\int\long——float\double
以上是精度从低到高
++x:因为 ++ 在前,所以可以记忆为先加后用
–x:因为 –在前,可以记忆为先减后用
x++:因为 x 在前,可以记忆为先用后加
x–:因为x在前,可以记忆为先用后减
关系运算符
关系运算符产生的结果都是布尔型的值。
逻辑运算符
java语言提供了3种逻辑运算符,他们是NOT(非,以符号”!”表示)、AND(与,以符号”&&”表示)、OR(或,以符号”||”表示)。
&& 只有两个条件都为”真”时,才能得到真的结果
|| 两者只要有一个为真,结果就为真
位操作
所有的数据、信息在计算集中都是以二进制的形式存在的,我们有没有颁发对二进制的每个”bit(位)”进行操作呢?在java中提供了这样一种操作,让我们可以对整数的二进制位进行相关的操作。这就是按位运算符,它主要包括位的”与”、位的”或”、位的”非”、和位的”异或”
与 &
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
或 |
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
非 ~
1 ~1=0
0 ~0=1
异或 ^
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
移位运算符
移位运算符的面向对象也是二进制的”位”,可以单独用移位运算符来处理int型数据。它主要包括左移位运算符(<<)、”有符号”右移位运算符(>>)、”无符号”右移运算符
1)、左移运算符
用符号”<<”表示。它是将运算符左边的说对象向左移动运算符右边指定的位数(在低位补0)
2)、”有符号”右移运算符
用符号”>>”表示。它是将运算符左边的运算对象向右移动运算符右侧指定的位数。它使用了”符号扩展”机制。也就是说,如果值为正,则在高位补0,若值为负,则在高位补1
3)、”无符号”右移运算符
用符号”>>>”表示。它同”有符号”右移运算符的移动规则是一样的,唯一的区别是:”无符号”右移运算符采用了”零扩展”,即无论值为正负,都在高位补0
三元运算符
布尔表达式 ? 值 0 : 值 1
它的运算过程是这样的
如果”布尔表达式”的结果是”true”,就返回值0
如果”布尔表达式”的结果是”false”,就返回值1
字符串运算符
“+”号这个运算符,在java中有一项特殊的用法,它不仅起到连接不同字符串的作用,还有一种隐式转型功能,
当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,这种情况在输出语句中很常见
强制类型转换
它的格式是在需要转型的数据前加上”()”,在括号内加入需要转换后的数据类型
由于强制转型,是数据精度丢失,在强制转型是,系统会忽略强制转型的检查,所以在强制转型时,必须清楚强制转换是否会导致错误。
当然,强制转型在某些时候必须要进行,它更大的优点是实现了类型的多态,使java语句更加丰富。
运算符的优先级
括号() 1
++、– 2
~、! 3
*、/、% 4
+、-(减) 5
<<、>>、>>> 6
、<、>=、<= 7
==、!= 8
& 9
^ 10
| 11
&& 12
|| 13
?: 14