Java SE 基础

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>标签上面 添加 三行代码











Teo

You must be logged in to post a comment