1. 前言
- 如果你的Java基础不牢固,或者已经已经忘记了一部分,可以看看下面的重点内容,希望看完能让的Java基础掌握得更牢固。
2. 常量
- 字符串常量 —— "abc"
- 整数常量 —— 123
- 小数常量 —— 1.23
- 布尔常量 —— true和false
- 空常量 —— null
- 字符常量 —— 'a' 'b' 'c'("10"不对)
3. 进制
- 进制就是一种进位方法:比如8进制就是逢8进1。
- 一周有7天,七进制;一年有12个月,十二进制。
- 星星和月亮的关系,太阳和皇冠的关系:四进制(QQ等级)。
4. 换算
- 1个开关代表
- 1byte = 8bit
- 1k = 1024b
- 1m = 1024k
- 1g = 1024m
- 1t = 1024g
- 举例:500G的电脑显示在电脑上是多少G?
500G = 500*1000*1000*1000/1024/1024/1024 = 465G
- 说明:供应商按照1000换算,计算机按照1024换算。
5. 进制的表现形式
- 二进制
二进制由0和1组成。以0b开头。例如:0b100 十进制等于 4
- 八进制
由0,1,...7组成。以0开头。例如:0100 十进制等于 64
- 十六进制
由0,1,2...9,a,b,c,d,e组成。以0x开头。例如:0x100 十进制等于 265
- 十进制
由0,1,2,...9开头.整数默认是十进制的,例如:100
- 快速计算方式
二进制:0b100:1代表1,0代表2,一个1两个0代表1*2*2
八进制:0100:1代表1,0代表8,一个1两个0代表1*8*8
十六进制:0x100:1代表1,0代表16,一个1两个0代表1*16*16
6. 十进制转十进制的转换
12345 = 10000 + 2000 + 300 + 40 + 5
= 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0
结论:任意进制转十进制的方法:系数 * 基数 的 权次幂 相加即可。
系数:就是每一位上的数据。
基数:X进制,基础就是X。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
7. 二进制转十进制的转换
0b100 = 1 * 2 ^ 2 + 0 * 2 ^ 1 + 0 * 2 ^ 0 = 4 ;
8. 八进制转十进制的转换
0100 = 1 * 8 ^ 2 + 0 * 8 ^ 1 + 0 * 8 ^ 0 = 64;
9. 十六进制转十进制的转换
0x100 = 1 * 16 * 2 + 0 * 16 * 1 + 0 * 16 * 0 = 256;
10. 十进制转十进制
12345 :
12345/10 = 1234.....5
1234/10 = 123.......4
123/10 = 12.........3
12/10 = 1...........2
1/10 = 0............1
结果:12345
结论:十进制转任意进制:除基倒取余。基:基数:X进制,基础就是X。
11. 十进制转二进制
60 :
60/2 = 30......0
30/2 = 15......0
15/2 = 7.......1
7/2 = 3........1
3/2 = 1........1
1/2 = 0........1
结果:111100
12. 十进制转八进制
60 :
60/8 = 7......4
7/8 = 0......7
结果:74
13. 十进制转十六进制
60 :
60/16 = 3.....12
3/16 = 0......3
结果:312 A:10 B:11 C:12 D:13 E:15 3C
14. 二进制转任意进制(8421码快速转换法)
11111111 :
1 1 1 1 1 1 1 1 对应的值为
128 64 32 16 8 4 2 1
记住对应的值可快速转换为任意进制:
①:111100 转换为八进制(3个比特位):
111 100
4+2+1 4
7 4
结果:74
②:111100 转换为十六进制(4个比特位):
0011 1100
2+1 8+4
3 12
3 C
结果:3C
15. 十进制快速转二进制(8421码快速转换法)
11111111 :
1 1 1 1 1 1 1 1 对应的值为
128 64 32 16 8 4 2 1
栗:60
60比128小 得 0
60比64小 得 0
60比32大 得 1 60-32 = 28
28比16大 得 1 28-16 = 12
12比8大 得 1 12-8 = 4
4和4相等 得 1 4-4 = 0
0比2小 得 0 0-2 = -2
-2比1小 得 0 结束
结果:00111100 即:111100
16. 基本数据类型(4类8种)
- 整数型:
1. byte 1个字节 -128到127
2. short 2个字节
3. int 4个字节
4. long 8个字节
- 浮点型:
5. float 2个字节
6. double 4个字节
- 字符型:
7. char 2个字节
- 布尔型:
8. boolean 1/8个字节
17. 面试题之变量相加和常量相加的区别
①:问:看下面的程序是否有问题,如果有问题,请指出并说明理由
byte a = 1;
byte b = 2;
byte c = a + b;
答:从两方面去回答这个题:
1. b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值,相加有可能会超出byte的取值范围。
2. byte类型的变量在进行运算的时候,会自动类型提升为int类型。
②:问:byte c = 1 +2 为什么可以?
答: 1和2都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了
18. 面试题之float(4个字节)与long(8个字节)谁大谁小
byte,short,char -- int -- long -- float -- double
byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
所以float比long大。(再细就不用深究了)
19. 字符和字符串参与运算
System.out.println('a'); 97
System.out.println('a'+1); 98
ASCII码表:记住三个值:'0' 48 ;'A' 65;'a' 97
* System.out.println("hello"+'a'+1); helloa1
* System.out.println('a'+1+"hello"); 98hello
任何数据类型用+与字符串相连接都会产生新的字符串
20. 面试题之Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节
21. 关于算术运算符%
1. 当左边的绝对值小于右边绝对值时,结果是左边
2. 当左边的绝对值等于右边或是右边的倍数时,结果是0
3. 当左边的绝对值大于右边绝对值时,结果是余数
4. %运算符结果的符号只和左边有关系,与右边无关
5. 任何一个正整数%2结果不是0就是1,可以用来当作切换条件
22. 算术运算符++和--
1. a:单独使用:
放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
2. b:参与运算使用:
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
请分别计算出a,b,c的值?
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
结果:
a = 9
b = 10
c = 8
23. 逻辑运算符&,|,^,!
* &逻辑与:有false则false。
* |逻辑或:有true则true。
* ^逻辑异或:相同为false,不同为true。
* !逻辑非:非false则true,非true则false。
* 特点:偶数个不改变本身。
24. 逻辑运算符&&和&
* 相同:最终结果一样。
* 不同:
&&具有短路效果。左边是false,右边不执行。
&是无论左边是false还是true,右边都会执行
25. switch的表达式都可以是哪些数据类型
基本数据类型:byte short char int
引用数据类型:枚举(JDK1.5开始)、String(JDK1.7开始)
26. 实现键盘录入三个整数,取最大值
public class test01 {
public static void main(String[] s) {
Scanner scanner = new Scanner(System.in); //创建键盘录入对象
System.out.println("请输入第一个整数:");
int a = scanner.nextInt(); //将键盘存储的数据存储在x中
System.out.println("请输入第二个整数:");
int b = scanner.nextInt(); //将键盘存储的数据存储在y中
System.out.println("请输入第三个整数:");
int c = scanner.nextInt(); //将键盘存储的数据存储在y中
int temp = a > b ? a : b;
int max = temp > c ? temp : c;
System.out.println("三个整数中的较大值是:" + max);
}
}
请输入第一个整数:
10
请输入第二个整数:
15
请输入第三个整数:
52
三个整数中的较大值是:52
27. 选择结构switch语句练习
int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
y = 4; 遇见第一个break就跳出
28. 求所有的水仙花数
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
for (int i = 100; i < 1000; i++) {
int a = i / 100;
int b = (i / 10) % 10;
int c = i % 10;
if ((a * a * a + b * b * b + c * c * c) == i) {
System.out.println(i);
}
}
29. 求1-100之和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
30. 请输出一个4行5列的星星(*)图案
*****
*****
*****
*****
public class test01 {
public static void main(String[] s) {
for (int a = 1; a < 5; a++) {
for (int b = 1; b < 6; b++){
System.out.print("*");
}
System.out.print("\r\n");
}
}
}
31. 输出正三角形
*
**
***
****
*****
public class test01 {
public static void main(String[] s) {
int i = 1;
for (int a = 1; a < 6; a++) {
for (int b = 1; b <= a; b++) {
System.out.print("*");
}
System.out.print("\r\n");
}
}
}
32. 输出九九乘法表
for (int a = 1; a <= 9; a++) {
for (int b = 1; b <= a; b++) {
System.out.print(a + "*" + b + "=" + a * b + " ");
}
System.out.print("\r\n");
}
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
33. return、break、continue区别
return是结束方法
break是跳出循环
continue是终止本次循环继续下次循环
34. 后续
如果大家喜欢这篇文章,欢迎点赞;如果想看更多前端移动端后端Java或Python方面的技术,欢迎关注!