Hello World!

helloJava.java

  1. public class HelloJava {
  2. public static void main(String[] args) {
  3. System.out.println("Hello, world! Hello, Java!");
  4. }
  5. }

Java 文件名务必要与其内容中的类目完全相同,否则会编译报错。

编译:javac

  1. javac fileName.java

该命令会将 fileName.java 编译成 fileName.class。

运行:java

  1. java 类名

注意:直接是类名。不要写文件名(带后缀的),会报错。
Java 严格区分大小写。

基本类型

  • 整数类型
    • byte:-128 ~ 127
    • short:-32768 ~ 32767
    • int:-2147483648 ~ 2147483647
    • long:-9223372036854775808 ~ 9223372036854775807,该类型数值,需要在结尾添加 l
  • 浮点数类型
    • float,可最大表示3.4x10。该类型数值,需要在结尾加 f
    • double
  • 字符类型
    • char,注意这不是字符串!是字符!只能存储单个字符,用单引号包围。比如 ‘a’,’中’。
  • 布尔类型
    • Boolean

【在数字中使用下划线】

  1. <br />Java 7的一个特性是数字文字中的下划线。可以在任何数字文字的数字之间放置下划线,如:`int`,`byte`,`short`,`float`,`long`,`double`。在数字文字中使用下划线将它们分成组以获得更好的可读性。
  1. public class UnderscoreNumericLiterals {
  2. public static void main(String[] args) {
  3. long ccNumber = 1234_5678_9012_3456L;
  4. long ssn = 999_99_9999L;
  5. float pi = 3.14_15F;
  6. long hexadecimalBytes = 0xFF_EC_DE_5E;
  7. long hexadecimalWords = 0xCAFE_BABE;
  8. long maxOfLong = 0x7fff_ffff_ffff_ffffL;
  9. byte byteInBinary = 0b0010_0101;
  10. long longInBinary = 0b11010010_01101001_10010100_10010010;
  11. int add = 12_3 + 3_2_1;
  12. System.out.println("ccNumber="+ccNumber);
  13. System.out.println("ssn="+ssn);
  14. System.out.println("pi="+pi);
  15. System.out.println("hexadecimalBytes="+hexadecimalBytes);
  16. System.out.println("hexadecimalWords="+hexadecimalWords);
  17. System.out.println("maxOfLong="+maxOfLong);
  18. System.out.println("byteInBinary="+byteInBinary);
  19. System.out.println("longInBinary="+longInBinary);
  20. System.out.println("add="+add);
  21. }
  22. }

数字文字中下划线的技巧:

  • 下划线只能放在数字之间。
  • 不能在小数位,L/F后缀或基数前缀旁边加下划线。因此3._14,110_L0x_123都是无效并将导致编译错误。
  • 数字之间允许多个下划线,因此12___3是有效数字。
  • 不能在文字的末尾添加下划线。因此123_无效并导致编译时错误。

    1. int _10=0;
  • 将下划线放在数字文字的前面时,会将它视为标识符而不是数字文字。所以不要混淆它。

    1. int x = _10

    引用类型

    String:字符串!在 Java 中是引用类型数据。

    常量:final

    final,作用跟 JavaScript 中的 const 类似。定义一个变量为常量,不可更改。

    var 关键字

  1. StringBuilder a = new StringBuilder();
  2. <=>
  3. //省略变量类型:
  4. var a = new StringBuilder()
  5. // 编译器会根据赋值语句自动推断出变量 a 的类型是 StringBuilder

变量的作用范围

  1. public class VariableScope {
  2. public static void main(String[] args) {
  3. int i = 0; // 变量 i 从这里开始定义
  4. {
  5. int x = 1; // 变量 x 从这里开始定义
  6. {
  7. String s = "Hi!"; // 变量 s 从这里开始定义
  8. System.out.println("第一个变量 s 的值:" + s);
  9. }// 变量 s 作用域到此结束
  10. /*
  11. 注意,这是一个新的变量 s ,它和上面的变量同名
  12. 但是因为作用域的不同,它俩是两个不同的变量
  13. */
  14. String s = "Hello!";
  15. System.out.println("第二个变量 s 的值:" + s);
  16. } // 至此,x 和 s 的作用域都到此结束
  17. System.out.println("该方法中命名的第一个变量 i 的值:" + i);
  18. }
  19. }

整数运算

四则运算

  1. public class Arithmetic {
  2. public static void main(String[] args) {
  3. int i = (100 + 200) * (99-88);
  4. int o = 7 * (34 * (45 / 5));
  5. int p = 11 * (13 / 3); // => 11 * 4
  6. // 两个整数相除,只会得到整数部分
  7. System.out.println(i);
  8. System.out.println((o));
  9. System.out.println(p);
  10. }
  11. }

溢出

  1. public class Overflow {
  2. public static void main(String[] args) {
  3. int i = 2147483640;
  4. int j = 15;
  5. int sum = i + j; // 结果溢出了……
  6. System.out.println("i + j 的结果为:" + sum);
  7. //为解决溢出问题,将数据类型从 int 换成 long 就好了
  8. long q = 2147483640;
  9. long w = 15;
  10. long sum1 = q + w;
  11. System.out.println("q + w 的结果为:" +sum1);
  12. int e = 123;
  13. e += 100;
  14. System.out.println("e 被赋值后:" + e);
  15. }
  16. }

自增/自减

  1. public class SelfIncreaseAndDecrease {
  2. public static void main(String[] args) {
  3. int n = 3300;
  4. System.out.println("n 的初始值:" + n);
  5. n ++; // => n = n + 1
  6. System.out.println("n ++:" + n);
  7. n --; // => n = n -1
  8. System.out.println("n --:" + n);
  9. }
  10. }

移位运算

  1. public class ShiftOperation {
  2. public static void main(String[] args) {
  3. int n = 7;
  4. System.out.println("n 的初始值:" + n);
  5. int a = n << 1;
  6. System.out.println("对 n 进行左移 1 位:" + a);
  7. int a1 = n << 2;
  8. System.out.println("对 n 进行左移 2 位:" + a1);
  9. int a2 = n << 3;
  10. System.out.println("对 n 进行左移 2 位:" + a2);
  11. int a3 = n << 28;
  12. System.out.println("对 n 进行左移 28 位:" + a3);
  13. int a4 = n << 29;
  14. System.out.println("对 n 进行左移 29 位:" + a4);
  15. System.out.println("————————————————————————");
  16. int m = 28;
  17. System.out.println("m 的初始值:" + m);
  18. int M = m >> 1;
  19. System.out.println("对 m 进行右移 1 位:" + M);
  20. int M1 = m >> 2;
  21. System.out.println("对 m 进行右移 2 位:" + M1);
  22. int M2 = m >> 3;
  23. System.out.println("对 m 进行右移 3 位:" + M2);
  24. }
  25. /*
  26. 左移实际上就是不断地 ×2 ,右移实际上就是不断地 ÷2 。
  27. */
  28. }

其他注意事项

IntelliJ IDEA

Git 提交

在一个(父级)项目中创建了一个子项目(因为学习整合在一起),对于子项目中文件的 Git 相关提交,务必不要在父级项目中提交,因为会在 IntelliJ IDEA 中的代码分析中产生如下类似错误
image.png
虽说也可以直接忽略错误进行提交,但总觉不爽。另外就是记录下类似情况错误的解决方案。