作者:Teo

Java SE 基础




Java SE 基础         - 2023.9.15 -




一. 数据类型 及 运算符

❶. 常量

    字符串常量
    整数常量
    小数常量
    字符常量
    布尔常量
    空常量

    println 输出格式
        public class a {
            public static void main(String[] xrgs){
                System.out.println("您好");
                System.out.println(123);
                System.out.println(123.23);
                System.out.println('9');
                System.out.println(true);
                System.out.println(false);
                System.out.println(5 > 10);
            }
        }

    双引号    字符串
    单引号    只能存放单个字符
    整数
    小数
    true
    false
    null     空常量 不能直接打印

❷. 变量

    存储单元
        bit  位 比特位  b表示   计算机存储设备(硬盘 内存)最小信息单元
        byte 字节       B表示  计算机最小存储单元 由连续的 8个位 组成  

    数据类型
        整数     默认为 int
            byte 字节   1字节     -128~127
            short       2        -32768~32767
            int         4        -2的31次方 ~ 2的31次方-1
            long        8        -2的63次方 ~ 2的63次方-1
        浮点数   默认为 double
            float      4        1.401298e-45 ~ 3.402823e+38        单精度
            double     8        4.9e-324 ~ 1.797693e+308           双精度
        字符
            char       2        0 ~ 65535
        布尔
            boolean    1        true  false

        定义变量
            数据类型 变量名 = 数据值

            int a = 10;                 // 定义变量 一定要加 数据库类型
            double b = 12.3; 
            char c = 'a';               // 字符 需要 单引号
            boolean d = true;

            a = 30;                     // 此为赋值 并不是定义 上面需要有定义才才能赋值

            int a;
            a = 10;

            int a = 10 , b = 20 ,  c =30;   // 一条语句定义多个变量

            float e = 12.3f;                // 必须加F   定义 浮点数 要加 大写F 或 小写f
            float e = 12.3F;

            long f = 1000l;                 // 可以不加L  定义 长整形 要加 大些L 或 小写l
            long f = 1000L;

            注:
                变量名不允许重复定义
                变量的作用域范围  只在它所在的大括号中有效

    键盘录入
        import java.util.Scanner;

        public class b {
            public static void main(String[] args) {
                System.out.print("请输出数字:");
                Scanner sc = new Scanner(System.in);     // System.in 系统输入
                int a = sc.nextInt();                    // nextInt() 是Scanner已经写好的方法
                System.out.println(a);
            }
        }


    标识符
        有数字 字母 下划线 美元符号 组成
        1. 不能以数字开头
        2. 不能是关键字
        3. 区分大小写

        方法 变量   命名使用 小驼峰
        类   命名使用 大驼峰 

❸. 数据类型转换

    隐式转换  
        取值范围小的数据 给取值范围大的类型赋值 可以直接赋值
            int a =10;
            double b = a;
            System.out.println(b);    // 会输出 10.0
            byte < short < int < long < float < double
                    char <

        小的数据类型 和大的数据类型运算 小的会提升为大的之后 再进行运算
            int a = 10;
            double b = 12.3;
            double c = a + b;
            System.out.println(c);

        byte short char 三种数据在运算的时候 不管是否有更高的数据类型 都会提升为int 在进行运算
            byte a = 10;
            byte b = 20;
            int c = a + b;
            System.out.println(c);

    强制转换
        int d = (int)c;

        大范围 转换为 小范围

            int a = 10;
            byte b = (byte)a;
            System.out.println(b);

            double c = 12.3;
            int d = (int)c;                  // 会把小数点后面的都干掉
            System.out.println(c);
            System.out.println(d);

            byte d = 3 + 4;                  // 常量优化机制 先相加 如在byte范围内 通过 不在byte内 报错

            long a = 123;                    // 不会报错  因为123默认为 int 类型 可以转换成 long 类型
            long a = 12345645632156123123L   // 不加L 会报错 因为 已经超过int的范围 

            short s = 1;
            s = (short)(s + 1);
            System.out.println(s);

    实例1. 变量互换

        public class D {
            public static void main(String[] args){
                int a = 3;
                int b = 5;
                System.out.println("a= "+a);
                System.out.println("b= "+b);
                a = a + b;
                b = a - b;
                a = a - b;
                System.out.println("a= "+a);
                System.out.println("b= "+b);
            }    
        }

        public class D {
            public static void main(String[] args){
                int a = 3;
                int b = 5;
                System.out.println("a= "+a);
                System.out.println("b= "+b);
                a = a ^ b;
                b = a ^ b;
                a = a ^ b;
                System.out.println("a= "+a);
                System.out.println("b= "+b);
            }
        }

❹. 运算符及表达式

    运算符: 对常量或变量进行操作的符号
    表达式: 用运算符把常量或者变了连接起来符号java语法的式子

    int a = 10;
    int b = 20;
    int c = a + b;

    + 是运算符  并且是 算术运算符
    a + b 是表达式 并且是 算术表达式

    +    -    *   /    %取余数

    System.out.println(10 + 20);
    System.out.println(10 - 20);
    System.out.println(10 * 20);
    System.out.println(10.0 / 3);   // 两个整数相除 结果只能得到整数 
    System.out.println(10 / 3.0);   // 如果想要得到带有小数的结果, 必须加入 浮点型 运算
    System.out.println(5 % 2);

❺. 字符 + 操作 
    ASCII码 查询
        public class F{
            public static void main(String[] args){
                int a = 0;
                char b = 'a';
                System.out.println(a + b);  // 会先把 b 的值 按照 ASCII码进行转换 在相加
            }
        }

    ASCII码
        a   97
        A   65
        0   48

    字符串 + 操作
        对于字符串 +号 为 连接符
            System.out.println(1 + 99 + "年");
            System.out.println("5+5="+5+5 );
            System.out.println("5+5=" + (5+5));      // 小括号为 提升优先级 先算

    实例二: 数字拆分  
        键盘录入一个三位数 将其拆分为个位 十位 百位后 打印出来

        import java.util.Scanner;
        public class c {
            public static void main(String[] args){
                System.out.print("请输出三位数字: ");
                Scanner sc = new Scanner(System.in);
                int i = sc.nextInt();
                System.out.println("您输入的个位是: " + (i % 10));
                System.out.println("您输入的十位是: " + (i / 10 % 10));
                System.out.println("您输入的百位是: " + (i / 100 % 10));
            }
        }

        %10 取最后一位
        /10 消最后一位

        个位:  数值 % 10
        十位:  数值 / 10 % 10
        百位:  数值 / 10 / 10 % 10
        千位:  数值 / 10 / 10 / 10 % 10
        ...

❻. 运算符

    自增自减运算符
        ++i;
        i--;

        int a = 10;
        int b = ++a;           // 先加在赋值   b为11

        int c = 10;
        int d = a++;           // 先赋值在加   d为10

    赋值运算符
        =
        +=    // 将符号左右两边的数据 做加法运算 结果赋值给左边
        -=
        *=
        /=
        %=

    这些赋值运算符 隐含了强制类型转换
        short s = 1;
        ss += 1;                // 相当于 s = (short)(s + 1);
        System.out.println(s);

    关系运算符 比较运算符  
        ==        // 比较  返回值 为 true 或 false
        !=
        >
        >=
        <
        <=

    逻辑运算符
        
        &    并且    返回布尔类型            x > 5 & x < 15
        |    或
        !    非
        ^    异或   true ^ true 返回  false   相同为假  不同为真
                    false ^ false 返回 false
                    true ^ false 返回 true

    短路逻辑运算符
        &&   与     有短路效果   左边为false 右边不执行
        ||   或     有短路效果   左边为true 右边不执行

    三元运算符
        关系表达式 ? 表达式1 : 表达式2
        int a = 10;
        int b = 20;
        int c = 30;
        int max = a > b ? a:b;          // 如果a大于b max取值a 否则max取值b
        int max1 = max > c ? max : c; 
        int max2 = a > b ? a : b  > c ? a > b ? a : b : c;   // 结果与 max1 相同


二. 流程控制

    ❶. if语句

        if (关系表达式){}
        if (i >= 18){}
        if (90 <= i & i <= 100){}

        if (){}
        else {}

        if (){}
        else if (){}
        ...
        else{}

        注: 如果if语句所控制的语句 是一条语句  大括号可以省略
            if 语句的小括号后面不要写分号

    ❷. switch语句

        switch(i){
            case 1:
                break;
            case 2:
                break;
            default:
                break;
        }

        注: case 穿透  如果switch语句中  case 省略了 break语句 就会开始 case 穿透
            当开始case穿透 后续的case就不会具有匹配效果 内部的语句都会执行 知道看见break才停止

    ❸. for 循环
        for(int i = 1; i <= 3; i++ ){}

        for(int i = 0; i <=100; i = i + 2){}          //  偶数
        if(i % 2 == 0){}                              //  偶数
        if(i % 2 == 1){}                              //  奇数

        if (i % 2 == 0){                   // 引入统计变量 如果是2的倍数 则 打印一个换行
                System.out.println();
        }

    ❹. while 循环               适合 不明确 循环次数
        
        while(i <= 100){
            sum += i;
            i++;
        }


        do{
            System.out.println(i);
            i++;
        }while(i <=10);

    ❺. 死循环   标号
        for(;;){}

        teo:while(true){           // 此 teo: 为循环 起的名字 可以使用 break teo; 跳出
            break teo;             // 跳出 teo 循环
            continue teo;
        }
        do{}while(true)
        continue;        // 跳过一次循环
        break;           // 结束循环

    ❻. Random 随机数
        import java.util.Random;
        public class a {
            public static void main(String[] args) {
                Random r = new Random();
                int i = r.nextInt(10);              // 产生一个 0 - 9 之间的随机数 不包括10
                System.out.println(i);
            }
        }
        int i = r.nextInt(10) + 1;              // 可以产生 1 - 10 之间的随机数


三. 数组

    ❶. 定义数组

        数据类型[] 变量名
        int[] array;
        数据类型 变量名[]
        int array[];

    ❷. 动态初始化

        int[] arr = new int[3];        // 索引从0开始  为  0   1  2
        arr[1] = 11;                   // 为 1 号索引位置 赋值

        System.out.println(arr);

            [I@119d7047             // 打印数组变量名 会出现 内存地址

                @ :   分隔符
                [ :   当前的空间是一个数组类型
                I :   当前数组容器中所存储的数据类型  int
                119d7047 :  十六进制内存地址

        System.out.println(arr[0]);      // 调取0号索引  默认初始值为 0

        数组默认值

            数据类型       默认值
            整数            0
            浮点数          0.0
            布尔            false
            字符            空字符
            引用数据类型     null
        int[] arr2 = arr1;          //  定义数组arr2   和 arr1 相同

    ❸. 静态初始化

        int[] arr = new int[]{1,2,3};    // 定义数组并直接赋值
        int[] arr = {1,2,3};

        arr.length       //  数组中的元素个数  就是个 int 的 整数

        for(int i = 0; i < arr.length; i++){        // 打印所有数组中的元素
            System.out.println(arr[i]);
        }


        int[] arr = new int[5];
        for(int i = 0; i < arr.length; i++){
            // arr[i] = 10;
            arr[i] = sc.nextInt();              
        }

    ❹. 数组命令整理

        int[] arr;                                // 定义数组  动态初始化
        int arr[];                                // 定义数组  动态初始化

        int[] arr = new int[3];                   // 定义数组并赋值 索引从0开始  为  0   1  2
        arr[0] = 11;                              // 为 0 号索引 赋值

        System.out.println(arr[0]);               // 调取0号索引 如果不赋值 默认初始值为 0
        System.out.println(arr);                  // 打印数组  会出现内存地址

        int[] arr2 = arr1;                        //  定义数组arr2   和 arr1 相同

        int[] arr = new int[]{1,2,3};             // 定义数组并直接赋值  静态初始化
        int[] arr = {1,2,3};                      // 定义数组并直接赋值  静态初始化

        arr.length                                // 数组中的元素 个数 获取数组arr的长度 就是个 int 的整数

        for(int i = 0; i < arr.length; i++){      // 打印所有数组中的元素
            System.out.println(arr[i]);
        }

        for (int i = 0; i < arr.length; i++) {               // 键盘录入  存放到 数组中
            System.out.println("第" + (i + 1) + "个数");
            arr[i] = sc.nextInt();
        }


四. 方法

    public static void teo(){            //  定义一个方法    void 空白 没有返回值

    }

    teo();             // 调用

    public static void teo(int a, int b){}            //  定义一个 带参数的方法

    teo(5,7);                                  // 调用 方法

    形参  方法定义中的参数
    实参  方法调用中的参数

    public static int teo4(int a,int b){       // 定义 int 类型 返回值的 方法
        int i = a + b;
        return i;                              // 返回值 i
    }

    int num = teo4(5,6);                       // 定义 num 变量 接收 返回值


    return;      // 结束方法 也可在void中使用 只有 return 没有返回值 后面的代码不执行 所在的方法会从栈内存中清除 亦叫 弹栈

    方法重载  同一个类中 方法名相同 参数不同的方法 叫 方法重载

    public static void teo5(int[] arr){}       // 数组作为参数 传递给方法
    int[] arr = {11,22,33,44,55};
    teo5(arr);

    public static int[] teo6(int[] arr){       // 数组作为参数  返回值 依然是 数组
        int[] arr1 ={max,min};
        return arr1;                           // 返回 arr1 数组
    }
    int[] arr = new int[]{1, 54, 89, 65};      // 用于传递的arr数组 
    int[] arr1 = teo6(arr);                    // 用于接收arr1数组    方法之间的数组内存不相同  方法之间传参的数组内存相同

    cmd calc 计算器
        mstsc 远程连接
        msconfig 服务
        regedit 注册表

五. 进制

    二进制    数值前面以 0b开头  b大小写都可以
    八进制    数值前面以 0开头
    十六进制  数值前面以 0x开头  x大小写都可以

    ❶. 任意进制 转换成 十进制

        公式: 系数 * 基数的权次幂 相加
        系数: 数字
        基数: 二进制为2   8进制为8  16进制为16
        权:   从右边开始  以0为编号  逐个加1

        0b100

            0*2^0 = 0
            0*2^1 = 0
            1*2^2 = 4

        0x100
            0*16^0 = 0
            0*16^1 = 0
            1*16^2 = 256

        0100
            0*8^0 = 0
            0*8^1 = 0
            1*8^2 = 64

    ❷. 十进制  转换成  任意进制 

        公式: 除基取余   使用源数据不断的除以基数 得到余数 直到 商为0 在将余数倒着加起来
        11 转换成 二进制   1011
            2  11
                5 ... 1
                2 ... 1
                1 ... 0
                0 ... 1

        60 转换成 十六进制   3c
            16  60
                3 ... 12
                0 ... 3

    ❸. 二进制 转 十进制

        0b1011  转换成 十进制
        8421码

            128     64     32     16     8     4     2      1       8421码表
                                         1     0     1      1       二进制
                                         8 + 2 + 1  = 11            十进制 把二进制 1对应的相加

    ❹. 二进制 转 八进制

        分成多组  从右边开始 每三个一组
        0b111100 转换成 八进制 

            128     64     32     16     8     4     2      1       8421码表  
                                               1     0      0       第一组
                                               1     1      1       第二组
                                               4                    第一组相加结果
                                               4 + 2 + 1 = 7        第二组相加结果
                                               74                   转换成 八进制

    ❺. 二进制 转 十六进制

        分成多组  从右边开始  每四个一组
        0b111100 转换成 十六进制

            128     64     32     16     8     4     2      1       8421码表  
                                         1     1     0      0       第一组
                                                     1      1       第二组
                                               8 + 4 = 12           第一组相加结果
                                               2 + 1 = 3            第二组相加结果
                                               3c                   转换成 十六进制 
    ❻. 位运算

        先吧数字转换成 二进制 在运算  在二进制运算中  1表示 true  0表示false

        &   位与    遇 false 则 false 
        |   位或    遇 true  则 true
        ^   位异或  相同为false 不同为true     一个数被另外一个数 异或两次 该数本身不变
        ~   取反    全部取反 0变1  1变0  包括符号位

        6 位运算 2
        00000000 00000000 00000000 00000110      二进制 6
        00000000 00000000 00000000 00000010      二进制 2

                                        010      6 & 2 的结果 返回为 2
                                        110      6 | 2 的结果 返回为 6
                                        100      6 ^ 2 的结果 返回为 4

        ~6的计算
        00000000 00000000 00000000 00000110      二进制 6
        11111111 11111111 11111111 11111001      二进制 6取反
                                         -1      求出来反码
        11111111 11111111 11111111 11111000      反码

        10000000 00000000 00000000 00000111      反码推源码   第一个1 为符号位 1表示负数
                                         -7      转换成十进制为 -7
                                                 ~6 的结果 返回为 -7

        System.out.println(6 & 2);              // 可打印查看相关结果
        System.out.println(6 | 2);
        System.out.println(6 ^ 2);
        System.out.println(~6);

    ❼. 位移运算符

        <<  有符号左移运算符 二进制位向左移动 左边符号位丢弃
            向左移动几位 就是 乘以 2的几次幂
                5 << 1  就是 5乘以2
                5 << 2  就是 5乘以4

        >>  有符号右移运算符 二进制位向右移动 使用符号位进行补位
            向右移动几位 就是 除以 2的几次幂
                5 << 1  就是 5除以2
                5 << 2  就是 5除以4

        >>> 无符号右移运算符 无论符号位是0还是1 都补充0  (用处相当少)

        12 << 2 
        00000000 00000000 00000000 00001100    12的二进制
        00000000 00000000 00000000 00110000    12 << 2 转换成十进制结果为 48  
                                               亦可使用  12 * 2^2 = 48            
        12 >> 2                                         12 / 2^2 = 3

        -6 >>> 1
        10000000 00000000 00000000 00000110    -6的二进制
        01000000 00000000 00000000 00000011    -6 >>> 1 转换成十进制结果为 2147483645 (用处相当少)

        System.out.println(12 << 2 );              // 可打印查看相关结果
        System.out.println(12 >> 2 );
        System.out.println(-6 >>> 1);

    ❽. 数据交换
        a 与 b的值 交换 方法一
            int temp = a;
            a = b;
            b = tmp;

        a 与 b的值 交换 方法二  异或的应用
            a = a ^ b;
            b = a ^ b;
            a = a ^ b;

        数组中的数据交换
            int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13};
            teo7(arr);
            for(int i =0; i < arr.length;i++) {
                System.out.println(arr[i]);
            }

            public static void teo7(int[] arr){
                for(int start = 0,end =arr.length -1; start < end; start++,end--){
                    int temp = arr[start];
                    arr[start] = arr[end];
                    arr[end] = temp;
                }
            }


六. 二维数组
    ❶. 动态初始化
        int[][] arr;        // 常用 二维数组是记录一维数组的 内存地址
        in arr[][];
        int[] arr[];

        int[][] arr = new int[2][3];    // 定义一个二维数组  可以存放2个一维数组 每个一维数组可以存放 3个int类型的元素
        arr[0];            // 第一个 一维数组 内存
        arr[0][0];         // 第一个 一维数组 中的 第一个元素
        arr[0][0] = 11;    // 赋值
        arr[0] = arr1;     // 把 一维数组arr1 整体添加到二维数组arr中的 arr[0]数组中

    ❷. 静态初始化

        int[][] arr = new int[][]{{11, 22, 33}, {44, 55, 66}};
        int[][] arr = {{11, 22, 33}, {44, 55, 66}};
        int[] arr1 = {11, 22, 33};
        int[] arr2 = {44, 55, 66};
        int[][] arr = {arr1, arr2};

    ❸. 二维数组的遍历
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
        }


七. 面向对象
    public class phone {
        String brand;
        int price;
        public void call(){
            System.out.println("打电话" );
        }

        public void sendMessage(){
            System.out.println("发短信");
        }
    }

    phone p = new phone();
    p.call();
    p.sendMessage();

    私有的成员变量 只能在本类中使用
        private int i;           \\ 定义一个私有的 成员变量

        public void setI(int a){
            i =a;
        }
        public int getI(){
            return i;
        }

    成员变量
    局部变量

    面向对象三大特征     
    封装 将类的某些信息隐藏的类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现
         对隐藏信息的操作和访问成为变量private,提供对于的 get  set 方法
    继承 
    多态

    构成方法 与 类名相同   没有返回值


............................................................................................................


八. 杂项

    CS架构   客户端 + 服务器

    BS架构   浏览器 + 服务器

    JavaEE 服务器
        weblogic     实现了JavaEE规范, 重量级服务器 又称JavaEE容器.
        websphereAS  实现了JavaEE规范,重量级服务器.
        JBOSSAS      实现了JavaEE规范,重量级服务器,免费的.
        Tomcat       实现了jsp/servlet规范,是一个轻量服务器,开源免费

    HelloWorld

        # vim HelloWorld.java
            public class HelloWorld {
                public static void main(String[] args){
                    System.out.println("Hello World !");
                }
            }

        # javac HelloWorld.java
        # java HelloWorld

    public 类名 与 文件名相同


    关键字
        关键字 字母 全部小写 有颜色


    Win + e  资源管理器

    java se    基础     桌面应用的开发
    java me    手机java程序开发 已被安卓 ios取代
    java ee    web方向 网站开发


    JRE: 编写代码的过程中, 需要使用JRE中java已经写好的代码  java运行环境 包含JVM虚拟机及java核心类库
        类: 就是java文件 里面存放java代码    A.java
        类库: 存放多个java文件的仓库
        核心类库: java 已经写好的 代码仓库


    JDK  翻译 A.java代码的工具 翻译完成后可被JVM虚拟机所执行
    JVM  JVM虚拟机 启动翻译java代码的作用... ... 运行代码的过程中, 需要使用JDK中的运行工具

    关系
        JDK 包含 JRE和开发工具
            JRE包含JVM和核心类库



    java8.0 最常用的java版本

    静态资源发布:

        修改 javaEE (Legacy) 主页文件
            # vim /WEB-INF/web.xml                                  // 修改 静态项目 主页文件
                <welcome-file-list>
                    <welcome-file>/index/index.html</welcome-file>
                </welcome-file-list>
                </web-app>                                           // 在</web-app>标签上面 添加 三行代码











Java 环境





Java 环境         - 2023.9.15 - 




一. idea 安装 使用

    idea 安装
        https://www.jetbrains.com/zh-cn/idea/download/?section=windows   // 官网下载地址 这里需要 收费版本
            ideaIU-2023.2.1.exe     收费版本
            ideaIC-2023.2.1.exe     免费版本
    idea 收费版本破解    https://www.bilibili.com/read/cv25328397/
        1. 解压 idea破解_jetbra.zip
        2. jetbra/jetbra/scripts/uninstall-all-user.vbs --> 打开 --> 点两个确定
        3. jetbra/install-all-users.vbs --> 打开 --> 点两个确定
        4. 打开idea --> Activation code --> 复制进去 激活码 --> Activate
        5. 可使用到2025年1月

    diea 使用File | Settings | Appearance & Behavior
        改变主题: File --> Settings --> Appearance & Behavior --> Appearance --> Theme
        设置代码提示对大小写不敏感: File --> Settings --> Editor --> General --> Code Completion --> Match case --> 取消勾选
        设置 文件夹 连在一起 Project旁边的设置三个点 --> Tree Appearance --> Compact Middle Packages --> 取消勾选

    Idea安装 热部署 插件 Jrebel
        安装 JRebel
            File --> Settings --> Plugns --> JRebel --> Install
        激活 JRebel
            http://jrebel.longzipeng.online/       可以获取到激活码
            Idea -->Help -->  JRebel --> Activation 
                http://jrebel_active.longzipeng.online/6B1A86D3-8C39-40F8-B7CA-41F535226954
                123@qq.com
            --> Change license
        使用
            View --> Tool Windows --> JRebel --> 勾选 第一框 --> 注意会在 项目下生成rebel.xml文件 如果不适用了 要关闭 勾选

            使用 Run with jrebel 运行项目
        视频 教程 https://www.bilibili.com/video/BV1FX4y117jp/?spm_id_from=333.337.search-card.all.click&vd_source=eeb536dab55660fac6b58ebc5d45c29c

    快捷键
        psvm              主方法
        sout              输出语句
        Alt + 1           打开/隐藏  工程目录结构
        Alt + 4           打开/隐藏  控制台
        Ctrl + Alt + L    格式化代码  同样适用于 sql语句
        Alt + Enter       错误修正提示
        Ctrl + D          向下复制一行
        Ctrl + X          剪切当前行
        Ctrl + /          批量加入单行注释, 再按一次就是取消
        Ctrl + shift + /  批量加入多行注释, 再按一次就是取消
        Alt + shift + ↑   上移当前行
        Alt + shift + ↓   下移当前行
        Alt + 按住左键拖  列编辑
        Ctrl + Alt +T     快速地给代码片段添加语言结构

        Ctrl + Enter      在idea数据库中 写sql时 快速执行 sql语句
        
        idea中快捷键
            Ctrl + /              // 添加 单行注释
            ctrl + shift + /      // 添加选中行 多行注释 
            Ctrl + y              // 删除当前行
            Ctrl + d              // 复制当前行

二. JDK 安装

  Windows JDK 安装

    JDK 最新版下载    https://www.oracle.com/cn/java/technologies/javase-downloads.html 
    JDK 1.8下载   https://www.oracle.com/java/technologies/downloads/#java8
            k051535@work    Teo@1234
            113487606@qq.com    Shenlin@1234

    jdk-8u381-windows-x64.exe
    jdk-11.0.20_windows-x64_bin.exe

    直接安装 修改路径
        D:\Develop\jdk8
        D:\Develop\jre8

            D:\Develop\jdk8\bin         \\ 存放工具 javac java 都在里面

    环境变量
        Win + E --> 计算机右键属性 --> 高级系统设置 --> 环境变量 --> 系统变量 --> 新建

            变量名:   JAVA_HOME                         \\ 名字随便起  最好使用 JAVA_HOME

            变量值:   D:\Develop\jdk8                    \\ JDK的安装路径

    Path环境变量
            系统变量 --> Path --> 编辑 --> 编辑文本 --> 放入 %JAVA_HOME%\bin;

                %JAVA_HOME%\bin;C:\Windows\system32; ... ...   \\ 放到最前面

        # java -version
        # javac       \\ 测试是否可用  需要从新开 cmd窗口


  Linux JDK 安装
  
    # tar zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local
    # cd /usr/local
    # mv jdk1.8.0_271 java
    # vim /etc/profile
        export JAVA_HOME=/usr/local/java
        export JRE_HOME=${JAVA_HOME}/jre
        export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
        export PATH=${JAVA_HOME}/bin:$PATH
    # ln -s /usr/local/java/bin/java /usr/bin/java  // 添加jar包 /etc/rc.local 启动项时候 会找到此目录 如果没有会报错 
    # source /etc/profile
    # java -version


三. Maven 安装

    Maven 官网下载   https://maven.apache.org/download.cgi
    
    Maven windows 安装
        apache-maven-3.9.4-bin.zip                  下载这个包
        D:\Develop\                                 解压到此目录
        D:\Develop\ apache-maven-3.9.4\repository   新建文件夹

        我的电脑属性 --> 系统设置 --> 高级 --> 环境变量 --> 系统变量 --> 新建
            变量名: MAVEN_HOME
            变量值: D:\Develop\apache-maven-3.9.4

            系统变量 --> Path --> 编辑 --> 新建
                %MAVEN_HOME%\bin

        # mvn -v
        # mvn -version

        D:\Develop\apache-maven-3.9.4\conf\settings.xml   // 修改配置文件 仓库的路径 及 国内镜像 地址
                                    // 53行 加到注释外 关于斜杠 直接复制地址的不能用 注意是反斜杠 注意不要在注释里面
            <localRepository>D:/Develop/apache-maven-3.9.4/repository</localRepository>
            <mirror>                                         // 160行
              <id>nexus-aliyun</id>
              <mirrorOf>central</mirrorOf>
              <name>Nexus aliyun</name>
              <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </mirror>
            
    Maven linux 安装
        # wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz --no-check-certificate
        # tar zxf apache-maven-3.9.4-bin.tar.gz 
        # mv apache-maven-3.9.4 /usr/local/maven
        # ln -s /usr/local/maven/bin/mvn  /usr/bin/mvn
        # echo " ">>/etc/profile
        # echo "# Made for mvn env by zhaoshuai on $(date +%F)">>/etc/profile
        # echo 'export MAVEN_HOME=/usr/local/maven'>>/etc/profile
        # echo 'export PATH=$MAVEN_HOME/bin:$PATH'>>/etc/profile
        # tail -4 /etc/profile
        # source /etc/profile
        # echo $PATH
        # which mvn
        # mvn -version

        # mkdir /usr/local/maven/repository         // 本地仓库保存位置
        # vim /usr/local/maven/conf/settings.xml
            <localRepository>/usr/local/maven/repository</localRepository>
            <mirror>
              <id>nexus-aliyun</id>
              <mirrorOf>central</mirrorOf>
              <name>Nexus aliyun</name>
              <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </mirror>
            
    idea 中集成 Maven

        全局配置 Maven
            在开始小窗口页面未打开任何项目 --> Customize --> All settings

            File --> Settings --> maven (搜索)

                Maven home path: D:\Develop\apache-maven-3.9.4

                User settings file: D:\Develop\apache-maven-3.9.4\conf\settings.xml    Override (勾选)

                Local repository: D:\Develop\apache-maven-3.9.4\repository    Override (勾选)

            File --> Settings --> maven --> Runner
                VM Options: -DarchetypeCatalog=local      // 模板使用本地 如果不配置会自动联网下载最新的 会很长时间
            
            //先不改 File --> Settings --> java compiler --> Project bytecode version --> 11

        单一项目配置 Maven
            File --> Settings --> maven (搜索)

                Maven home path: D:\Develop\apache-maven-3.9.4

                User settings file: D:\Develop\apache-maven-3.9.4\conf\settings.xml    Override (勾选)

                Local repository: D:\Develop\apache-maven-3.9.4\repository    Override (勾选)

            File --> Settings --> maven --> Runner
                VM Options: -DarchetypeCatalog=local  // 模板使用本地 如果不配置会自动联网下载最新的 会很长时间
            
            //先不改  File --> Settings --> java compiler --> Project bytecode version --> 11


    idea中 创建 maven 项目

        New Project --> Maven
            Location: D:\teo\maven-project01
            JDK: 11
            GroupId: com.ssyy99
            Artifactld: maven-project01      // 上面的name会跟着改
            Version: 1.0

        Maven 坐标主要组成
          <groupId>com.ssyy99</groupId>
          <artifactId>maven-project01</artifactId>
          <version>1.0-SNAPSHOT</version>
          
    idea中 导入 maven 项目
        第一种方法: 右侧工具栏 --> maven --> +号 --> 选择要导入的程序的 pom.xml文件即可
            View --> Appearance --> Tool Window Bars      // 显示右侧工具栏 没有工具栏可打开此选项
        第二种方法: File --> Project Structure... --> Modules --> +号 --> 选择要导入的程序的 pom.xml文件即可
    
    
    依赖配置: 项目运行所需要的jar包,一个项目可以引入多个依赖

        添加 logback 依赖
            https://mvnrepository.com/ --> 搜索 logback --> Logback Classic Module --> 1.2.9 
            --> 复制里面代码 到pom.xml文件中 --> maven会提示代码改变有悬浮窗刷新按钮自动下载依赖 
            --> 右边工具栏 maven会多一个Dependencies文件夹里面有logback依赖
            // 每一个 依赖 使用 <dependency> 包裹 可以配置多个依赖

            # vim pom.xml
              <dependencies>
                <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
                <dependency>
                  <groupId>ch.qos.logback</groupId>
                  <artifactId>logback-classic</artifactId>
                  <version>1.2.9</version>
                </dependency>
              </dependencies>

    Maven 作用    管理项目  管理 jar包的工具
    
        1. 解决 jar 包冲突问题  不用手动导入 jar 包 自动下载 jar包
        2. 同一结构 可在各个 开发软件中使用 如 idea eclipse等
        3. Maven 项目 目录结构
            src/main                实际项目资源
            src/main/java           java 源代码目录
            src/main/resources      配置文件目录
            src/test                测试项目资源
            src/test/java
            src/test/resources
            src/pom.xml             项目配置文件
        4. Maven安装目录结构 apache-maven-3.9.4-bin.zip
            bin    存放可执行文件
            conf   配置文件
            lib    Maven 所依赖的 jar 包

    新建 maven 
        File --> New --> Module --> Maven Archetype 
            Name: teo-hello
            Location: ~\IdeaProjects\teo-hello                                   \\ 项目路径
            Archetype: org.apache.maven.archetypes:maven-archetype-quickstart     \\ 模板 骨架  此模板为 javaSE 项目

            Advanced Settings
                Groupld: org.example              \\ 组织名 发布名  公司名
                Artifactld: src                   \\ 项目名
                Version: 1.0-SNAPSHOT             \\ 版本号 可以默认

  

    手动创建 maven 项目              // 亦可在windows 上创建
        # mkdir -p /data/maven01/src/{main,test}/{java,resource}
        # vim /data/maven01/src/pom.xml
            <?xml version="1.0" encoding="UTF-8"?>
            <project xmlns="http://maven.apache.org/POM/4.0.0"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
                <modelVersion>4.0.0</modelVersion>

                <groupId>com.teo</groupId>
                <artifactId>maven01</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <packaging>jar</packaging>

                <properties>
                    <maven.compiler.source>1.8</maven.compiler.source>
                    <maven.compiler.target>1.8</maven.compiler.target>
                    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                </properties>

                <dependencies>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>3.8.1</version>
                        <scope>test</scope>
                    </dependency>
                </dependencies>

            </project>

        # cd /data/maven01/src/
        # mkdir -p com/teo/deom/a.java
            package com.teo.demo;
            public class a {
                public static void main(String[] args){
                    System.out.println("Hello World !");
                }
            }
        # cd /data/maven01
        # mvn compile      \\ 编译项目 /data/maven01/   在此文件夹下执行 如果是windows 进入这个目录 打开powershell 执行
        # mvn exec:java -Dexec.mainClass="com.teo.demo.a"


四. idea 集成 Tomcat        //  一般不用配置 ...

    Tomcat 官网 https://tomcat.apache.org/
    
    1. idea是旗舰版 解压Tomcat 安装包
        Run --> Configure... --> 选择本地Tomcat路径
        URL: http://localhost:8080/
        
    2. Idea是社区版(免费版) 解压Tomcat 安装包
        文件 --> 设置 --> 插件 --> 搜索 --> Smart Tomcat --> 安装
        文件 --> 设置 --> 其他设置 --> Tomcat Server --> 选择tomcat安装目录

    创建 javaEE 工程
        File --> Project Structure --> Modules --> + --> New Module --> Java EE(Legacy)
        --> Web Application(勾选)


    手动 创建 war 包 发布项目
        PowerShell
            D:\ideaProjects\MyWeb\web01\web> jar -cvf web01.war .
            把 web01.war 放到 服务器 /usr/local/apache-tomcat-9.0.29/webapps 路径下即可 重新启动Tomcat服务器

    Tomcat 虚拟目录  // 可以发布 其他 目录下的 项目

        # vim server.xml
            <Context path="/web01" docBase="/data/web01" />
          </Host>

          // 在最后的</Host>标签上面添加
          // path 访问资源的虚拟目录名称
          // docBase 项目的路径  可以使绝对路径 也可是相对路径 如果是相对路径是在webapps下

    Tomcat 配置虚拟主机       // 可以使用对应域名 访问 对应目录
        
        # vim server.xml
            <Engine name="Catalina" defaultHost="localhost">    //在<Engine>标签下 添加 <Host></Host>
              <Host name="www.teo01.com"  appBase="/data"
                    unpackWARs="true" autoDeploy="false">
                <Context path="" docBase="teo01"/>
              </Host>


五. nvm 使用       node 版本 管理   Windws安装

    https://github.com/coreybutler/nvm-windows/releases // 下载地址 nvm-setup.zip 为 windows 安装版
    
    注: 安装路径不要有空格

    nvm 安装 node 及 node 配置
        # nvm list                    // 显示已经安装的版本                
        # nvm list installed          // 显示已经安装的版本    
        # nvm list available          // 显示所有可下载的版本
        # nvm install 0.12.0          // 安装12.13.0之前 需要安装 0.12.0 不安装 npm 报错 也不知道为什么
        # nvm install 12.13.0         // 安装12.13.0版本的 node  vue2 使用的 node 版本
        # nvm install 16.18.1         // vue3 使用的node 版本
        # nvm use 16.18.1
        # npm -v
        # npm config set registry https://registry.npmmirror.com/  // 设置镜像地址


        # npm install --registry=registry.npm.taobao.org      // 做什么用的 不清楚 会报错...

    Avue2 node 配置 及 启动
        # nvm use 12.13.0
        # npm install     // 安装项目的依赖库
        # npm run serve   // npm 启动命令1  可查配置文件中的配置 
        # npm run dev     // npm 启动命令2  可查配置文件中的会配置

    Avue3 node 配置 及 启动
        # nvm use 16.18.1
        # npm install -g yarn                   // 安装yarn  node版本好像是需要14以上的,我用的是这个16.18.1
        # set-ExecutionPolicy RemoteSigned      // 需要 以管理员身份运行 powershell 
        # get-ExecutionPolicy                   // 查看 返回RemoteSigned 即可
        # yarn install                          // 在安装依赖   如果提示 系统不允许 执行脚本 执行 上面 代码
        # yarn dev                              // 启动

    nvm 设置 国内镜像
        nvm node_mirror https://npmmirror.com/mirrors/node/         // 下载不了node时候 换此镜像地址
        nvm npm_mirror https://npmmirror.com/mirrors/npm/

    其他命令
        # nvm install latest          // 安装最新版本node
        # nvm use 12.13.0             // 使用12.13.0版本node
        # nvm uninstall 12.13.0       // 卸载指定版本node

        # nvm arch                // 显示node是运行在32位系统还是64位系统
        # nvm on                  // 开启nodejs版本管理
        # nvm off                 // 关闭nodejs版本管理
        # nvm proxy [url]         // 设置下载代理。不加可选参数url 显示当前代理 将url设置为none则移除代理
        # nvm node_mirror [url]   // 设置node镜像。默认是https://nodejs.org/dist/ 如果不写url 则使用默认url
                                  // 设置后可至安装目录settings.txt文件查看 也可直接在该文件操作
        # nvm npm_mirror [url]    // 设置npm镜像 https://github.com/npm/cli/archive/  如果不写url,则使用默认url
                                  // 设置后可至安装目录settings.txt文件查看,也可直接在该文件操作
        # nvm root [path]         // 设置存储不同版本node的目录 如果未设置,默认使用当前目录
        # nvm version             // 显示nvm版本 version可简化为v

        # npm config set registry https://registry.npmmirror.com/    // 设置镜像地址
        # npm config get registry                                    // 查看 镜像地址
        # npm config set registry https://registry.npmjs.org/        // 切换 官方地址
        # npm cache clean -f                                         // 清除换成  如果 还是 原来的源
        # npm config set proxy null                                  // 取消代理

    问题 执行yarn install命令的时候报错: info There appears to be trouble with your network connection. Retrying...
        删除 当前文件夹下面的  yarn.lock 即可



    npm 是 node 的一个 集成的工具  安装上node 就会自动安装 npm


    拿到 一个 vue 项目 在 VS 中 运行

        Ctrl + Shift + C  在 VS 下 打开终端
        



六. Git 常用的命令   这里只有最最最常用的命令  详细命令及安装 见  Linux --> Git

    # git checkout tmp               // 切换分支
    # git checkout -b tmp            // 基于当前 commit 创建 分支 tmp
    # git branch -av                 // 查看所有分支 *为当前使用的分支

    # git add .                      // 添加所有文件 添加到git 管理
    # git commit -m '新增收件人'
    # git push origin tmp:tmp        // 把 tpm 分支 同步到远端 tpm分支  远端不存在tmp 则会新建
    # git checkout -b teo1 568f2c6   // 创建 新分支 基于  commit的 号   不写commit号是基于当前号

    # gut checkout .                 // 放弃所有的文件改变   把 改变并且是未add的文件 恢复到原始状态
    # git reset --hard commit_id     // 退回到 指定 commit的

    # git branch -D tmp              // 强制删除tmp分支
    # git commit --amend             // 对最近一次 提交的  注释 做变更  之后 vim 操作即可
    # git push origin --delete tmp   // 删除远程分支 tmp 对于本地 tmp 没有影响


十. 其他注意事项
    
    widows C盘 权限 问题 会导致 有一些软件 安装不上 
        文件夹右键属性 --> 安全 --> 编辑 --> users --> 完全控制

    阿里云添加 公钥
        打开 PowerShell
            # ssh-keygen
            # cd ~/.ssh
            # cat id_rsa.pub
        登录后 --> 云效 --> 右上角图标 个人设置 --> SSH公钥 --> 把公钥 粘贴进去即可

    删除 我的电脑中 无用 图标
        计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\

            删除 下面 { ... }  {开头的文件夹}

            需要保留 DelegateFolders
     
    删除 我的电脑中 百度网盘 的 图标
        打开百度网盘 --> 设置 --> 在我的电脑中显示百度网盘(取消勾选)


    导入 米点数据库 遇到的问题
        yum 安装 mysql失败  执行此命令
            # rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
            # create user 'djwifi'@'%' identified by 'djWiFi@#20230308';  
            # grant all privileges on djwifi.* to 'djwifi'@'%' with grant option; 

    windows 下 关闭解除端口占用
      netstat -ano | findstr 8080
      tasklist | findstr 8080
      taskkill /F /PID 8080


    uTools 设置  双击  ctrl 截图文字识别
        设置 --> 呼出快捷键 --> 双击 Alt
        设置 --> 个人中心 --> 全员快捷键 --> 双击 ctrl 截图文字识别

    world Excel 图标 变白色  
        是 没有正确 卸载 wps 导致 重新安装wps 
        打开WPS配置窗口,然后点高级,打开高级窗口,去掉   WPS兼容第三方系统和软件  去勾,
        卸载 wps 即可 恢复 图标



    下载 Adobe Creative Cloud          https://creativecloud.adobe.com/zh-Hans