Java | 基础 | 查漏补缺(一)

Java 9 REPL (JShell)

REPL(Read Eval Print Loop)意为交互式的编程环境
JShell 是 Java 9 新增的一个交互式的编程环境工具

Java 注释

Java 注释分三种:

  1. 单行注释:以 // 开头,之后的内容都会被注释掉
    // 这是一个单行注释
    
  2. 多行注释:以 /* 开头,以 */ 结尾,之间的内容都会被注释掉
    /*
     这是一个多行注释
     这是一个多行注释
     这是一个多行注释
     */
    
  3. JavaDoc注释:文档注释,以 /** 开头,以 */ 结尾,可以在之间写一些描述性的信息,帮助生成帮助文档
    /**
     * @author 作者
     * @version 版本
     * @since 最小 JDK 版本
     * @param 方法形参描述
     * @return 方法返回值描述
     * @exception 对方法可能抛出的异常进行描述(推荐描述 Runtime 异常)
     * @throws 对方法可能抛出的异常进行描述(推荐描述 非Runtime 异常)
     * @deprecated 不建议使用该方法
     */
    

一些有趣的代码注释可以搜索 有趣的代码注释

Java 是大小写敏感的

public class CaseSensitive {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("Java 是大小写敏感的:");
        String man = "Jack";
        String Man = "John";
        System.out.println("man: " + man);
        System.out.println("Man: " + Man);

        System.out.println("==================");
        String woman = "Rose";
        // String woman = "Mei";
        System.out.println("woman: " + woman);
    }
}

/* 输出如下:
 Java 是大小写敏感的:
 man: Jack
 Man: John
 ==================
 woman: Rose
 */

case sensitive

Java 数据类型

java data type

JDK 7 后,数字间可以用下划线 _ 分隔

jshell> int num1 = 123_456;
num1 ==> 123456

jshell> long num2 = 123_3454355_345L;
num2 ==> 1233454355345

jshell> byte num3 = 1_20;
num3 ==> 120

jshell> float num4 = 123_63724_2.24F;
num4 ==> 1.2363724E8

jshell> double num5 = 12_34.45;
num5 ==> 1234.45

整数扩展

  • 十进制表示: 正常表示
    int num = 10;
    // num ==> 10
    
  • 二进制表示: 二进制0b 开头,后面跟二进制数
    int num = 0b10;
    // num ==> 2
    
  • 八进制表示: 八进制0 开头,后面跟八进制数
    int num = 010;
    // num ==> 8
    
  • 十六进制表示: 十六进制0x 开头,后面跟十六进制数
    int num = 0x10;
    // num ==> 16
    

浮点数扩展

浮点数存在精度问题,最好尽量避免使用浮点数进行比较!

jshell> float num1 = 0.1F;
num1 ==> 0.1

jshell> double num2 = 1.0 / 10;
num2 ==> 0.1

jshell> num1 == num2
$21 ==> false

在涉及银行或其它对精度要求特别高的业务时,使用 BigDecimal(大数处理工具类) 进行处理。

数据类型转换

低 ---------------------------------------------- 高
byte, short, char -> int -> long -> float -> double       小数优先级 > 整数优先级
  • 低级数据高级数据 ==> 自动转换

  • 高级数据低技数据 ==> 强制转换(通过在变量前加 (目的类型) 实现)

    public class TypeCast {
          
          
        public static void main(String[] args) {
          
          
            System.out.println("低 -> 高");
            byte num1 = 120;
            int num2 = num1;
            System.out.println(num1);
            System.out.println(num2);
    
            System.out.println("高 -> 低");
            long num3 = 233L;
            int num4 = (int) num3; // 强制转换
            System.out.println(num3);
            System.out.println(num4);
    
            System.out.println("低 -> 高 & 整数 -> 浮点数");
            long num5 = 12345678L;
            float num6 = num5;
            System.out.println(num5);
            System.out.println(num6);
    
            System.out.println("高 -> 低 & 浮点数 -> 整数");
            float num7 = 1234.567F;
            long num8 = (long) num7; // 强制转换
            System.out.println(num7);
            System.out.println(num8);
        }
    }
    
  • 不能对 boolean 类型数据进行类型转换。
    can not cst boolean

  • 类型转换时可能会存在内存溢出或精度丢失等问题。

    public class TypeCast {
          
          
        public static void main(String[] args) {
          
          
            System.out.println("高 -> 低 & 内存溢出");
            int num9 = 128;
            System.out.println(num9);
            System.out.println((byte) num9);
    
            System.out.println("高 -> 低 & 精度问题");
            System.out.println((int) 23.45);
            System.out.println((int) -23.4556F);
        }
    }
    
    /* 输出如下:
     高 -> 低 & 内存溢出
     128
     -128
     高 -> 低 & 精度问题
     23
     -23
     */
    
  • char 类型和 int 类型的互相赋值

    • 0 ~ 65535 范围内,charint 类型可以互相赋值
    • 若显示定义 int 变量后,转换为 char强制转换
      public class Char2Int {
              
              
      	public static void main(String[] args) {
              
              
      		char a1 = 'a';
      		int a2 = 'a';
      		System.out.println(a1);
      		System.out.println(a2);
      		
      		int A1 = 65;
      		char A2 = 65;
      		System.out.println(A1);
      		System.out.println(A2);
      		
      		char B1 = 'B';
      		int B2 = B1;
      		System.out.println(B1);
      		System.out.println(B2);
      		
      		int b1 = 98;
      		char b2 = (char) b1;
      		System.out.println(b1);
      		System.out.println(b2);
      	}
      }
      
      /* 输出如下:
       a
       97
       65
       A
       B
       66
       98
       b
      */
      

变量

变量三要素

  • 变量类型
  • 变量名
  • 变量值

变量声明(并赋值)

变量类型 变量名 = 变量值;
  • Java 中可以一行声明多个变量(但不推荐一行声明多个变量)
    int a = 1, b = 2, c = 3;
    
    a ==> 1
    b ==> 2
    c ==> 3
    
    int a, b, c;
    
    a ==> 0
    b ==> 0
    c ==> 0
    

按照作用域划分,Java 中有 3 种变量

  • 类变量: 独立于方法之外的变量,用 static 修饰,再用 final 修饰的话就是常量 (修饰符间没有顺序,谁前谁后都可以)。
  • 实例变量: 可以不初始化,实例创建时,会自动将实例变量初始化为所属类型的默认值(数字 ⇒ 0, boolean ⇒ false引用类型 ⇒ null)。
  • 局部变量: 使用前必须声明和初始化值
public class Variable{
    
    
    static final String ZHANG_SAN = "zhangsan";
    static int allClicks = 0; // 类变量

    String str = "Hello, World"; // 实例变量

    public static void main(String[] args) {
    
    
        int num = 0; // 局部变量
        System.out.println(num);
        System.out.println(ZHANG_SAN);
    }
}

运算符

自动升型

在运算中,运算结果类型会自动升为混合运算中类型最高的类型

jshell> Integer.MAX_VALUE
$1 ==> 2147483647

jshell> Integer.MAX_VALUE + 1
$2 ==> -2147483648

jshell> Integer.MAX_VALUE + 1L
$3 ==> 2147483648

jshell> 1 + 1.0
$4 ==> 2.0

instanceof

instanceof 用于判断一个对象是否属于指定的类型

class Human {
    
    }
class Man extends Human {
    
    }

public class InstanceOf {
    
    
    public static void main(String[] args) {
    
    
        Human human = new Human();
        Man man = new Man();
        System.out.println(man instanceof Man);
        System.out.println(man instanceof Human);
        System.out.println(man instanceof Object);
        System.out.println(human instanceof Object);
    }
}

逻辑运算符 | 短路运算

短路运算:

false && [Any...] // 后面没有执行
true || [Any...] // 后面没有执行
public class ShortOutOperation {
    
    
    public static void main(String[] args) {
    
    
        int c = 5;
        boolean n = (c < 4) && (c++ > 5); // c < 4 为 false, 如果执行了后面,c 必然变成 6
        System.out.println(n);
        System.out.println(c);

        int d = 5;
        boolean m = (d > 4) || (d-- == 4); // d > 4 为 true, 如果执行了后面,d 必然变成 4
        System.out.println(m);
        System.out.println(d);
    }
}

/* 输出如下:
 false
 5
 true
 5
 */

位运算

  • &: 与
  • |: 或
  • ~: 非
  • ^: 异或
    • ⇒ 相同为0,不同为1
    • ⇒ 可以理解为 : 相异为1(true),不相异为0(false)
    • 二进制加法: 0+0=0,0+1=1
  • <<: 左移 ⇒ *22 << 2 ⇒ 23 = 8
  • >>: 右移 ⇒ /28 >> 23√8 = 2

字符串连接 +

只要 + 两边任一边有字符串,就会进行连接。

jshell> "" + 10 + 20
$1 ==> "1020"

jshell> 10 + "" + 20
$2 ==> "1020"

jshell> 10 + 20 + ""
$3 ==> "30"

运算符优先级

不要刻意记忆,不确定的用括号 () 包起来

参考资料

猜你喜欢

转载自blog.csdn.net/qq_37164975/article/details/108428829