——我是LGM_Hakka,请多多指教。
数据类型
基本数据类型
8种基本数据类型(byte、short、char、int、long、float、double、boolean)
--------------------------------------------------------------
基本知识
Ø 数据容量大小:byte、short、char < int < long < float < double
Ø byte、short、char三者之间不能相互转换。
Ø 基本数据类型在做运算时,若只有整数数据时,将转换成int类型计算;若有实数时,将转为double类型计算。
Ø 实型的默认类型是double;整型的默认类型是int。
--------------------------------------------------------------
强制类型转换(显式类型转换)
强制类型转换:数据从大到小,向下转换
格式:目标数据类型 变量名 = (目标数据类型)(需要转换的数据)
例如:
int a =(int)(3.14);
char b =(char)(97);
弊端:有可能会损失精度
--------------------------------------------------------------
自动类型转换(隐式类型转换)
自动类型转换:数据从小到大,向上转型
格式 :目标数据类型 变量名 = 需要转换的数据;
例如:
int a = 'a';
double b =12;
--------------------------------------------------------------
运算
在运算中,数据会先自动提高类型,进行计算,所以需要注意哪些最后必须强转的。
例如:byte b =(byte)(b1 + b2);
无论b1,b2是什么类型的数值,都将转换为int类型后再相加,所以相加后所得到的是int类型的数值,要将int类型的数值赋值给byte类型,必须强转。但是,如果:【byte b = 3+4;】这样是可以的,因为3,4都是常量。
基本数据类型在做运算时,若只有整数数据时,将转换成int类型计算;若有实数时,将转为double类型计算。
--------------------------------------------------------------
默认值
基本数据类型定义为局部变量时,没有默认初始化值,所以一定要初始化变量后才能调用。
btye,short,int,long类型的数组或成员变量,默认初始值是0;
float,double类型的数组或成员变量,默认初始值是0.0;
char类型的数组或成员变量,默认初始值是'\u0000';
boolean类型的数组或成员变量,默认初始值是false。
(注:String类型的数组或成员变量,默认初始值是null)
运算符、进制转换
运算符
概述:把常量和变量连接的符号,一般参与运算使用。
分类:
算术运算符、赋值运算符、关系运算符
逻辑运算符、位运算符、三元运算符
算术运算符
+、-、*、/、%、++、--
特殊:
1、+:正号,加法,字符串连接符。
System.out.println("5+5=" + 5 + 5);// 5+5=55
System.out.println("5+5=" + (5 + 5));// 5+5=10
System.out.println(5 + 5 + "=5+5");// 10=5+5
2、%:取得余数 (正负号跟左边一致)
左边如果大于右边,结果是余数。
左边如果小于右边,结果是左边。
左边如果等于右边,结果是0。
3、++/- -: +1/-1
++ 其实相当于把数据+1 、-1
单独使用:在数据的前后,结果一致。
参与操作使用:
如果在数据的后边,数据先操作,在++/--
如果在数据的前边,数据先++/--,在操作。
4、赋值运算符:=,+=,-=,*=,/=,%=
5、关系运算符:==、!=、>、>=、<、<=
特点:关系运算符的结果都是boolean类型。
【 请千万注意:== 不要写成 =】
6、逻辑运算符:&、|、!、^、&&、||
&:有false则false
|:有true则true
!:true变false,false变true
^:相同false,不同true
&&:有false则false
||:有true则true
开发中常用:&&、||、!
&和 &&有什么区别
&(与):不管 & 连接符左边的条件表达式是true还是false,右边的表达式都会进行运算 。
&&(短路与):假如 && 连接符左边的条件表达式为false时,右边的表达式就不会再进行运算,可以提高效率。
|和 || 有什么区别
|(或):不管 | 连接符左边的条件表达式是true还是false,右边的表达式都会进行运算 。
||(短路或):假如 && 连接符左边的条件表达式为true时,右边的表达式就不会再进行运算,可以提高效率。
注意细节
a=a+20与a+=20的区别
a += 20;-----把左边和右边的和赋值给左边。
相当于【a = (a的数据类型)(a+20);】
比如:
a = a + 20;
a += 20;
虽然结果是等价的。但实质运算是不等价的。
因为+=这种运算符,内含了强制类型转换功能。
比如:
short s = 2;
s+=3;
//等价于
s = (short)(s+3);
++a与a++的区别
单独使用:在数据的前后,结果一致。
参与操作使用:
如果在数据的后边,数据先操作,在++/--
如果在数据的前边,数据先++/--,在操作。
int a = 0;
int b = a++;
System.out.println("a = " +a);//a = 1
System.out.println("b = " +b);//b = 0
//解释:
//1、先将a的值存到一个临时变量;
//2、然后a+1,赋值给实际的a;
//3、最后将临时变量中的a赋值给b。
int c = 0;
int d = ++c;
System.out.println("c = " +c);//c = 1
System.out.println("d = " +d);//d = 1
//解释:
//1、将c+1,赋值给c;
//2、 将被重新赋值的c,再赋值给d
位运算符
^ : 一个数据对同一个数据^两次,结果还是数据本身。
例如:a ^ b ^ b= a
【面试常见】两个数交换位置:可以用位运算符。
例如:
int a =10;int b = 20; 需要a和b的值对调。
做法:
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
这样即可将这两个数的值对调。
三目运算符
格式:条件表达式?表达式1:表达式2;
执行流程:
根据条件表达式返回的是true还是false,决定结果是什么。
如果是true,就把表达式1作为结果。
如果是false,就把表达式2作为结果。
进制之间的转换
(1)是一种进位的方式。X进制,表示逢x进1。
(2)Java中整数常量的表示
1:二进制 由0,1组成。以0b开头。JDK7以后的新特性。
2:八进制 由0-7组成。以0开头。
3:十进制 由0-9组成。默认就是十进制。
4:十六进制 由0-9,A-F(不区分大小写)组成,以0x开头。
(3)进制转换:
其他进制到十进制
系数:就是每一位上的数据。
基数:X进制,基数就是X。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数*基数的权次幂相加即可。
十进制转为其他进制的方法:
除基取余,直到商为0,余数反转。
运算符的优先级(从高到低)
优先级数值越小,优先级越高
如果在程序中,要改变运算顺序,可以使用()。
优先级 |
描述 |
运算符 |
1 |
括号 |
()、[] |
2 |
正负号 |
+、- |
3 |
自增自减,非 |
++、--、! |
4 |
乘除,取余 |
*、/、% |
5 |
加减 |
+、- |
6 |
移位运算 |
<<、>>、>>> |
7 |
大小关系 |
>、>=、<、<= |
8 |
相等关系 |
==、!= |
9 |
按位与 |
& |
10 |
按位异或 |
^ |
11 |
按位或 |
| |
12 |
逻辑与 |
&& |
13 |
逻辑或 |
|| |
14 |
条件运算 |
?: |
15 |
赋值运算 |
=、+=、-=、*=、/=、%= |
16 |
位赋值运算 |
&=、|=、<<=、>>=、>>>= |
控制语句
if语句
1、用于做判断使用的。
常见于对某个范围进行判断,或者几个变量进行判断,还有就是boolean表达式的判断。
--------------------------------------------------------------
2、格式(有三种):
A、第一种格式
if (条件表达式) {
// 语句体;
}
解释执行流程:
如果条件表达式为true,就执行语句体; 否则,什么都不执行。
B、第二种格式
if (条件表达式1) {
// 语句体1;
} else {
// 语句体2;
}
解释执行流程:
如果条件表达式为true,就执行语句体1;否则,就执行语句体2;
C、第三种格式
if (条件表达式1) {
// 语句体1;
} else if (条件表达式2) {
// 语句体2;
}
...
else {
// 语句体n;
}
解释执行流程:
如果条件表达式1为true,就执行语句体1;
如果条件表达式2为true,就执行语句体2;
...
否则,就执行语句体n;
--------------------------------------------------------------
3、注意事项
a、什么时候时候哪一种if语句。
第一种格式在判断条件为一种情况下使用。
第二种格式在判断条件为两种情况下使用。
第三种格式在判断条件为多种情况下使用。
b、每一种if语句其实都是一个整体,如果有地方执行了,其他的就不执行了。
c、如果if或者else里面控制的语句体是一条语句,是可以省略大括号的。
但是,如果是控制多条语句,就必须写上大括号。
建议:写上大括号。
d、大括号和分号一般不同时出现。
--------------------------------------------------------------
4、作用域
所有变量的定义只在它所属的大括号内有效。
Switch语句
1、格式:
switch(表达式) {
case 值1:
//语句体1;
break;
case 值2:
//语句体2;
break;
case 值3:
//语句体3;
break;
...
default:
//语句体n;
break;
}
A、针对格式的解释
switch:表示这里使用的是switch语句,后面跟的是选项。
表达式:byte,short,int,char,String,枚举
JDK1.5以后可以是枚举
JDK1.7以后可以是字符串
case:表示这里就是选项的值,它后面的值将来和表达式的值进行匹配。
case后面的值是不能够重复的。
break:结束语句
switch语句执行到这里,就结束了。
default:相当于if语句的else。
当所有的case和表达式都不匹配的时候,就走default的内容。一般不建议省略。
B、执行流程
进入switch语句后,就会根据表达式的值去找对应的case值。
如果最终没有找到,那么,就执行default的内容。
C、注意事项:
a、default整体可以省略吗? 可以,但是不建议。
b、default的位置可以放到前面吗? 可以,但是不建议。
c、break可以省略吗? 可以,但是不建议。
d、default在最后,break是可以省略的。
e、case后面的break可以省略,但是结果可能有问题。
f、switch语句什么时候结束呢? 遇到break或者执行到程序的末尾。
循环
循环基础知识
1、 如果我们发现有很多重复的内容的时候,就该考虑使用循环改进代码。 让我们代码看起来简洁了。
--------------------------------------------------------------
2、循环的组成
A:循环体,就是要做的事情。
B:初始化条件。一般定义的是一个初始变量
C:判断条件。用于控制循环的结束。
D:控制条件。用于控制变量的变化。一般都是一个++/--操作。
--------------------------------------------------------------
3、循环的分类:for循环、while循环以及do...while循环
A:for循环
for(初始化条件;判断条件;控制条件) {
循环体;
}
执行流程:
a:先执行初始化条件;
b:执行判断条件
c:根据判断条件的返回值
true:执行循环体。
false:就结束循环。
d:最后执行控制条件。返回到b继续。
----------------------------------------------------------
B:while语句
// 初始化条件;
while (判断条件) {
// 循环体;
// 控制条件;
}
执行流程:
a:先执行初始化条件;
b:执行判断条件
c:根据判断条件的返回值:
true:执行循环体。
false:就结束循环。
d:最后执行控制条件。返回到b继续。
----------------------------------------------------------
C:do...while(开发很少用)
// 初始化条件;
do {
// 循环体;
// 控制条件;
} while (判断条件);
执行流程:
a:先执行初始化条件;
b:执行循环体和控制条件;
c:执行判断条件
d:根据返回值
true:返回b。
false:就结束循环。
--------------------------------------------------------------注意:
一般使用for循环或者while循环。而且这两种循环是可以等价转换的。
do...while循环至少执行一次循环体。开发中一般不用
for循环一般用于知道循环次数,有范围值。
while循环一般用于循环次数不明确。
循环嵌套
1、在for循环嵌套中,
例如:
for (int x = 0; x < 10; x++) {
for (int y = 0; y < x; y++) {
// ...
}
}
结论:外循环控制行数,内循环控制列数
实例:
class Demo {
public static void main(String[] args) {
System.out.println("正三角形:");
// 正三角形
for (intx = 0; x < 5; x++) {
for (inty = 0; y <= x; y++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("------------------------");
// 倒三角形
System.out.println("倒三角形:");
for (intx = 0; x < 5; x++) {
for (inty = x; y < 5; y++) {
System.out.print("*");
}
System.out.println();
}
}
}
break和continue 的区别
1、我们需要对循环进行一些控制终止,这个时候,就出现了两个关键字: break和continue
--------------------------------------------------------------
2、特点:
A:它们都必须在循环中(break还可以在switch中)。 一般在循环的判断中。
B:如果单独使用break和continue,后面是不能有语句的。
--------------------------------------------------------------
3、区别:
A:break 结束当前循环。
B:continue 结束本次循环,进入下一次循环。