一起巩固Java基础知识(1)

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方面的技术,欢迎关注!

你可能感兴趣的:(一起巩固Java基础知识(1))