第六节.Java中的数据类型与变量
1. 什么是数据类型
数据类型是所有编程语言中都不可或缺的部分,我们研发程序的目的就是解决生活中的问题。而在生活中我们我们的数据也是分成多种的,例如年龄,性别,姓名,价格等,我们虽然在生活中没有具体的分类但是我们也能明白像价格,年龄这些数据是可以计算的数值类型。而性别和姓名这些数据是不可以进行计算的。而在程序中我们需要更加明确这些数据的用途,故而在编程语言中要对不同的数据进行区分。而java中的数据类型的种类很多很精细。我们一般说java是一门强数据类型的编程语言。当然有强数据类型就有弱数据类型语言比如:javascript脚本语言。下面让我们来详细了解一下java中的数据类型
2.Java中的数据类型分类
如上图所示:
Java中数据类型分成两个大的类型,基本数据类型和引用数据类型。
基本类型
其中基本数据类型中又分成了 数值型,字符型,布尔型。
数值类型中又分成了 整数类型和浮点类型(小数类型)。其中整数类型中 有 byte 字节型 ,short短整型,int 整型,long 长整型 四种。浮点型中有 float 单精度,double双精度 两种,这些都是用来表示数值的。
字符类型为char 类型 用来表示任意一个字符或符号。
布尔类型为Boolean 用来表示真 或 假,true表示真 fasle表示假。
引用类型
引用数据类型可以认为是由基本数据类型组合而来的类型,这里我们不做详细解释,之后的课程对数组 类 和接口都会详细学习。
class 类:Java中最常使用的引用类型 ,比如每一个基本数据类型都会对应一个包装类, String类字符串 等都是引用类型,而且我们学到面向对象之后可以自定义各种类,这些都属于引用类型在之后的课程中会详细的学习。
interface 接口:一种特殊的引用类型,主要作用是用来规范类的功能实现。这是我们学习面向对象之后需要了解的。在项目中我们也会经常使用到接口。后边课程由详细解释和学习。
array 数组 [] : 用来表述 一组多个数据的数据类型。这个后边的课程也有详细的解释。
在这里我们首先学习基本数据类型的使用。引用类型的使用会在之后的课程中逐步的展开。
3.基本数据类型详解
不同的数据类型在程序中表示不同的数据空间大小,和取值范围。(如果对于存储空间不是很了解我们可以先看本页的第5小节关于数据单位与存储空间)
类型 | 空间 | 取值范围 | 默认 | 包装类 | |
整数 | byte | 1B | -128到127 | 0 | Byte |
short | 2B | -2的15次方到2的15次方-1 | 0 | Short | |
int | 4B | -2的31次方到2的31次方-1 | 0 | Integer | |
long | 8B | -2的63次方到2的63次方-1 | 0 | Long | |
小数 | double | 8B | 1.7976931348623157E308到4.9E-324 | 0.0 | Double |
float | 4B | 1.4E-45到3.4028235E38 | 0.0 | Float | |
字符 | char | 2B | 一个中文或英文字符 | 空格 | Character |
布尔 | boolean | 1B | true/false | false | Boolean
|
整数 byte short int long 分别 1 2 4 8 字节
byte类型空间为 1字节 能存储值的范围 最大到127 最小到 -128 依次shrot类型 int类型 long类型 每个类型空间大小提高一倍。能存储的值的大小也诸葛增加。
小数 float 4字节 double 8字节
小数中float 4个字节 ,double8个字节。除了存储的最大值和最小值不同外,能存储小数的最大精度也不同。float最多存储6-7位有效数字 ,double最多存储15-16位有效数字
字符 char 2字节
字符类型 可以表示一个中文或英文都可以 但是只能表示一个,数据使用 单引号包裹 。如: 'a' 'B' '你'.
布尔 boolean 1字节
boolean类型只能表示真假 true 表示真 false 表示假。
4.基本数据类型常量演示
首先了解一下什么是常量。
常量:constant常量可以简单理解为是固定的值,不能改变的值。例如 1,2,0.9,你,a 等这些这些具体的数据我们称作常量。常量是在程序运行期间不会发生改变的值。下面我们学习各种类型的常量使用。
整数常量演示
Java中的整型常量可以有 二进制,八进制,十进制,十六进制 四种表现方式。
二进制: 由0,1组成。以0b和0B开头。(JDK7新特性)
八进制: 由0,1,…7组成。以0开头。
十进制 :由0,1,…9组成。整数默认是十进制。
十六进制: 由0,1,…9,a,b,c,d,e,f(大小写均可)组成。以0x或0X开头。
这里需要注意的是在程序中直接书写的整数常量默认最大是int类型。如果需要书写long类型的常量,需要在常量值后加上 L (或l小写 建议使用大写)
代码演示:
public class Demo1{
public static void main(String[] args){
// 整数常量演示
System.out.println(0b10); // 二进制 10 = 十进制的 3
System.out.println(017); // 八进制 17 = 十进制的 15
System.out.println(102); // 十进制 102
System.out.println(0x1f); // 十六进制 1f = 十进制的 31
System.out.println(12312343423435L); // long类型常量 如果常量的值超过了int类型就必须加L
}
}
执行结果:
小数常量演示
Java中的小数常量有 double 和float 两中类型,他们最大的不同在于保留的有效位数不同。double类型精度保留15到16位,float类型保留6到7位。double类型的小数常量可以D(或d)结尾,一般我们省略不写。float 类型的小数常量必须以F(或f结尾),这个是不能省略的。
代码演示:
public class Demo1{
public static void main(String[] args){
// 小数常量演示
System.out.println(2.01D);//默认小数double类型 可以不加D
System.out.println(2.111111111111111111);// 默认小数类型是double类型
System.out.println(2.111111111111111111F);// 小数后添加F 表示float类型
System.out.println(21111.11111111111111);// 默认小数类型是double类型
System.out.println(21111.11111111111111F);// 小数后添加F 表示float类型
}
}
执行结果:
通过代码和结果,仔细观察有效位数的变化规律。
字符常量演示
字符常量用于表示一个字符,一个字符常量要用一对英文半角的单引号 ' ' 包裹起来,它可以是英文字母,数字,标点符号以及由转义字符表示的特殊字符。
代码演示:
public class Demo1{
public static void main(String[] args){
// 字符常量演示
System.out.println('a');//用单引号包裹的一个字符
System.out.println('你');
System.out.println('$');
// 从这里向下的代码中 单引号内包裹的并不是一个字符 但是也可以编译执行?
System.out.println('\'');
System.out.println('\u0000');
System.out.println('\\');
}
}
执行结果:
上面事例中,’\u0000’ 表示的是一个空白符,也可以理解是一个空格。这种以 \ 开始的字符在java中叫做转义字符。转义字符是一些有特殊意义的符号。如下:
\u0000 表示一个空白符号 即一个空格
\n 换行
\r 从当前行的最前端输出
\t 从下一个制表位输出
\b 退格 相当于Backspace
\’ 因为‘单引号本身就是特殊字符所以需要加一个 \ 转义成普通字符
\” 因为“单引号本身就是特殊字符所以需要加一个 \ 转义成普通字符
\\ 因为 \单引号本身就是特殊字符所以需要加一个 \ 转义成普通字符
注意:除了这些特殊字符外,任何情况都不能在单引号中间书写多个字符。
布尔常量演示
布尔型常量即boolean类类型的两的值 true和false,该常量是用来区分真与假的
代码演示:
public class Demo1{
public static void main(String[] args){
// 布尔常量演示 boolean类型只有两个值
System.out.println(true);//这个常量代表真
System.out.println(false);//这个常量代表真
}
}
运行结果:
空常量
null常量只有一个值,表示对象的引用为空。关于null我们会在以后的课程中详细介绍。null常量是不能输出使用的。他也是Java中的一个关键字。
字符串常量演示
字符串常量用于表示一串连续的字符或多个字符。一个字符串常量要用一对英文半角格式的双引号 ” ” 引起来。
代码演示:
public class Demo1{
public static void main(String[] args){
// 字符串常量演示
System.out.println("hello world !!!");//只要是被双引号包裹了就都是字符串
System.out.println("好好学习");
System.out.println("Never give up");
System.out.println("每天看一节 轻松学代码");
}
}
运行结果:
5.关于数据单位与存储空间(不明白什么是字节Byte的可以先看看这里)
在这个小节我们来理解一下数据的衡量单位。这个数据的衡量单位由很多。其实数据的衡量单位离我们的生活也很近,最常见的就是手机流量的使用。比如我们手机卡的流量每月是1个G,那么这一个G的流量我能看一篇多少字的小说呢?
首先我们需要先从计算机的存储方式讲起。我们现在使用的计算机和手机都是二进制存储方式进行存储的,这里我们现需要理解一下进制是什么以及进制转换的简单逻辑。
进制
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法)。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。在开发过程中我们会用到 十进制,二进制,八进制,十六进制等。其实我门可以这样理解进制,几进制就是 一个位置上可以出现的数字个数,如果超出了就需要多加一位。注意数数儿的时候我们要从0开始数。比如我们常用的十进制,在一位数上有 0,1,2,3,4,5,6,7,8,9 这十个数字 如果在向下数 十就需要两位表示 10 ,也就是逢十进一。二进制一位上的数字只有 0 , 1 二就需要 10 来表示 ,逢二进一。八进制 一位上有0,1,2,3,4,5,6,7 ,八就需要两位表示就是 10。十六进制的一位上有 0,1,2,3,4,5,6,7,8,9,a(10),b(11),c(12),d(13),e(14),f(15),十六就需要用两位10表示。
数值 / 进制 | 十进制 | 二进制 | 八进制 | 十六进制 |
零 | 0 | 0 | 0 | 0 |
一 | 1 | 1 | 1 | 1 |
二 | 2 | 10 | 2 | 2 |
三 | 3 | 11 | 3 | 3 |
四 | 4 | 100 | 4 | 4 |
五 | 5 | 101 | 5 | 5 |
六 | 6 | 110 | 6 | 6 |
七 | 7 | 111 | 7 | 7 |
八 | 8 | 1000 | 10 | 8 |
九 | 9 | 1001 | 11 | 9 |
十 | 10 | 1010 | 12 | A |
十一 | 11 | 1011 | 13 | B |
十二 | 12 | 1100 | 14 | C |
十三 | 13 | 1101 | 15 | D |
十四 | 14 | 1110 | 16 | E |
十五 | 15 | 1111 | 17 | F |
十六 | 16 | 10000 | 20 | 10 |
十七 | 17 | 10001 | 21 | 11 |
十八 | 18 | 10010 | 22 | 12 |
十九 | 19 | 10011 | 23 | 13 |
二十 | 20 | 10100 | 24 | 14 |
在上图我们可以看到个中进制之间相同值的不同展示方式。例如十进制的8在计算机存储的就是 二进制的1000 。其实不管是数字还是其它数据最终在计算机中存储的都是二进制。也就是只有0和1.
数据空间的表示
而这些二进制数据如何在计算机上存储的?计算机中每一个0或1占的位置叫做bit(比特binary digit 二进制数字)。八个bit 就是一个B(Byte字节)。下边是数据单位的转换。
1B=8bit : 1个字节是 8个 bit
1KB=1024B :1KB(千字节) 是 1024字节
1MB=1024KB : 1MB(兆字节)是 1024KB
1GB=1024MB : 1GB(吉字节)是 1024MB 这个就是我们手机流量总说的一个G
1TB=1024GB :1TB(太字节) 是 1024GB
1 PB = 1024 TB
1 EB = 1024 PB
1 ZB = 1024 EB
1 YB = 1024 ZB
如果我们看小说?一个汉字需要用两个字节表示,那么我们能看多少个字的小说的最多?
二进制与十进制的转换方式
在计算机内,定点数有3种表示法:原码、反码和补码
原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
十进制的转换二进制规则 阶梯法
如上图将十进制的50转换成二进制的数字使用阶梯法。每次除以2结果去的是余数。出到结果为0停止。倒叙排列余数就是二进制的值。
二进制转换十进制的规则
二进制的数字从又向左每个位分别代表10进制的 2的1次方,2的2次方,2的3次方以此类推。将每个结果都累加在一起就是十进制的结果。注意二进制的位上是0的话十进制的值就不累加。