美文网首页
一起巩固Java基础知识(1)

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

作者: 付凯强 | 来源:发表于2018-04-06 23:28 被阅读0次

    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)

          本文链接:https://www.haomeiwen.com/subject/tolehftx.html