JDK包含JRE,JRE包含JVM
JDK:Java程序开发工具包,除了必备的Java运行时环境(JRE)之外,还有开发Java所需要的一些工具(就是java开发需要的工具)
JVM:Java语言跨平台的关键,java.exe运行其实就是启动JVM,具体解释执行Java程序的(解释的就是编译后的class文件)-解释器,—一行行翻译执行,边解释class字节码文件边执行
Java半编译半解释性语言,先使用javac将*.java源文件编译为具体操作系统无关的字节码文件*.class(给JVM来解释执行);解释阶段,运行具体操作系统上的JVM来讲class文件解释为具体平台上的机器码并执行
标识符:只能有数字 字母 下划线组成,$合法但不推荐 数字不能开头
驼峰命名法
类的名称:大驼峰,所有单词的首字母大写class Test,源文件名称和主类名称保持一致(public class)
变量,方法名称:小驼峰,从第二个单词开始首字母大写,int age = 10;int myAge = 20;
数据类型与变量
Java、C++是一门强类型语言,定义一个变量时,必须要明确该变量的类型。int age = 10;
//age这个变量只能保存整型数值,age就无法保存小数,也无法保存字符串等等
什么是内存?
内存:
CPU直接和内存打交道,CPU所有运行的数据都存储在内存中
内存的读写速度要比硬盘(外存)快的多的多,10^3-10^5
读写速度快,容量较低,一旦断电,内存中的所有数据就清空了
外存:![](https://i-blog.csdnimg.cn/blog_migrate/7b11e72d2aa19f8ca78d82d571d16357.png)
读写速度慢,容量较大,断电数据仍然保留
计算机存储数据的基本单位
bit:二进制位10=>1010,使用四个比特位存储
byte:字节,计算机保存的数据,以字节为基本单位
1byte=8bit
在程序中有两种类型的数值
变量:定义之后,数值可以改变的内容,称之为变量。能变得只有数值内容,数据类型无法改变
基本语法:数据类型 变量名称 = 初始值。
int a = 10;//定义了一个整型变量,变量名称(标识符)为a,能变的是a保存的数值,不能改变的是a变量的类型
在一行中,可以定义多个相同数据类型的变量
int a = 10,b = 20,c; abc这三个变量都是int类型
数值型变量
整型变量 int - 无论什么操作系统,什么版本的JVM,int一律都4字节
在Java任意的方法内部声明的变量都属于局部变量,局部变量没有默认值,当方法调用结束,方法中的所有局部变量都会被销毁,内存释放。(局部变量必须在使用前赋值)
观察数据类型的默认值:数据类型的默认值必须要在类中定义变量才具备默认值
变量溢出问题
int a = 10;
Integer
整型的包装类
包装类:在Java中一切皆为对象,认为一切事物都可以用类来进行描述,8大基本类型不属于类 因此在Java中,将8大基本类型都有对应的类进行包装 这种类称之为包装类
当给整型最大值+1
10 0000000000000000......0 =>变成了最小值
int只能表示32bit,无法再给上进位,只能进位到符号位
这时就需要更换大数据类型
int < long
长整型变量long 一律都是8字节 包装类位Long(为了区分10到底是整型还是长整型,定义长整型时,一般加l或L表示是长整型,推荐声明长整型时使用L)
long b = a +1;//先计算a+1的值,然后将计算后的值赋值给b
假设一个数比长整型的最大值还大,采用BigInteger类来存储,也可以使用字符串String类型来存储大整数
"232366121089712353123435"->数字型字符串
短整型和字节类型变量使用
short声明短整型,在Java中很少使用
byte < short < int < long 一般场景下用int就够,int放不下了用long
进行网络编程或IO编程时,基本操作单位都是byte
计算机中存储的都是二进制010101010101 小数在计算机中存储时是使用整数来模拟小数的,有一些精度问题。双精度double保证小数点后12位之内的数字一定是准确的
若在某些精度要求特别严格的场景,更换使用BigDecimal类来存储小数
单精度浮点数float4字节,表示的精度较小,保证6位小数之内有效数字,工程中很少使用
float a = 1.0F;
(用f或F表示定义的是单精度浮点数)
字符型变量char对应的包装类为Character(2字节)
编码规则:即将不同的语言转为数字(一般英文字母采用ASCII编码)
C语言的字符使用ASCII编码存储字符
Java语言字符采用Unicode编码,16位编码(2字节)支持地球上所有语言
布尔型变量(boolean)
只有两个数值,不是ture就是false
表示真就是true
表示假就是false
字面量
直接写出来的数值就称之为字面量,字面量也存在数据类型(字面量属于常量)
10-> 整型字面量,默认为int类型
10.1-> 浮点数字面量,默认为double类型
'a'-> 字符字面量,char类型
false-> 布尔值字面量,boolean类型
"abc"-> 字符串字面量,String类型
常量:10->只能表示10,不可能指代别的数字
类型转换与类型提升
小类型转换为大类型自动转换,大类型转换为小类型需要强制类型转换,有精度丢失问题
int,byte,char之间的转换问题
计算机存储数据时默认采用4字节存储,所有小于4字节的数据类型(byte short char)
隐式提升为int之后进行存储(boolean除外)
当把整型字面量赋值给byte变量时,若在byte保存范围之内直接赋值byte a = 120;若超出了byte的保存范围,必须进行强转,有精度丢失问题 byte b = (byte) 130;
byte赋值时,若是整型字面量,在byte范围内的可以直接赋值,若是byte变量(存储实际上是int),无论变量是多少,都需要强转
char(2字节)和int(4字节)的转换
int / int = int
类型提升:当不同数据类型进行运算时,自动会将小类型提升为大类型然后参与运算
int + long => long + long = long
int和double参与运算
对于基本类型来说,所有类型之间都可以进行转换(错)
能相互转换的数据类型之间才能强转或者自动提升
boolean与任何类型毫无关系,无法强转也无法提升