Java SE
Java基础知识
在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开头。
基本数据类型
*A:整数* 占用字节数
byte | 1
short | 2
int | 4
long | 8
*B:浮点数*
float | 4
double | 8
*C:字符*
char | 2
*D:布尔*
boolean | 1
-------------------------
ASCII码值
a | 97
A | 65
0 | 48
注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。
数据类型转换(掌握)
(1)boolean类型不参与转换
(2)默认转换
A:从小到大
B:byte,short,char -- int -- long -- float -- double
C:byte,short,char之间不相互转换,直接转成int类型参与运算。
(3)强制转换
A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型 变量名 = (目标数据类型) (被转换的数据);
运算符(掌握)
(1)算术运算符
1. A:+,-,*,/,%,++,--
2. B:+的用法
a:加法
b:正号
c:字符串连接符
3. C:/和%的区别
数据做除法操作的时候,/取得是商,%取得是余数
4. D:++和--的用法
a:他们的作用是自增或者自减
b:使用
单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;
(2)赋值运算符
5. A:=,+=,-=,*=,/=,%=等
B:=叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
(4)逻辑运算符
A:&,|,^,!,&&,||
B:逻辑运算符用于连接boolean类型的式子
C:结论
&:有false则false
|:有true则true
^:相同则false,不同则true。
情侣关系。
!:非true则false,非false则true
&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
(5)位运算符(了解)
A:^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
<<:左移 左边最高位丢弃,右边补齐0
<< 把<<左边的数据乘以2的移动次幂
>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
>> 把>>左边的数据除以2的移动次幂
>>>:无符号右移 无论最高位是0还是1,左边补齐0
B:面试题
a:请实现两个变量的交换
**采用第三方变量
**用位异或运算符
左边a,b,a
右边a^b
b:请用最有效率的方式计算出2乘以8的结果
2<<3
(6)三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
键盘录入
//导包
import java.util.Scanner
//创建录入对象
Scanner sc = new Scanner(System,in);
//获取录入
int x = sc.nextInt();
输出
System.out.println(x);
把HelloWorld案例写了一个带注释的版本
后面我们要写一个程序的过程。
需求:
分析:
实现:
代码体现:
面试题:
第一题
short s = 1;
s = s + 1;
short s = 1;
s += 1;
请问上面的代码哪个有问题?
答案:
第二个扩展运算符隐含了一个强制类型转换
s +=1
其实不是 s = s +1;
其实是 s = (s的数据类型) (s + 1);
A:下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;
B:下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
C:下面的操作结果是什么呢?
byte b = (byte)130;
D:字符参与运算
是查找ASCII里面的值
'a' 97
'A' 65
'0' 48
System.out.println('a');
System.out.println('a' + 1);
E:字符串参与运算
这里其实是字符串的连接
System.out.println("hello"+'a'+1);
System.out.println('a'+1+"hello");
System.out.println("5+5="+5+5);
System.out.println(5+5+"=5+5");
F: 00000000 00000000 00000000 00000011
~ 11111111 11111111 11111111 11111100取反(补码)
补码 11111111 11111111 11111111 11111100
反码 11111111 11111111 11111111 11111011
源码 10000000 00000000 00000000 00000100
输出 -4
G:交换两个数值,面试用(开发中少用)
a= a^b;
b=a^b;
a=a^b;
实现a和b交换
1:switch语句(掌握)
格式解释说明:
switch:说明这是switch语句。
表达式:可以是byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面的值就是要和表达式进行比较的值
break:表示程序到这里中断,跳出switch语句
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
return:跳出函数
面试题
switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
可以,不可以,JDK7以后可以
2:循环语句(掌握)
(1)有三种:for,while,do...while
(2)for循环语句
A:格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
(3)while循环
A:基本格式
while(判断条件语句) {
循环体语句;
}
(4)do…while循环
A:基本格式
do {
循环体语句;
}while(判断条件语句);
3:控制跳转语句(掌握)
(1)break:中断的意思
A:用在循环和switch语句中,离开此应用场景无意义。
B:作用
a:跳出单层循环
b:跳出多层循环,需要标签语句的配合
(2)continue:继续
A:用在循环中,离开此应用场景无意义。
(3)return:返回
A:用于结束方法的,后面还会在继续讲解和使用。
B:一旦遇到return,程序就不会在继续往后执行。
异常收集
数组操作的两个常见小问题:
ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
多态向下转型
ClassCastException:类型转换异常
原因:一般在多态的向下转型中容易出现
作用:请自己把所有的场景Exception结尾的问题总结一下。
以后遇到就记录下来。
现象,原因,解决方案。
你聪明有人会说你心机重,你靠的是努力有人会说你运气好,
你说自己天生乐观有人会说你虚假,有时候,你明明就是一杯白水,
却被人硬生生逼成了满肚子憋屈的碳酸饮料。人一生要遇见太多人,
即使有些话字字诛心,也没必要活在他们的眼神里,只要内心澄明,
就永远不用讨好一个不懂你的人。爱生活,爱Java。 -->来自黑马