一如Java深似海,从此头发是路人,预计此贴将会成为一个成长贴,旨在从头到尾将JavaSE的内容整理完善,同时希望能与各位同好共同进步,希望初学Java的小白能通过此篇获得帮助共同进步,也希望有大佬看到对有争议的地方进行指正,不足之处进行补充指教
关于JDK的安装和环境配置网上应该已经有很多视频和教程了,新手可自行查阅
这里推荐一个
JDK的下载、安装和环境配置教程(2021年,win10)_Marvin_996_ICU的博客-CSDN博客_jdk
另外关于JDK JVM JRE是什么玩意儿做一下简单说明(不牵扯更深一层的lib类库以及class的编译)
JDK:Java Development Kit Java的开发工具,有了JDK你就可以去编译Java程序,就可以进行Java程序的开发,就跟有了锅厨子就能做饭一样,JDK就是那个锅,Java程序员就是那个厨子
JRE:Java Runtime Enviroment 字面意思来理解就是java运行环境,有了JRE就可以跑Java程序了,就像给你个筷子你就能吃饭一样,Java程序就相当于是饭,JRE就是那双筷子
JVM:Java Virtual Machine 字面意思:Java虚拟机,Java有一个很重要的特性就是跨平台性,如何实现这个特性?就是JVM的功劳,Java程序是运行在JVM上的,这样不论你Windows系统,还是Linux系统,亦或者是Mac系统,Java程序都可以正常运行,这就像你如果随身带一个厨房,不管在平原腹地还是深山老林都能吃上一口热乎饭,JVM就是你的厨师团队,保证你在不同的平台都能把Java程序运行起来
三者的关系:安装JDK的时候可以选择安装JRE,JRE中包含JVM
进入正题:
什么是数据类型?
就像生活中我们把生物分成动物和植物一样,不同性质物品会被进行分类一样,Java作为一种计算机语言也是如此,不同的类型的数据有不同的定义方式
Java中的数据类型分为两种:
基本数据类型:
作为Java表示数据的基本组成部分Java一共提供了四大类一共八种基本数据类型
整型:其实就是整数型,用来表示整数,一共有四种
1.byte:
byte 数据类型是8位、有符号的,以二进制补码表示的整数
取值范围:-128~127 一共能表示256个整数,超出这个范围就会报错,程序就运行不起来
测试代码:
public class byteTest { public static void main(String[] args) { //定义一个变量名为byte_MAX的变量用来存放byte的最大值 //为啥代码里是Byte 这里用的是包装类 后面我应该可以更新到这里 Byte byte_MAX = Byte.MAX_VALUE; //同上,定义byte_MIN用来接收byte的最小值 Byte byte_MIN = Byte.MIN_VALUE; //将结果输出到控制台 System.out.println("byte最大值是:"+byte_MAX); System.out.println("byte最小值是:"+byte_MIN); } }
运行结果:
2.short
short 数据类型是 16 位、有符号的以二进制补码表示的整数
取值范围:-32768~32767 一共可以表示六万多个整数
测试代码:
public class shortTest { public static void main(String[] args) { short short_MAX = Short.MAX_VALUE; short short_MIN = Short.MIN_VALUE; //将结果输出到控制台 System.out.println("short最大值是:"+short_MAX); System.out.println("short最小值是:"+short_MIN); } }
运行结果:
3.int
int 数据类型是32位、有符号的以二进制补码表示的整数;
取值范围:-2^31~2^31-1 这个数老大了,没有意外的话项目里需要定义的整数大部分都在这个取值范围中,所以这也是我们最常用的整数型数据类型
测试代码:
public class intTest { public static void main(String[] args) { //int的包装类比较特殊是Integer int int_MAX = Integer.MAX_VALUE; int int_MIN = Integer.MIN_VALUE; //将结果输出到控制台 System.out.println("int最大值是:"+int_MAX); System.out.println("int最小值是:"+int_MIN); } }
运行结果:
4.long
long数据类型是64位、有符号的以二进制补码表示的整数;
取值范围:-2^63~2^63-1 这个类型能表示的数更多,取值范围更大,但是在底层占的空间大影响效率,所以我们平时还是用int
测试代码:
public class longTest { public static void main(String[] args) { long long_MAX = Long.MAX_VALUE; long long_MIN = Long.MIN_VALUE; //将结果输出到控制台 System.out.println("long最大值是:"+long_MAX); System.out.println("long最小值是:"+long_MIN); } }
运行结果:
浮点型:其实通俗来理解就是小数型,用来表示小数,但是你念还是得念成浮点型,一共有两种
1.float
float:单精度浮点型数据,32位
取值范围:-2^128 ~ +2^128
float类型在进行数据运算时有可能会造成精度损失,所以不能用在涉及到精确数字的地方例如:任何关于钱的项目
测试代码:
public class floatTest { public static void main(String[] args) { //注意:定义float类型的变量时候要在值的后面加上f float float1 = 10.01f; float float2 = 10.00f; float result = float1-float2; //结果本应是0.01吧? System.out.println("两个小数相减的结果是:"+result); } }
运行结果:
2.double
double:双精度浮点型数据,64位
取值范围:-2^1024 ~ +2^1024
double的数据类型进行运算时也可能会造成精度的损失,但是因为表示的数据范围更大,效率比float高,所以我们一般定义小数的话默认使用double类型来表示,但是哪怕是double,运算的时候也会造成精度损失,所以依然不能用在任何与钱有关的项目当中。
那么问题来了,关于精确的计算我们用啥?
答案是 BigDecimal 但这是后话了,我们以后再说
测试代码:
public class doubleTest { public static void main(String[] args) { //定义double类型的变量时候直接写小数就行 double double1 = 10000.01; double double2 = 10000.00; double result = double1-double2; //结果本应是0.01吧? System.out.println("两个小数相减的结果是:"+result); } }
运行结果:
布尔型:其实也就是逻辑型,用来判断条件是否成立的一种数据类型
boolean:
boolean类型只有两个值:一个是true,一个是flase
boolean在底层中占了多少位还没有明确定论,因为没有公布源码,但是现在市面上的论调主要是觉得boolean在底层是16位
测试代码:
public class booleanTest { public static void main(String[] args) { //定义一个boolean类型的变量flag1用来接收判断结果 boolean flag1 = 1>2; boolean flag2 = 2>1; //输出结果到控制台 System.out.println("1比2大吗?:"+flag1); System.out.println("2比1大吗?:"+flag2); } }
运行结果:
字符型:
char
char 类型是一个单一的 16 位 Unicode 字符;Unicode编码集规定了每个字符对应的数字,通过一系列运算将人看的懂的字符变成机器看得懂的字符,被广泛应用,但是Java中char类型单一的字符对应的应该是Unicode中的ASCII码表
用来表示任何一个字符,用单引号表示,char类型只能表示一个字符!
测试代码:
public class charTest { public static void main(String[] args) { //定义一个char类型的变量用来表示在ASCII编码中97表示的是哪个字符 char character = 97; System.out.println("97表示的字符是:"+character); //定义一个整型变量用来接收a这个字符在ASCII编码中的编号值多少 int serialNumber = 'a'; System.out.println("a这个字符在ASCII编码中是:"+serialNumber); } }
运行结果:
贴一个Ascii编码表
ASCii码表 ascii码对照表 ASCII码查询 (ip138.com)
注:string类型不是基本数据类型!!!它不是!!!它是引用数据类型!!!
引用数据类型:
范围很广泛,类,对象,数组,接口,可以说除了基本数据类型,其他的都是引用数据类型,包括上述代码中提到的包装类,以后我们一一了解
总结:四类八种基本数据类型搭建起了Java语言的基础框架,让各种数据在Java代码中可以表示,用这各种各样的类型组成的数据搭建起了Java的世界,而引用数据类型则极大的增强了Java代码的灵活性,使开发更加灵活
还有,别问为啥设置这么多数据类型,觉得麻烦建议去找高斯林干一架(看戏.jpg)