# Java 程序基础

我们先剖析一个完整的Java程序,它的基本结构是什么:

/**
 * 可以用来自动创建文档的注释
 */

// 类名必须以英文字母开头,后接字母,数字和下划线的组合
// 习惯以大写字母开头
// 注意到 public 是访问修饰符,表示该 class 是公开的
public class Demo {
    // 这里的方法名是main,返回值是void,表示没有任何返回值。
    public static void main(String[] args) {
        // 向屏幕输出文本:
        System.out.println("Hello, world!");
        // 这是注释...
        /*
        这是注释
        blablabla...
        这也是注释
        */
    }
}

# 标识符

public class Demo01 {
    public static void main(String[] args) {
        // 所有的标识符都应该以 字母 $ _ 开始
        // 首字符之后可以是 字母 $ _ 数字
        // 注意标识符是大小写敏感的
        String hello = "Hello";
        String world = "World";
        String $hello = "Hello";
        String hello1 = "Hello";
        String hello_world = hello + world + "!";
        System.out.println(hello_world);
    }
}

# 数据类型

Java 是强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用

public static void main(String[] args) {
    String a;
    System.out.println(a); // 这里会报错
}

Java 的数据类型分为两大类

  • 基本类型
  • 引用类型

# 基本类型

基本数据类型 具体类型 细节
数字 整数 byte 1 个字节 8 位二进制数
数字 整数 short 2 个字节 16 为二进制数
数字 整数 int 4 个字节 32 位数,可用来表示 10 位时间戳
数字 整数 long 8 个字节 64 位数,可用来表示 13 位时间戳
数字 浮点数 float 4 个字节
数字 浮点数 double 8 个字节
字符 char 2 个字节 表示单个字符
布尔值 boolean 1 个位 表示真/假 (是/否)
public static void basic() {
    // 整数
    byte num1 = 10;
    short num2 = 20;
    int num3 = 30; // int 最常用
    long num4 = 30L; // long 数字后面要加 L
    // 小数
    float num5 = 2.71828f; // 数字后面要加 f
    double num6 = 3.14159265358979323846;
    // 字符
    char g = 'G'; // 字符要使用单引号
    // 布尔值
    boolean flag = true;
    flag = false;
}

# 引用类型

引用数据类型 具体类型 细节
数字 整数 类 BigInteger 表示任意大小的整数
数字 浮点数 类 BigDecimal 表示一个任意大小且精度完全准确的浮点数
字符串 类 String 表示多个字符

# 示例代码

public class Demo02 {
    public static void main(String[] args) {
        // Java 是强类型语言
        // 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
        /**
         * String a;
         * System.out.println(a); 这里会报错
         */
        basic();
        number();
        reference();
    }

    public static void basic() {
        // 整数
        byte num1 = 10;
        short num2 = 20;
        int num3 = 30; // int 最常用
        long num4 = 30L; // long 数字后面要加 L
        // 小数
        float num5 = 2.71828f; // 数字后面要加 f
        double num6 = 3.14159265358979323846;
        // 字符
        char g = 'G'; // 字符要使用单引号
        // 布尔值
        boolean flag = true;
        flag = false;
    }

    public static void number() {
        // ====================
        System.out.println("====================进制");
        // ====================
        int i2 = 0b10; // 二进制的 10 表示十进制的 2
        int i10 = 10;
        int i8 = 010; // 八进制的 10 表示十进制的 8
        int i16 = 0x10; // 八进制的 10 表示十进制的 16
        System.out.println(i2);
        System.out.println(i10);
        System.out.println(i8);
        System.out.println(i16);
        // ====================
        System.out.println("====================浮点数的问题");
        // ====================
        // 浮点数的问题
        // 精度
        float f = 0.3f;
        double d1 = 0.1 + 0.2;
        double d2 = 0.3;
        System.out.println(f == d1); // false
        System.out.println(d1 == d2); // false
        // 溢出
        float f1 = 12345678910f;
        float f2 = f1 + 1;
        System.out.println(f1 == f2); // true
        // ====================
        System.out.println("====================强制转换");
        // ====================
        // 字符 转 Int 输出:字符对应的 Unicode 码
        // 字符的本质还是数字
        char c1 = '1';
        char c2 = 'a';
        char c3 = '中';
        char c4 = '\u0061'; // 16 进制的 61 表示 97 最终输入 a
        System.out.println(c1); // 1
        System.out.println((int)c1); // 49
        System.out.println((int)c2); // 97
        System.out.println((int)c3); // 20013
        System.out.println(c4); // a
    }

    public static void reference() {
        Integer num0 = 0;
        String Gauss = "Gauss"; // 字符串要使用双引号
        // ====================
        System.out.println("====================字符串常量池");
        // ====================
        // 字符串常量池
        // 为了提高性能并减少内存的开销,JVM在实例化字符串常量时进行了一系列的优化操作
        // 1.在JVM层面为字符串提供字符串常量池,可以理解为是一个缓存区
        // 2.创建字符串常量时,JVM会检查字符串常量池中是否存在这个字符串
        // 3.若字符串常量池中存在该字符串,则直接返回引用实例;若不存在,先实例化该字符串,并且,将该字符串放入字符串常量池中
        String sa = "abc";
        String sb = "abc";
        System.out.println(sa == sb); // true
        String sc = new String("abc");
        String sd = new String("abc");
        System.out.println(sc == sd); // false
    }
}

# 类型转换

public class Demo05 {
    public static void main(String[] args) {
        /**
         * 注意点
         * 1. 不能对布尔值进行转换
         * 2. 不能把对对象类型转换位不相干类型
         * 3. 高容量到低容量需要强制转换
         * 4. 转换的时候可能存在内存溢出或者丢失精度
         */

        // 强制转换  高到低
        int i = 128;
        byte b = (byte) i;
        System.out.println(b); // - 128
        float f = 61.8f;
        double d = 61.8;
        System.out.println((int) f); // 61
        System.out.println((int) d); // 61
        // 自动转换  低到高
        long l = (long) i;
        System.out.println(l); // 128
        char c = 'a';
        System.out.println(c + 1); // 98
    }
}

# 变量和作用域

# 运算符

# 基本运算符

# 其他运算符

# Java 包机制

什么是 pom.xml

pom.xml 是 Maven 项目的核心配置文件,它是 项目对象模型- Project Object Model (POM)的缩写。POM 定义了项目的所有属性,包括项目的名称、版本、依赖关系、构建配置等。 使用 pom.xml,我们可以轻松地管理项目的构建和依赖关系,让我们能够更专注于业务逻辑的开发。

# JavaDoc

package com.example.doc;

/**
 * @author gausszhou
 * @version 1.0
 * @since 1.8
 */
public class Demo01 {

    String name;
    public static void main(String[] args) {
    }

    /**
     * @param name
     * @return {String}
     * @throws Exception
     */
    public String test(String name) {
        return name;
    }
}