JAVA基础知识
第一阶段JAVASE DAY2
文章目录
1.关键字
关键字是JAVA预定义好的
-
由小写字母组成
-
不能用于标识符
-
目前有50个关键字,const,goto定义删除了,因为其他语言有,所以保留关键字
2.标识符
给包、类、变量、方法、常量起名字
2.1标识符的命名规则
- 见名知意,用英文命名,可以缩写但要合理缩写
- 大小写区分
- 由字母 、数字 、_ 、$ 组成
- 不能用数字开头
- 不能用关键字命名
2.2开发中常用的命名规则
**包:**用公司域名反着写 eg:com.baidu.Test
类: 所有单词首字母大写
接口: I + 所有单词首字母大写
接口实现类: 所有单词首字母大写 + Impl
抽象类: Abs + 所有单词字母大写
变量: 第一个单词首字母小写,其余单词首字母大写
方法: 第一个单词首字母小写,其余单词首字母大写(开头用动词)
常量: 单词所有字母大写,用”_“分开 eg:XXX_XXX
3.注释
概念:注释是对代码进行解释,编译器不对注释进行编译
3.1注释的好处
-
提高代码的可读性
-
便于项目交接
-
用于调试
4.常量
4.1常量分类
-
整数常量
进制转换(了解)
二进制:由0b开头,0 1组成;
八进制:由0开头,0-7组成;
十进制:系统默认十进制;
十六进制:由0x开头,0-9,A-F组成;
-
小数常量
double型:0.25D
float型:0.25F
-
布尔常量
只有ture false
-
字符常
-
字符串常量
-
null常量
-
自定义常量
5.变量
JAVA是强类型语言,每一种数据都提供相应的数据类型。 eg:int short long …
JavaScript是弱类型语言,只有一种数据类型声明 " var ",浏览器不适用强类型,容易报错崩溃
5.1数据类型分类
整数类型 | 字节数 | 取值范围 |
---|---|---|
byte | 1 | -128 ~ 127 |
short | 2 | -32768 ~ 32767 |
int | 4 | -2^31 ~ 2^31 |
long | 8 | -2^63 ~ 2^63 |
浮点数类型(小数类型) | ||
float | 4 | -3.403E38 ~ 3.403E38 |
double | 8 | -1.798E308~1.798E308 |
布尔类型 | ||
boolean | 1 | ture/false |
字符类型 | ||
char | 2 | 0 ~ 65535 |
引用数据类型 | 类 接口 数组 |
字符:97:a ; 48:0 ; 65:A
同样是4/8字节为什么浮点型的数据范围更大?
- 因为小数和整数的存储方式不一样
5.2————————面试题
-
String是基本数据类型吗?
不是,引用数据类型
-
说一说Java的数据类型
八大基本数据类型:byte short int long float double char boolean;
引用数据类型:类 接口 数组;
-
.数组是什么类型?
引用数据类型
6.数据类型转换
数据类型转换依据取值范围 : byte > short > int > long > float > doubule ; char和byte short是交集
6.1数据转换的9种情况
-
自动类型转换
将小类型的数据转换成大类型数据,系统会自动转换
double d = 2.5f; System.out.println(d); //小类型数据转换大类型数据不会报错
-
强制类型转换
将大类型的数据转换成小类型的数据,会编译报错
解决办法: 强制类型转换//系统默认是double数据类型,所以大数据类型转小数据会报错 float f = 2.5; System.out.println(f); //解决方案:强制类型转换; float f = (float)2.5; System.out.println(f); //精度丢失 int i = (int)2.5; System.out.println(i); // 数据溢出 byte是循环的,当超出数据范围就去到另一端 byte by = (byte)130; System.out.println(by); // -128 -127 -126
-
byte/short/char特例
不需要强制转换的情形
byte by2 = 35;// 编译器发现35正好在byte的范围之内,所以特殊情况,允许通过编译 System.out.println(by2); short s = 32767; System.out.println(s); char ch = 65; // 97正好在char的范围之内0~65535 System.out.println(ch);
-
byte/short 和 char 参与转换,都需要强制类型转换
因为byte和char,short和char的数据范围是交集,所以没办法判断数据类型大小
byte by3 = 97; char ch2 = (char)by3; System.out.println(ch2); char ch3 = 'A'; byte by4 = (byte)ch3; System.out.println(by4);
-
表达式类型提升
当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换float f2 = 2.5f; int i1 = 10; int i2 = (int)(i1 + f2);//因为是float数据类型,所以需要强制转换为int类型 System.out.println(i2);
-
当byte short char 之间参与运算的时候,底层都会转换成int类型来计算
byte by5 = 10; short ss = 20; short ss2 = (short)(by5 + ss); System.out.println(ss2);
-
boolean类型不能够参与运算和转换
-
字符串在参与运算中的转换问题,字符串相加是拼接操作
String str = "abc"; str = str + 1; System.out.println(str); System.out.println(2 + 2 + "222" + 2 + 2); // 结果是:422222
-
变量计算和常量计算问题
变量相加,系统无法判断具体的结果
常量相加,在编译时期,系统就会运算结果char ch4 = 'a'; byte by6 = 1; char ch5 = ch4 + by6; System.out.println(ch5); //报错,是变量相加 char ch4 = 'a'; byte by6 = 1; char ch5 = 'a' + 1; System.out.println(ch5); //通过,常量相加在编译系统已经计算出运算结果
7.运算符
7.1技巧:分离各位数字
数字:1234
分离个位: 1234 / 1 % 10
分离十位: 1234 / 10 % 10
分离百位: 1234 / 100 % 10
分离千位: 1234 / 1000 % 10
7.2自增自减运算符 ”++ --“
参与运算时,指的是当前的运算,而不是整个计算式
7.2.1————————面试题
int i = 5;
int i1 = (i++) + (++i) * (i--);
//问i1等于多少?
//虽然先乘法再加法,但i++的判断不会有影响,从左往右
//第一步:5 + (++i) * (i--) ; i = 6
//第二步:5 + 7 * 7 ; i =6 -> i = 7 -> i = 6
//结果是:54
7.3赋值运算符
赋值运算符:= ; 扩展扩展赋值运算符:+= -= *= /= %= ;
7.3.1————————面试题
-
short s1 = 1; s1 = s1 + 1;有什么错?
-
short s1 = 1; s1 += 1;有什么错??
答案:
1.报错,因为数据类型是int,大类型数据转小类型数据需要强制转换
2.不报错,因为扩展赋值运算符系统会自动强制转换数据类型,所以类型已经是short了
7.4技巧:交换两个数的两种方法
//1.定义中间变量temp
int x = 10;
int y = 20;
int temp = x;
int x = y;
int y = temp;
//2.使用异或来进行交换两个数的位置
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;// (a ^ b) ^ b ;
a = a ^ b;// (a ^ b) ^ a ;(b已经等于了)
//一个数值对另一个数值进行两次异或,那么数值本身不做任何改变。
7.5逻辑运算符
- &:按位与
- |:按位或
- ^:异或(相同为false,不同为true
- &&:短路与
- ||:短路或
- !:非
7.5.1————————面试题
& 和 && 的区别?
答案:
&在所有时候都会计算运算符两边的的式子
&&有短路功能,当运算符左边的式子为false,则终止运算。
eg:下列代码是否报错?
int a = 10;
int b = 20;
System.out.println(a > b && (10 / 0) == 0);
//不报错,因为a > b,为false,发生短路,后面的式子(10 / 0)不进行计算
" | " 和 " || " 的区别?
答案:
| : 在所有时候都会计算运算符两边的的式子
|| : 有短路功能,当运算符左边的式子为true,则终止运算。
7.6条件运算符(三目运算符)
格式:X ? Y : Z ;
当X为true,则表达式结果为Y ; 当X为false,则表达式结果为Z。
7.7运算符的优先级
- 算数运算符(* / % > + - ) > 关系运算符 (> < … > == != ) > 逻辑运算符(& && | || ^) > 条件运算符(三目运算符) > 赋值运算符
- 一目运算符 > 二目运算符 > 三目运算符
- 括号内的优先
- 优先级相同,从左往右