Java的基础语法,面试题

Java的基础语法

  • 注释

    • 介绍:平时我们写代码时,如果代码量较少,我们还可以看懂有印象。但是当项目结构一旦复杂起来,我们就需要用到注释了。

    • 注释不会被执行,是给我们写代码的人看的。

    • 种类

      1. 单行注释

            //单行注释
          public class xiwen {
              public static void main(String[] args) {
                  //单行注释
                  System.out.println("强大自己,是解决问题的唯一办法!");
              }
          }
        
      2. 多行注释

        //多行注释   /*中间是文字*/
        public class Hello {
            public static void main(String[] args) {
                /*
                1
                1
                1
                1
                1
                1
                
                 */
                String xiwen = "Hello, World";
                System.out.println(xiwen);
            }
        }
        
        

        TIPS:单行注释只能注释一行文字,多行注释可以注释一段文本。

      3. 文档注释

          //JavaDoc:文档注释   /**   */
                /**
                 * NIHA
                 * A
                 * B
                 * C
                 * 
                 */
        

        主要学习单行和多行注释,文档注释一般大公司才会用到。

        BAT
        B:百度
        A:阿里
        T:腾讯
        

        有趣的代码注释,可以陶冶情操。

书写注释是一个非常好的习惯! 请务必坚持下去!

  • 标识符

    • 关键字
      • 常见关键字

    Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

    • 标识符注意点

      • 所有的标识符都应以字母(A-Z或者a-z),美元符(¥)、,或者下划线(_)开始

      • 首字符之后可以是字母(A-Z或者a-z),美元符(¥)、,或者下划线(_)或狮子的任何字符组合

      • 不能使用关键字作为变量名或方法名

      • 标识符是大小写敏感的

      • 合法标识符距举例:age、$salary、_value、__1_value

      • 非法标识符距离:12bc、-age、#bca

        可以使用中文命名,但是一般不建议这样去使用,也不建议去使用拼音,太Low

      public class demo1 {
          public static void main(String[] args) {
              String 英雄联盟 = "荣耀黄金";
              System.out.println(英雄联盟);
              //大小写十分敏感
              String Ahello = "xiwen";
              String ahello = "xiwen";
              //String 1hello = "xiwen";
              //String 1Ahello = "xiwen";
              //String #hello = "xiwen";
              //String class = "xiwen";
      
    • 数据类型

      • 强类型语言

        • 要求变量的使用严格符合规定,所有变量必须先定义才能使用
        • java、.NET、C/C++
      • 弱类型语言

        • 相较于强类型语言的规定和要求较为宽松。
        • vb,php,JavaScript
      • Java的数据类型分为两大类

        • 基本数据类型(primitive type)
        • 引用数据类型(reference type)

      八大基本数据类型

      public class demo2 {
          public static void main(String[] args) {
              //八大基本数据类型
              //整数
      
              int num1 = 10;//最常用
              byte num2 = 20;
              short num3 = 30;
              long num4 = 30L;//long类型要在数字后面加个l
      
              //浮点数:小数
              float num5 = 50.1f;//float类型要在数字后面加个f
              double num6 = 3.1415926d;
      
              //字符类型
              char name = 'a';
              //字符串,String不是关键字,是类
              String namea = "希文";
      
              //布尔值
              boolean flag = false;
              System.out.println(num1);
              System.out.println(namea);
              System.out.println(num2);
              System.out.println(num3);
              System.out.println(num4);
              System.out.println(num5);
              System.out.println(num5);
              System.out.println(num6);
      
          }
      }
      

      数据类型扩展及面试题讲解

      public class demo3 {
          public static void main(String[] args) {
              String Xiwen = "范希文";
              System.out.println(Xiwen);
              System.out.println("==========================");
              //整数拓展    进制   二进制0b  十进制  八进制0  十六进制0x
      
              int i = 10;   //十进制
              int i2 = 010; //八进制0
              int i3 = 0x10; //十六进制0x   0-9 A-F 15
              int i4 = 0b111000;
              System.out.println(i);
              System.out.println(i2);
              System.out.println(i3);
              System.out.println(i4);
              System.out.println("==========================");
      
      
              //浮点数扩展? 银行业务怎么表示?钱
              //BigDecimal  数学工具类
              //==========================
              //float  有限 离散 舍入误差 大约  接近但不等于
              //double
              //最好完全避免使用浮点数进行比较!!
              //最好完全避免使用浮点数进行比较!!
              //最好完全避免使用浮点数进行比较!!
      
      
              float f = 0.1f; //0.1
              double d = 1.0/10; //0.1
      
              System.out.println(f==d); //false
      
              float d1 = 223232323223f;
              float d2 = d1+1;
              System.out.println(d1==d2); //true
              System.out.println("==========================");
      
      
              //字符拓展
      
              char c1 = 'a';
      
              char c2 = '文';
      
              System.out.println(c1);
      
              System.out.println((int)c1); //强制执行
      
              System.out.println(c2);
      
              System.out.println((int)c2); //强制执行
      
              //所有的字符本质还是数字
              //编码 Unicode→2字节  表:(97=a 65=A)   最多可表示65536个字符  Excel 也是65536
              // U000 到 UFFFF
      
              System.out.println("==========================");
              char c3 = '\u0061';
              System.out.println(c3); //a
              System.out.println("==========================");
              char c4 = '\u8303';
              char c5 = '\u5E0C';
              char c6 = '\u6587';
              System.out.println(c4); //范
              System.out.println(c5); //希
              System.out.println(c6); //文
      
      
              System.out.println("==========================");
              String str = "\u8303\u5E0C\u6587";
              System.out.println(str); //范希文
              System.out.println("==========================");
      
      
              //转义字符
             /*
               \n:换行符
               \t:水平制表符(Tab)
             //补充
               \":双引号
               \':单引号
               \\:反斜杠
              */
      
              System.out.println("Hello\'World");
              System.out.println("==========================");
      
      
              //思考题
              String sa = new String("hello world");
              String sb = new String("hello world");
              System.out.println(sa==sb);
      
              String sc = "hello world";
              String sd = "hello world";
              System.out.println(sc==sd);
      
              //开始解答这个思考题。解答这个思考题之前,我们需要了解清楚两个概念。
              //当我们创建字符串对象时,有两种方式:
      
              //1.使用 new 关键字显式地创建一个新的字符串对象。例如:String sa = new String("hello world");
              //2.使用字符串字面量直接赋值给字符串变量。       例如:String sc = "hello world";
      
              /*这两种方式在内存中的处理方式是不同的。
      
              对于使用 new 关键字创建的字符串对象,它们会被放在堆内存中的不同的内存地址上,即使内容相同也是如此。
              因此,即使两个使用 new 关键字创建的字符串对象的内容相同,它们的引用地址也会不同。
              所以,sa 和 sb 的引用地址是不同的。
               */
              /*对于使用字符串字面量直接赋值的方式,Java会将字符串字面量放入字符串常量池中。
              当你创建一个新的字符串对象时,Java会首先检查字符串常量池中是否已经存在相同内容的字符串对象。
              如果存在,就直接返回字符串常量池中的对象的引用,而不会创建新的对象。
              因此,对于相同内容的字符串字面量,它们会在字符串常量池中共享同一个对象。所以,sc 和 sd 的引用地址是相同的。
               */
              //那么如何解决这个问题呢?
              //因此,当你使用 == 运算符来比较字符串引用时,它比较的是两个字符串引用的地址。
              //如果你想比较字符串的内容是否相同,应该使用 equals() 方法来进行比较。
              // 即为:
             /*
              String sa = new String("hello world");
              String sb = new String("hello world");
              System.out.println(sa.equals(sb));
             */
              结果就是true,成功了!
      
              //后面会学到
              // tips:对象,从内存分析
      
      
              //布尔值扩展
              boolean flag = true;
              if (flag==true){}//新手
              if (flag){}//老手,效果是一样的
      
              //Less is More! 代码要精简易读!
      
              
              //从此感觉Java并不简单。知识点如此简单,以上面试题是如此烧脑。
      
          }
      }
      
      

      这个思考题需要单独拉出来说说,必须理解了,才能真正学到东西。

      思考题

      1.String sa = new String("hello world");
              String sb = new String("hello world");
              System.out.println(sa==sb);
      
      2.String sc = "hello world";
        String sd = "hello world";
        System.out.println(sc==sd);
      

      1的输出结果为:false,2的输出结果为true。

      开始分析

      • 理论铺垫当我们创建字符串对象时,有两种方式:

        • 使用 new 关键字显式地创建一个新的字符串对象。例如:String sa = new String("hello world");

        • 使用字符串字面量直接赋值给字符串变量。 例如:String sc = "hello world";

          String sa = new String("hello world");
          String sc = "hello world";
          
      • 底层逻辑这两种方式在内存中的处理方式是不同的

        • 对于使用 new 关键字创建的字符串对象,它们会被放在堆内存中的不同的内存地址上,即使内容相同也是如此。
          因此,即使两个使用 new 关键字创建的字符串对象的内容相同,它们的引用地址也会不同所以,sa 和 sb 的引用地址是不同的。

        • 对于使用字符串字面量直接赋值的方式,Java会将字符串字面量放入字符串常量池中。当你创建一个新的字符串对象时,Java会首先检查字符串常量池中是否已经存在相同内容的字符串对象如果存在,就直接返回字符串常量池中的对象的引用,而不会创建新的对象。因此,对于相同内容的字符串字面量,它们会在字符串常量池中共享同一个对象所以,sc 和 sd 的引用地址是相同的。

      • 解决方案:当你使用 == 运算符比较字符串引用时,它比较的是两个字符串引用的地址
        如果你想比较字符串的内容是否相同,应该使用 equals() 方法来进行比较

        • String sa = new String("hello world");
          String sb = new String("hello world");
          System.out.println(sa.equals(sb));
          

      输出结果为True,成功了!

      理解到这里,我感觉还是有点抽象费解。

      我便想了一个例子,我感觉遇到抽象的不好理解的东西,具象化是一个很好的方法。

      上面是两款iphone15,最新款的,哈哈。基本上一模一样吧。

      接下来我来说一下我的思路和看法。

      大体想法:

      上面两款iphone15,它们两个相同吗?相同就是true,不同就是false。true还是false?可能有人说true,也有人说false。那么我感觉取决于你的判断标准。

      第一种:
      • 外观
      • 参数
      • 大小
      • ......
      那么很显然,结果就是它们两个是相同的。也就是true!
      第二种:
      • 序列号。
      那就很显然易见了,苹果手机的序列号我感觉不亚于IP地址。那么结果就是它们两个是不同的。也就是false。
              String sa = new String("hello world");
              String sc = "hello world";
      

      判断iphone15是否相同的两种不同判断标准创建字符串的两种方式

      宇宙免责条例:只是我自己的见解,为了更好的理解。

      补充知识

      • 字节

        • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。

        • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。

        • 1B(byte,字节)=8bit(位)

        • 字符:是指计算机中使用的字母、数字、字和符号

      • 转换

        • 1bit表示一位

        • 1Byte表示一个字节 1B=8b

        • 1024B=1KB

        • 1024KB=1M

        • 1024M=1G

          TIPS:一个英文字母为8位,即1个字节;一个汉字为16位,即2个字节。
          

      简单区分一下32位和64位操作系统的区别

      1. 32位的cpu处理器,只能安装32位的电脑操作系统;
      2. 64位的cpu处理器,则可以安装32位和64位操作系统,所以64位处理器是向下兼容的;
      3. 但是,如果真的在64位处理器的电脑上面安装32位操作系统,那么会导致处理器的性能无法充分发挥。
posted @ 2024-05-20 23:05  Xi-wen  阅读(9)  评论(0)    收藏  举报