java基本数据类型
byte(0) | 8位,最大存储数据量是255,存放的数据范围是-128~127之间。 |
---|---|
short(0) | 16位,最大数据存储量是65536,数据范围是-32768~32767之间。 |
int(0) | 32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。 |
long(0) | 64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。 |
float(0.0) | 32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。 |
double(0.0) | 64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。 |
boolean(false) | 只有true和false两个取值。 |
char(null) | 16位,存储Unicode码(万国码),用单引号赋值。 |
常量: 在程序运行期间不会发生改变的量,一般放在常量池里。
常量的分类: 字符串常量,整数常量,浮点数常量,字符常量,布尔类型常量,空常量null。
变量: 程序运行期间可以发生改变的量。
变量使用的注意事项:
- 如果创建多个变量,变量名在指定作用域内不可重复。
- 对于float和long类型来说,字母后缀F和L不要丢掉。
- 如果使用byte和short类型变量,那么右侧的数据不能超过左侧的类型范围。
- 没有赋值的变量不能直接使用:变量必须先赋值,后使用。
- 可以通过一个语句创建多个变量,但是不推荐这么写。
数据类型转换
自动转换: 代码不需要进行特殊处理,自动转换。(规则:从小到大)
强制转换: 代码需要进行特殊的格式处理,不能自动完成。
- 如果没有超过左侧范围,编译器不上强转。
- 如果右侧超过左侧范围,直接报错。
注意事项:
- 强制类型转换一般不推荐使用,因为有可能发生精度损失,数据溢出。
- byte/short/char这三种类型都可以发生数学运算,例如加法“+”。
- byte/short/char这三种类型发生运算时,都会首先被提升为int类型,然后计算。
运算符整理
运算符: 进行特点操作的符号。例如:+
表达式: 用运算符连起来的叫做表达式。
算术运算符 | |
---|---|
+(加法) | 加法运算,字符串连接运算,对于char类型先转换为int |
-(减法) | 减法运算 |
*(乘法) | 乘法运算 |
/(除法) | 除法运算 |
% (取余) | 取模运算,两个数字相处取余,只适用于整形 |
++、–(自增、自减) | 自增自减运算(在前先算后赋值,在后先赋值再算) |
赋值运算符 | |
---|---|
= | 等于号 |
+= | 加等于 |
-= | 减等于 |
*= | 乘等于 |
/= | 除等于 |
%= | 取模等于 |
注:”运算符=”意义是将等号后面看做整体然后用(左边的变量(运算符)右边的变量或数值)
比较运算符 | 结果只有true(判断正确)和false(判断错误) |
---|---|
== | 等于(注意两个等于是比较,一个等于是赋值) |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
!= | 不等于 |
比较运算的注意事项:
- 运算结果只能是boolean值。
- 如果进行多次判断不能连这些。例如:int m=10; boolean rst=m<12 && m>5;
逻辑运算符 | |
---|---|
(或) | 从左向右进行判断,如果第一个不符合条件则不需要判断后面。 |
&&(与) | 从左向右进行判断,如果第一个不符合条件则不需要判断后面;如果是&第一个错误,也要判断第二个。 |
!(非) | 优先级相对较高 |
三元运算符
格式:
数据类型 变量名称 = 判断条件?表达式A:表达式B;(判断正确,执行表达式A;反之执行表达式B)
三元运算符嵌套
变量名称 = 判断条件?(判断条件?表达式A:表达式B):表达式C;
JDK、JRE、JVM
JVM: 实现java跨平台性。我们编写的程序在JVM上,而JVM在操作系统上。
JRE: 是java运行时的环境,包含JVM和运行时的核心类库。
JDK: 是java程序开发工具包,包含了JRE和开发人员使用的工具。运行只需要JRE即可。
程序流程结构
顺序结构,选择结构,循环结构。
顺序结构
1.按顺序中间没有分钟判断,一路到底的结构。
选择结构
- if-else语句(可以连着if-else)
if(关系表达式){
语句体;
}else if(关系表达式){
语句体;
}else{
语句体;
}
注意事项: else是紧跟与他最近的一个没有连接其他else的if语句。
- switch语句(用于多个选项进行选择,break可以没有)
switch(表达式){
case空格常量:语句体;break;
…
…
…
default空格:语句体;break;
}
注意事项: 1)多个case后面的数值不可以重复;
2)switch后面小括号当中只能是下列数据类型:
基本数据类型:byte/short/char/int
引用类型:String字符串、enum枚举
3)switch语句可以很灵活,前后顺序可以颠倒,
匹配到谁,就从谁开始一直往下执行,直到遇到break语句或者执行到最后一条语句结束。
循环结构
- for循环:
for(初始化表达式;布尔表达式;步进表达式){
循环体;
}
备注:适用于循环此时已知的循环结构。
- while循环:
while(布尔表达式){
循环体;
步进表达式;
}
备注:在不知道循环次数的时候使用。
- do-while表达式:
do{
循环体;
步进表达式;
}while(布尔表达式);
备注:1.用于先执行一次循环,在进行判断的情况。
2.while语句之后有一个逗号不能忘记。
循环注意事项:
1.循环可以嵌套使用,但是一定要有终止循环的条件。
2.嵌套循环要注意内外层的条件相结合,数组循环不能越界。
方法入门
方法的概述
- 方法就是讲一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
- 当我们需要这个功能的时候,直接调用即可。实现代码的重复利用。
方法定义
格式(eg1):
Public static void 方法名称(){
方法体;
}
方法体:大括号中可以包含任意语句。
注意事项
- 方法定义的先后顺序无所谓;
- 方法应该定义在类当中,不能产生嵌套关系;
- 方法定义好之后不会执行。如果想要执行,一定要调用。
- 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
- return后面的返回值数据,必须和方法的返回值类型,对应起来。
- 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
- 对于void方法当中最后一行的return可以省略。
- 一个方法当中可以有多个return语句,但是必须保证同时有一个会被执行到,两个return不能连写。
方法的调用
如果方法有返回值,则需要在调用出定义相应返回值类型,接住方法返回的值。
如果没有返回值,则直接调用,如:method();
三种调用格式
- 单独调用:方法名称();
- 打印调用:System.out.println(方法名称(参数));
- 复制调用:数据类型 变量名称=方法名称;
返回值类型: 也就是方法最终产生的数据结果是什么类型。
方法名称: 方法的名称,规则和变量一样:首字母小写第二个单词开头字母大写。
参数类型: 进入方法的数据是什么类型。
参数名称: 进入方法的数据对应的变量名称
备注: 参数如果有多个,使用逗号进行分隔。
流程控制语句:
- break:跳出循环体或者switch语句。只往外跳出层循环。
- continue:结束本次循环,直接进入下一次循环判断。
- return:两个作用:第一跳出当前方法;第二:后面的返回值还给调用出。
方法调用的流程图解
方法传参
- 基本数据类型,操作传递的是变量的值
- 引用类型传递的是地址值
- String类型比较特殊,虽然传递的是地址,
但是由于String类型不可变,所以在参数传递时,String类型只能改变地址值的指向。
方法的重载
产生方法重载的原因: 多个方法可能实现功能一样,但是要的参数不一样,难以记忆。
方法重载(OverLood),多个方法名称一样,但是参数列表不一样。
好处: 只需要记住一个方法功能,就能实现多个类似功能。
三要素: 同一个类中,方法名相同,参数列表不同。
(参数的个数,或类型不同,或顺序不同 都不行)
数组
数组是一种容器,可以同时存放多个数据值。
特点
- 数组是一种引用数组类型。
- 数组当中的多个数据,类型把必须统一。
- 数组的长度在运行期间不可改变。
数组的初始化: 在内存当中创建一个数组,并且向其中赋予一些默认值。
两种常见的初始化方式:
- 动态初始化(指定长度)
- 静态初始化(指定内容)
动态初始化数组的格式
数据类型[] 数组名称 = new 数据类型[];
解析含义
左侧数据类型: 也就是数组当中保存的数据,全都是统一的什么类型。
左侧得中括号: 代表我是一个数组。
左侧的数组名称: 给数组去一个名字。
右侧的new: 代表创建数组的动作。
右侧数据类型: 必须和左侧的数据类型保持一致。
右侧的中括号的数字: 也就是数组当中,到底可以保存多少的数据,是一个int数字。
静态初始化数据的格式
数据类型[] 数组名称 = new数据类型[] {元素1,元素2,元素3,。。。。};
数据类型[] 数组名称 = {元素1,元素2,元素3,。。。。};
注意事项
- 虽然中括当中没有直接告诉长度,但是根据大括号的元素内容,也可以自动推算出长度。
可以用 数组名.length 来获得数组长度。 - 静态初始化标准格式可以拆分成为两个步骤。
- 动态初始化也可以拆分成为两个步骤。
- 静态初始化一旦使用省略格式,就不能拆分成为两个步骤。
Java内存划分:java内存需要划分成为5个部分
注释:重要的是了解前三个
数组的内存图
数组越界
是属于异常,不属于错误,很简单的判断:若果发生错误idea会泛红,异常会在编译时发生错误
数组越界异常: ArrayIndexOutBoundsException
原因: 索引编号写错了。索引编号斌不存在。
空指针异常: NullPointerException
所有的引用类型变量,都可以赋值一个null值。但是代表其中什么都没有。
数组必须进行初始化才能使用其中的元素。如果只是赋值null,没有进行new创建,那么将会产生空指针异常。