数据类型和运算符(2019-05-12)
Java语言是一门强类型语言。其中这个强的含义包含两方面:
1. 所有变量必须先声明、后使用
2. 指定类型的变量只能接受类型与之匹配的值。
强类型语言的优点:
能够在编译过程中发现源代码的错误,从而保证程序更加健壮。
注释
java提供了三种注释方式:
注释类型 | 语法 |
---|---|
单行注释 | // 注释内容 |
多行注释 | /*注释内容*/ |
文档注释 | /** 注释内容 */ |
标识符和关键字
标识符规则
标识符就是用于给程序中变量、类、方法命名的符号。Java语言的标识符必须以字母、下划线( _ )、美元符号($)开头,后面可以跟任意数目的字母、数字、下划线( _ )和美元符号($)。此处的字母并不局限于26个字母,而且可以包含中文字符、日文字符等。
命名案例:
H$_123我们是好孩子.java(创建的类)
package annotationtest;
public class H$_123我们是好孩子 {
public static void main(String[] args) {
System.out.println("Hello ");
}
}
运行程序的输出结果是:Hello
所以java程序是可以使用中文命名的,不过还是应该避免使用中文字符(用中文是不是有点low啊)。
标识符命名规则:
1.标识符可以由字母、数字、下划线(_)和美元符号($)组成,其中数字不能开头。
2. 标识符不能是Java关键字和保留字。
3.标识符不能包含空格。
4.标识符只能包含美元符号($),不能包含"@"、"#"等其他特殊字符。
Java 关键字
Java语言中有一些具有特殊用途的单词被称为关键字(keyword),当定义标识符时不要让标识符和关键字相同,否则将引起错误。
//使用boolean关键字 作为标识符 将会报错
int boolean;
数据类型分类
java程序基本数据类型种类以及内存占用表:
数据类型 | 所属分类 | 内存占用 |
---|---|---|
byte | 整型 | 1字节(8bit) |
short | 整型 | 2字节(16bit) |
int | 整型 | 4字节(32bit) |
long | 整型 | 8字节(64bit) |
float | 浮点型(单精度) | 4字节(32bit) |
double | 浮点型(双精度) | 8字节(64bit) |
boolean | 布尔型 | java规范未指定 |
char | 整型 | 2字节(16bit) |
注1: bit是计算机中最小的数据单位,中文名被称作“位”
注2: char代表字符型,实际上字符型也是一种整型,相当于无符号整数类型
声明变量的语法:
type varName[=初始值];
java语言支持的类型分为两类:基本类型(Primitive Type)和引用类型(Reference Type)。
基本类型又包括boolean型和数值类型。
数值类型有整数类型和浮点类型。
整数类型包括byte、short、char、int、long;浮点类型包括float和double。
引用类型包括类、接口和数组类型,还有一种特殊的null类型。
所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是Java云烟里不再使用指针这个说法。
空类型(null type)就是null值的类型,这种类型没有名称,因为null类型没有名称,所以不能声明一个null类型的变量或者转换到null类型。空引用(null)是null类型变量的唯一的值。空引用(null)可以转换为任何引用类型。
注意: 空引用(null)只能被转换成引用类型,不能转换成基本类型,为此不要把一个null值赋给基本数据类型的变量。
基本数据类型
int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。
必须指出的是:
1. 如果直接将一个较小的整数值(在byte或者short类型的表数范围内)赋给一个byte或者short变量,系统会自动把这个值当做byte或者short类型来处理。
2. 如果使用一个巨大的数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应该在这个整数值后增加L或者l作为后缀。通常推荐使用L,因为英文字母l很容易跟数字1搞混。
注意:可以把一个较小的整数值(在int类型的表数范围以内)直接赋给一个long类型的变量,这并不是因为Java会把这个较小的整数值当成long类型来处理,Java依然把这个整数值当成int类型来处理,只是因为int类型的值会自动类型转换到long类型。
Java中的进制
进制类型 | 表示 |
---|---|
二进制 | 0b、0B(java7增加的) |
八进制 | 0 |
十进制 | |
十六进制 | 0x、0X |
提示:数字在计算机中是以二进制存在的,原码是直接将一个数值换算成二进制数字,单计算机以补码的形式保存左右整数。
补码的计算规则:原码除了符号位(最高位)取反得到反码,反码加1得到补码。(最高位是1代表是一个负数)
正如前面所指出的,整数值默认就是int类型,因此使用二进制形式定义整数时,二进制整数默认占32位,其中第32位是符号位,如果添加L作为结尾,就会占用64位,其中第64位是符号位。
字符型
字符型通常用于表示单个的字符,字符型值必须使用单引号(')括起来。Java语言使用16位Unicode字符集作为编码方式,而Unicode被设计成支持世界上所有书面语言的字符,包括中文字符,因此Java程序支持各种语言的字符。
字符型值有三种表示方式。
1. 直接通过单个字符来制定字符型值,例如‘A’,‘9’,‘0’等。
2. 通过转义字符表示特殊字符型值,例如‘\n’,'\t'等。
3. 直接使用Unicode值来表示字符型值,格式是'\uXXXX',其中XXXX代表一个十六进制的整数。Java语言中常用的转义字符如下表:
转义字符 | 说明 | Unicode表示方式 |
---|---|---|
\b | 退格符 | \u0008 |
\n | 换行符 | \u000a |
\r | 回车符 | \u000d |
\t | 制表符 | \u0009 |
\" | 双引号 | \u0022 |
\' | 单引号 | \u0027 |
\\ | 反斜线 | \u005e |
字符型值也可以采用十六进制编码方式来表示,范围'\u0000''\uFFFF',一共可以表示65536个字符,其中前256('\u0000''\u00FF')字符和ASCII码中的字符完全重合。
由于计算机底层保存字符时,实际是保存该字符对应的标号,一次char类型的值亦可以直接作为整型值来使用,它相当于一个16位的无符号整数,表数范围是0~65535。
提示: char类型的变量、值完全可以参加加减乘除等数学运算,也可以比较大小——实际上都是用该字符对应的的编码与运算。
如果把0~65535范围内的一个int整数赋给char类型变量,系统会自动把这个int整数当成char类型来处理。
浮点型
类型:float和double
Java使用二进制的科学计数法来表示浮点数。对于float而言,第一位是符号位,接着8位是指数,最后23位表示尾数。对于都变了而言,第一位是符号位,后面11位是指数位,最后52位表示尾数。
因为java保存浮点数是使用科学计数法来表示,所以不会很精确,如果想要非常精确的保存浮点数应该使用BigDecimal类。
浮点数表示形式:
1. 十进制数形式:5.12,512.0,.512,浮点数必须包含一个小数点,否则会被当做int类型处理。
2.科学计数法形式: 例如5.12e2,5.12E2(这两个均表示5.12乘以10的平方)
值得指出的是,只有浮点类型才可以使用科学计数法表示,比如51200是int类型,但是512E2就是一个浮点型。
Java语言默认是double类型,如果希望Java把一个浮点型当成float,应该在浮点类型后面加一个F或者f。 5.12表示一个double类型,占64位内存空间,5.12f或者5.12F是float类型,占32位内存空间
此外java还提供了三个特殊的浮点值:
浮点值名称 | 可以通过什么运算得到 | 如何表示 |
---|---|---|
正无穷大 | 使用一个正数除以0 | 通过Double和Float类的POSITIVE_INFINITY |
负无穷大 | 使用一个负数除以0 | 通过Double和Float类的NEGATIVE_INFINITY |
非数 | 0.0除以0.0或者对一个负数开方 | 通过Double和Float类的NaN |
特别指出: 所有的正无穷大都相等,所有的负无穷大都相等,所有的非数和任何数值以及NaN都不相等
注意:只有浮点型和0相除才能得到正无穷大和负无穷大,因为Java会自动把0转型为浮点型0.0,如果一个int类型的值和0相除,会抛一个除以0异常。
持续更新中......