Java基础学习笔记资料.docx
- 文档编号:9209834
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:140
- 大小:70.33KB
Java基础学习笔记资料.docx
《Java基础学习笔记资料.docx》由会员分享,可在线阅读,更多相关《Java基础学习笔记资料.docx(140页珍藏版)》请在冰豆网上搜索。
Java基础学习笔记资料
(一)Java编程基础
1.Java语言的跨平台是通过针对不同的操作系统,提供不同的jvm来保证的。
2.JDK,JRE,JVM的作用及关系
1)作用
JVM:
保证Java语言跨平台
JRE:
Java程序的运行环境
JDK:
Java程序的开发环境
2)关系
JDK:
JRE+工具
JRE:
JVM+类库
3.为了使程序能够独立运行,必须定义main方法
main方法是程序的入口
被jvm自动调用
4.原码,反码,补码
正数的原,反,补码都相同
负数的反码为原码符号位不变,按位取反
负数的补码为原码符号位不变,按位取反,末位加一
5.关键字
1)被Java语言赋予特定含义的单词
2)特点:
全部小写。
3)注意事项:
A:
goto和const作为保留字存在。
B:
类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记
6.标识符
1)就是给类,接口,方法,变量等起名字的字符序列
2)组成规则:
A:
英文大小写字母
B:
数字
C:
$和_
3)注意事项:
A:
不能以数字开头
B:
不能是java中的关键字
C:
Java语言严格区分大小写
7.常见的命名规则(见名知意):
username,password等
A:
包名全部小写
单级包:
小写
举例:
cn,com
多级包:
小写,并用.隔开
举例:
com.baidu,com.renren
B:
类名或者接口
一个单词:
首字母大写
举例:
Student,Demo
多个单词:
每个单词首字母大写
举例:
HelloWorld,StudentName
C:
方法或者变量
一个单词:
首字母小写
举例:
name,main
多个单词:
从第二个单词开始,每个单词首字母大写
举例:
studentAge,showAllNames()
D:
常量
全部大写
一个单词:
大写
举例:
PI
多个单词:
大写,并用_隔开
举例:
STUDENT_MAX_AGE
8.注释
1)就是对程序进行解释说明的文字
2)分类:
A:
单行注释//注释内容
B:
多行注释/*注释内容*/
C:
文档注释
/**注释内容*/
D:
单行注释可以嵌套使用,但是多行注释不可以嵌套使用
9.常量
1)在程序执行的过程中,其值不发生改变的量
2)分类:
A:
字面值常量
B:
自定义常量
3)字面值常量
A:
字符串常量"hello"
B:
整数常量12,23
C:
小数常量12.345
D:
字符常量'a','A','0'
E:
布尔常量true,false
F:
空常量null
4)在Java中针对整数常量提供了四种表现形式
A:
二进制由0,1组成。
以0b开头。
B:
八进制由0,1,...7组成。
以0开头。
C:
十进制由0,1,...9组成。
整数默认是十进制。
D:
十六进制由0,1,...9,a,b,c,d,e,f(大小写均可)组成。
以0x开头。
10.进制转换
1)其他进制到十进制
系数:
就是每一个位上的数值
基数:
x进制的基数就是x
权:
对每一个位上的数据,从右向左,并且从0开始编号,对应的编号就是该数据的权。
结果:
系数*基数^权次幂之和。
2)十进制到其他进制
除基取余,直到商为0,余数反转。
3)进制转换的快速转换法
A:
十进制和二进制间的转换
8421码。
B:
二进制到八进制,十六进制的转换
11.变量
1)在程序的执行过程中,其值在某个范围内可以发生改变的量
2)变量的定义格式:
A:
数据类型变量名=初始化值;
B:
数据类型变量名;
变量名=初始化值;
使用变量的时候要注意的问题:
A:
作用域
变量定义在哪个大括号内,它就在哪个大括号内有效。
并且,在同一个大括号内不能同时定义两个同名的变量。
B:
初始化值
没有初始化值的变量不能直接使用。
你只要在使用前给值就行,不一定非要在定义的时候立即给值。
推荐在定义的时候给值。
注意:
成员变量有默认值,而局部变量没有,所以必须首先初始化
C:
在一行上建议只定义一个变量
可以定义多个,但是不建议
//intf,intg;//错误,可以写为intf,g;
//inth;inti;//正确
12.数据类型
1)Java是一种强类型语言,针对每种数据都提供了对应的数据类型。
2)分类:
A:
基本数据类型:
4类8种
B:
引用数据类型:
类,接口,数组,枚举,注解。
3)基本数据类型
A:
整数占用字节数
byte1
short2
int4
long8
B:
浮点数
float4
double8
C:
字符
char2
D:
布尔
boolean1
注意:
整数默认是int类型,浮点数默认是double类型。
长整型后缀用L或者l标记。
建议使用L。
单精度浮点数用F或者f标记。
建议使用F。
13.数据类型转换
1)boolean类型不参与转换
2)自动类型转换
A:
从小到大
B:
byte,short,char--int--long--float--double
C:
byte,short,char之间不相互转换,直接转成int类型参与运算。
3)强制类型转换
A:
从大到小
B:
可能会有精度的损失,一般不建议这样使用。
C:
格式:
目标数据类型变量名=(目标数据类型)(被转换的数据);
4)表达式类型自动提升
byteb1=3;
byteb2=4;
byteb3=b1+b2;
程序报错:
因为变量在表达式中进行运算时,也有可能发生自动类型转换,这就是表达式数据类型的自动提升,如一个byte类型的变量在运算期间类型会自动提升为int类型。
数据类型补充问题:
a.在定义Long或者Float类型变量的时候,要加L或者f。
byte,short在定义的时候,他们接收的其实是一个int类型的值。
这个是自己做了一个数据检测的,如果不在它们的范围内,就报错。
b.byte值的问题
byteb1=127;
byteb2=(byte)128;//-128
byteb3=(byte)129;//-127
byteb4=(byte)130;//-126
byte的范围:
-128~127
128:
10000000
-128:
10000000(这里的1即是符号位,也是数值位)
c.数据类型转换之默认转换
byte,short,char--int--long--float--double
long:
8个字节
float:
4个字节
A:
它们底层的存储结构不同。
B:
float表示的数据范围比long的范围要大
long:
2^63-1
float:
3.4*10^38>2*10^38>2*8^38=2*2^3^38=2*2^114>2^63-1
d.Java语言中的字符char可以存储一个中文汉字吗?
为什么呢?
可以。
因为java语言中的字符占用两个字节。
Java语言采用的是Unicode编码。
14.算术运算符:
+,-,*,/,%,++,--
注意事项:
A:
整数相除只能得到整数。
如果想得到小数,必须把数据变化为浮点数类型
B:
/获取的是除法操作的商,%获取的是除法操作的余数
++,--运算符的使用:
单独使用:
放在操作数的前面和后面效果一样。
(这种用法是我们比较常见的)
参与运算使用:
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
作用:
就是对变量进行自增1或者自减1。
+的用法:
A:
加法B:
正号C:
字符串连接符
比较运算符
A:
==,!
=,>,>=,<,<=
B:
无论运算符两端简单还是复杂最终结果是boolean类型。
C:
千万不要把==写成了=
逻辑运算符:
&,|,!
,^,&&,||
特点:
逻辑运算符一般用于连接boolean类型的表达式或者值。
常用结论:
&逻辑与:
有false则false。
|逻辑或:
有true则true。
^逻辑异或:
相同为false,不同为true。
举例:
情侣关系。
!
逻辑非:
非false则true,非true则false。
特点:
偶数个不改变本身。
&&和&的区别?
同理||和|的区别?
A:
最终结果一样。
B:
&&具有短路效果。
左边是false,右边不执行。
开发中常用的逻辑运算符:
&&,||,!
位运算符:
&,|,^,~,<<,>>,>>>
注意:
要做位运算,首先要把数据转换为二进制。
^的特点:
一个数据对另一个数据位异或两次,该数本身不变。
<<:
左移左边最高位丢弃,右边补齐0
>>:
右移最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:
无符号右移无论最高位是0还是1,左边补齐0
表达式:
就是用运算符把常量或者变量连接起来的符合java语法的式子。
A:
算术表达式:
a+b
B:
比较表达式:
a==b
15.键盘录入
基本步骤如下:
A:
导包
格式:
importjava.util.Scanner;
位置:
在class上面。
B:
创建键盘录入对象
格式:
Scannersc=newScanner(System.in);
C:
通过对象获取数据
格式:
intx=sc.nextInt();
16.流程控制语句
1)顺序结构从上往下,依次执行
2)选择结构按照不同的选择,执行不同的代码
3)循环结构做一些重复的代码
17.if语句
1)三种格式
A:
格式1
if(比较表达式){
语句体;
}
执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体
如果是false,就不执行语句体
B:
格式2
if(比较表达式){
语句体1;
}else{
语句体2;
}
执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体1
如果是false,就执行语句体2
C:
格式3
if(比较表达式1){
语句体1;
}elseif(比较表达式2){
语句体2;
}
...
else{
语句体n+1;
}
执行流程:
判断比较表达式1的值,看是true还是false
如果是true,就执行语句体1
如果是false,就继续判断比较表达式2的值,看是true还是false
如果是true,就执行语句体2
如果是false,就继续判断比较表达式3的值,看是true还是false
...
如果都不满足,就执行语句体n+1
2)注意事项
A:
比较表达式无论简单还是复杂,结果是boolean类型
B:
if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
建议:
永远不要省略。
C:
一般来说,有左大括号,就没有分号,有分号,就没有左大括号。
D:
else后面如果没有if,是不能出现比较表达式的。
E:
三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
3)三元运算符和if语句第二种格式的关系
所有的三元运算符能够实现的,if语句的第二种格式都能实现。
反之不成立。
如果if语句第二种格式控制的语句体是输出语句,就不可以。
因为三元运算符是一个运算符,必须要有一个结果返回,不能是一个输出语句。
18.switch语句
格式:
switch(表达式){
case值1:
语句体1;
break;
case值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
switch语句的注意事项:
A:
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:
default可以省略吗?
答:
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
特殊情况:
如果case就可以把值固定。
A,B,C,D
C:
break可以省略吗?
可以省略,但是结果可能不是我们想要的。
会出现一个现象:
case穿透。
最终我们建议不要省略
D:
default一定要在最后吗?
不是,可以在任意位置。
但是建议在最后。
无论default语句在前还是在后,default语句都是最后执行
E:
switch语句的结束条件
a:
遇到break就结束了
b:
执行到末尾就结束了
if语句和switch语句的区别?
if语句:
A:
针对结果是boolean类型的判断
B:
针对一个范围的判断
C:
针对几个常量值的判断
switch语句:
针对几个常量值的判断
Switch语句中的case穿透(case语句后面没有break语句)
switch表达式:
这个地方的取值是有限定的
byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
19.循环语句
1)有三种:
for,while,do...while
2)for循环语句
A:
格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
B:
执行流程:
a:
执行初始化语句
b:
执行判断条件语句
如果这里是true,就继续
如果这里是false,循环就结束
c:
执行循环体语句
d:
执行控制条件语句
e:
回到b
C:
注意事项
a:
判断条件语句无论简单还是复杂,结果是boolean类型
b:
循环体语句如果是一条,可以省略大括号,但是不建议
c:
有分号就没有左大括号,有左大括号就没有分号
3)while循环
A:
基本格式
while(判断条件语句){
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
通过查看这个格式,我们就知道while循环可以和for循环等价转换。
B:
for和while的区别
a:
使用上的区别
for语句的那个控制条件变量,在循环结束后不能再次使用了。
而while的可以继续使用。
b:
理解上的区别
for适合于一个范围的判断
while适合循环次数不明确的
4)do...while循环
A:
基本格式
do{
循环体语句;
}while(判断条件语句);
扩展格式:
初始化语句;
do{
循环体语句;
控制条件语句;
}while(判断条件语句);
通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
while循环和for循环的区别?
使用区别:
如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。
建议使用for循环。
因为变量及早的从内存中消失,可以提高内存的使用效率。
其实还有一种场景的理解:
如果是一个范围的,用for循环非常明确。
如果是不明确要做多少次,用while循环较为合适。
那么,我们一般使用哪种循环呢?
优先考虑for,其次考虑while,最后考虑do...while
5)循环使用的注意事项(死循环)
A:
一定要注意修改控制条件,否则容易出现死循环。
B:
两种最简单的死循环格式
a:
while(true){...}
b:
for(;;){}
6)三种循环的区别
A:
do...while循环至少执行一次循环体
B:
for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
20.控制跳转语句
1)break:
中断的意思
A:
用在循环和switch语句中,离开此应用场景无意义。
B:
作用
a:
跳出单层循环
b:
跳出多层循环,需要标签语句的配合
2)continue:
继续
A:
用在循环中,离开此应用场景无意义。
B:
作用是跳出单层循环的一次,可以继续下一次
3)return:
返回
A:
用于结束方法的。
B:
一旦遇到return,程序就不会在继续往后执行。
(二)方法
方法:
完成特定功能的代码块。
1)方法定义格式:
修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...){
方法体语句;
return返回值;
}
2)要想写好一个方法,就必须明确两个东西:
A:
返回值类型即结果的数据类型
B:
参数列表
你要传递几个参数,以及每个参数的数据类型
3)方法的注意事项:
A:
方法不调用不执行
B:
方法与方法是平级关系,不能嵌套定义
C:
方法定义的时候参数之间用逗号隔开
D:
方法调用的时候不用再传递数据类型
E:
如果方法有明确的返回值,一定要由return带回一个值
4)void类型返回值的方法调用:
单独调用
输出调用(错误)
赋值调用(错误)
5)方法重载:
在同一个类中,方法名相同,参数列表不同。
与返回值类型无关。
参数列表不同包括:
A:
参数个数不同
B:
参数类型不同
(三)数组
数组:
存储同一种数据类型的多个元素的容器。
1.定义格式:
A:
数据类型[]数组名;
B:
数据类型数组名[];
举例:
A:
int[]a;定义一个int类型的数组a变量
B:
inta[];定义一个int类型的a数组变量
注意:
效果可以认为是一样的,都是定义一个int数组,但是念法上有些小区别。
推荐使用第一种。
2.如何对数组进行初始化呢?
A:
何谓初始化呢?
就是为数组开辟内存空间,并为每个数组元素赋予初值
B:
有几种方式呢?
a:
动态初始化只指定长度,由系统给出初始化值
b:
静态初始化给出初始化值,由系统决定长度
动态初始化的格式:
数据类型[]数组名=new数据类型[数组长度];
举例:
int[]arr=newint[3];
如何获取数组中的元素呢?
通过:
数组名[索引]
索引其实就是每个元素的编号,从0开始,最大索引是数组的长度-1。
int[]arr=newint[3];
左边:
int:
说明数组中的元素的数据类型是int类型
[]:
说明这是一个数组
arr:
是数组的名称
右边:
new:
为数组分配内存空间。
int:
说明数组中的元素的数据类型是int类型
[]:
说明这是一个数组
数组元素初始化值:
当数组被成功创建以后,数组元素会被自动赋予一个初始化值,根据元素类型不同,默认初始化值也不相同。
数据类型
默认初始化值
byte,short,int,long
0
float,double
0.0
char
一个空字符,即’\u0000’
boolean
false
引用数据类型
null,表示变量不引用任何对象
3.数组长度,其实也就是数组中元素的个数
4.数组的动态初始化:
定义数组时,只指定数组长度,由系统为数组元素赋初值
int[]arr=newint[10];
5.数组的静态初始化:
定义数组的同时就为数组的每个元素赋值。
格式:
数据类型[]数组名=new数据类型[]{元素1,元素2,…};
简化格式:
数据类型[]数组名={元素1,元素2,…};
举例:
int[]arr=newint[]{1,2,3};
简化后:
int[]arr={1,2,3};
注意事项:
不要同时动态和静态进行。
如下格式:
int[]arr=newint[3]{1,2,3};//错误
6.数组操作的两个常见小问题:
ArrayIndexOutOfBoundsException:
数组索引越界异常
原因:
你访问了不存在的索引。
NullPointerException:
空指针异常
原因:
数组已经不再指向堆内存了。
而你还用数组名去访问元素。
7.数组遍历:
就是依次输出数组中的每一个元素。
8.length属性:
数组提供了一个属性length,用于获取数组的长度。
格式:
数组名.length
知识拓展:
Java的内存分配
A:
栈存储局部变量
B:
堆存储所有new出来的
C:
方法区
D:
本地方法区(系统相关)
E:
寄存器(CPU使用)
注意:
a:
局部变量在方法定义中或者方法声明上定义的变量。
b:
栈内存和堆内存的区别
栈:
数据使用完毕,就消失。
堆:
每一个new出来的东西都有地址
每一个变量都有默认值
byte,short,int,long0
float,double0.0
char'\u0000'
booleanfalse
引用类型null
数据使用完毕后,在垃圾回收器空闲的时候回收。
9.二维数组:
就是元素为一维数组的一个数组。
格式:
A:
数据类型[][]数组名=new数据类型[m][n];
B:
数据类型[][]数组名=new数据类型[m][];
C:
数据类型[][]数组名=new数据类型[][]{{...},{...},{...}};
D:
数据类型[][]数组名={{...},{...},{...}};
格式1:
数据类型[][]数组名=new数据类型[m][n];
m:
表示这个二维数组有多少个一维数组。
n:
表示每一个一维数组的元素有多少个。
注意:
A:
以下格式也可以表示二维数组
a:
数据类型数组名[][]=new数据类型[m][n];
b:
数据类型[]数组名[]=new数据类型[m][n];
B:
注意下面定义的区别
intx;
inty;
intx,y;
int[]x;//定义一个一维数组
int[]y[];//定义一个二位数组
int[]x,y[];//定义一个一维数组,一个二维数组
格式2:
数据类型[][]数组名=new数据类型[m][];
m:
表示这个二维数组有多少个一维数组。
列数没有给出,可以动态的给。
这一次是一个变化的列数。
格式3:
基本格式:
数据类型[][]数组名=new数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
简化格式:
数据类型[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 学习 笔记 资料