Java学习笔记
计算机的作用:储存和计算。
计算机的组成:输入单元,输出单元,储存单元,控制单元,元素单元。
变量:表示内存中的某一块内存空间。在Java中变量可以看作是某一块内存空间中的数据。内存空间的别名。通过变量可以找到对应的内存空间以及内存空间中的数据。
一:数据类型
数据类型:是用来确定要分配的内存空间大小以及数据储存方式的
数据到底是如何储存在内存中的?
计算机中是一个二进制的世界,只有0和1两个数字,每一个0或者1叫做一个二进制的位[bit/比特]。0+0=0,1+0=1,0+1=1,1+1=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
4G内存有多少位?
1G=1024mb,1mb=1024kb,1kb=1024byte,1byte=8bit
计算机中最小的储存单位是 位[bit/比特]
计算机中最小的有意义的储存单位是 字节[byte]
计算机在分配储存单元的时候是以字节为单位的
1.基本类型
基本类型可以直接用二进制表示的类型
-
整数类型:
字节型 byte 8bit/1字节 -128~127
短整型 short 16bit/2字节 -32768~32767
整形 int 32bit/4字节 -21亿~21亿
长整型 long 64bit/8字节 -900亿亿~900亿亿
-
浮点类型[表示小数]
单精度 float 32bit/4字节 最多保留8位有效数字,最后一位不精确
双精度 double 64bit/8字节 最多保留16位有效数字,最后一位不精确
-
字符类型
字符型 char 16bit/2字节 0~65535
‘a’ ‘A’ ‘中’ ‘0’
将每一个字符对应一个数字,这个数字叫做这个字符的Unicode编程
-
布尔型
Boolean 1bit 真true 假false
1.引用类型
数组类型
类类型
接口类型
数据类型之间的相互转换:
自动转换:按照数据类型能够表示的数据范围,小范围的可以自动转成大范围的
byte->short->int->long
float->double
char->int
int->float
long->double
语法格式:
int a=100;
float b=a;
强制转换:将数据的类型从大范围强制转成小范围
语法格式:
float a=100F;
int b=(int)a;
二:运算符
1.赋值运算符
相同类型之间的数据可以赋值
int t=10;
int a=20;
a=t;
2.算术运算符
-
二元运算符
+ - * / %
/ 除法:
整数相除,结果是整数,会丢掉余数。
浮点数相除,会除尽,保留对应的有效位数
整数和浮点数相除,会先将整数自动转换成浮点数,在相除
PS:
20/3+10/4=6+2=8
20/3+10/4=80/12+30/12=(80+30)/12=110/12=9
% 取模[计算整除之后的余数]
整数和浮点数一样,都是计算整除之后的余数。
-
混合运算符
+= -= *= /= %=
a+=b -> a=a+b
-
一元运算符
++ --
a++ -> a+=1 -> a=a+1
A-- -> a-=1 -> a=a-1
前置++(--)和后置++(--)的区别:
a++ 先计算其他,然后计算++
++a 先计算++,然后计算其他
++和--的优先级是高于二元算术运算符和混合运算符的
-
关系运算符
关系运算符:是用来判断两个数据之间的大小的
运算的结果是一个boolean值
== 如果相等,则为true,不相等为false
!= 如果不相等,则为true,相等为false
> 如果前面的数据大于后面的数据,则为true,否则为false
< 如果前面的数据小于后面的数据,则为true,否则为false
>=
<=
-
逻辑运算符
逻辑运算符:用来对布尔值进行运算的,运算的结果是布尔值。
! 逻辑非 原来是真就变成假,原来是假就变成真。
& 逻辑与[并且] 所有条件都为真,则为真,否则为假
&& 短路与 所有条件都为真,则为真,否则为假。将最有可能为假的表达式写在前面。
| 逻辑或[或者] 只要有一个条件为真,则为真,否则为假
|| 短路或 只要有一个条件为真则为真,否则为假。将最有可能为真的表达式写在前面。
-
条件运算符[三目运算符/三元运算符]
? :
表达式1?表达式2:表达式3
表达式1一定是一个关系表达式或者逻辑表达式
当表达式1的结果为真的时候,就执行表达式2
当表达式1的结果为假的时候,价值型表达式3
例案:计算|a-b|
int c=a-b>0?a-b:b-a
-
位运算符
按照二进制位进行运算
& 按位与 1&1=1,1&0=0,0&0=0.相同位都是1,则为1,否则为0。任何数&1都等于原数。任何数&0都等于0。
| 按位或 1|1=1,1|0=1,0|0=0.相同位都为0,则为0,否则都为1.
^ 异或 1^1=0,1^0=1,0^0=0.相同位值相同,则为0,否则为1.a和b异或的结果,再异或a,结果为b。异或b,结果为a。交换a和b的值。
-
位移运算符
<< 左移 在低位[右边]加0
>> 右移 整数在高位补0,负数在高位补1
>>>无符号右移 不管正负,都是在高位补0
位运算都是按照int类型来计算的
三.流程控制
1.顺序结构
程序会按照代码的编写顺序一行一行执行,上一行没有执行完,是不会执行下一行的
2.分支结构
程序会按照一定的条件有选择的执行某一些代码
if...
if...else...
if...else...if...else...if...else...
switch...case...case...case...default...
格式:
If(条件){
当条件为真的时候要执行的代码
}
格式:
Switch(数字){
case 数值1:
Break;
case 数值2:
break;
default:
}
3.循环结构
程序按照一定的条件重复的执行一代码
for先判断条件是否满足,如果满足才执行一次循环,执行完之后再判断。
while先判断条件是否满足,如果满足才执行一次循环,执行完之后再判断。
do...while...先执行一次,再判断条件是否满足
格式:
for(声明变量并赋值;循环条件[必须是boolean值];变量自加或自减){
要重复执行的代码
}
格式:
while(;循环的条件;){
要重复执行的代码
}
格式:
do{
要重复执行的代码
}while(;循环的条件;);
4.跳转结构
用来跳转到相应的位置
continue结束本次循环跳转到下一次循环的开始
break结束当前整个循环,跳转到循环结尾的位置。在多层循环中,默认只能够跳出break所在的循环。如果要跳出整个循环,需要给循环定义一个标签。break 标签名表示跳转到标签所代表的循环结尾处。
System.out.println(“循环开始”);
aaa:
for(int i=0;i<10;i++){
int num=0;
while(num<10){
num++;
if(num*i==25){
break aaa;
}
System.out.println(“num:”+num);
}
System.out.println(“i:”+i);
}
System.out.println(“循环结束”);
return 跳出整个函数,跳转到函数的结尾处
四.数组
1.数组
数组:一组数据[用一个变量表示多个数据]
-
定义数组
int a[]=new int[a.length]
int[] a=new int[a.length]
Int[] t=new int[]{1,3,5,7,9};
Int[] t={1,3,5,7,9}(上面那种的简单写法)
-
存放数据
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;//错误ArrayIndexOutofBounds 数组下标越界
-
取出数据
int t=a[0];
int t1=a[1];
-
修改数据
a[o]=2;
-
获取数组长度[数组能够存储的数据个数]
int len=a.lenggth;
-
数组的特点
-
数组的每个存储空间的地址是连续的
-
数组的每个存储空间都有一个编号,叫做数组的下标[索引]
-
数组的下表是一个从0开始的连续递增的整数
-
数组的最大下标=数组长度-1