二:java 基础知识(2)-- 初始java/语法基础

news2024/11/24 17:20:32

目录

idea中文插件

第一个 Java 程序

Java数据类型,常量与变量

1. 数据类型

        1.1 基本数据类型

        1.2 引用数据类型

2. 常量

2.1 特性

2.2 定义常量

​编辑

3. 变量

        3.1 变量的定义与初始化

        3.2 变量的类型

局部变量:在方法内声明的变量,仅在方法内可见。

实例变量:在类中声明的变量,属于类的实例。每个对象都有自己的实例变量。

类变量(静态变量):使用 static 关键字声明,属于类而不是实例。所有对象共享同一个类变量。

4. 数据类型转换

4.1 自动转换(隐式转换)

4.2 强制转换(显式转换)

4.3 类型转换的注意事项

4.4 String 与基本数据类型之间的转换

5. Java 包装类

5.1 包装类的特点

5.2 自动装箱与拆箱

5.3 常用方法

Java运算符

1. 算术运算符

2. 关系运算符

3. 逻辑运算符

4. 位运算符(自生自灭吧,不写案例了)

5. 赋值运算符

6. 三元运算符

Java选择结构

1. if 语句

2. if-else 语句

3. if-else if-else 语句

4. switch 语句

Java循环结构

1. for 循环

2. while 循环

3. do-while 循环

Java一维数组

1. 数组的声明与初始化

2. 数组的特点

3. 数组的常用操作

Java方法

1. 方法的定义

2. 方法的示例

3. 方法的特点

4. 方法重载示例

5. 方法的调用

案例:学生成绩系统  输入学生成绩 计算分数


idea中文插件

重启软件

舒服了

第一个 Java 程序

jdk 只要加到环境变量里面 就有了

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
  • 类的定义:每个 Java 程序都必须有一个类,这里的 HelloWorld 是类名。
  • 主方法main 方法是程序的入口点,Java 程序从这里开始执行。快捷键 psvm
  • 输出语句:使用 System.out.println() 输出内容到控制台。 快捷键 sout 

Java数据类型,常量与变量

1. 数据类型

        1.1 基本数据类型

                基本数据类型用于存储简单的值。Java 定义了 8 种基本数据类型:

类型大小默认值说明
byte8 位0存储整数,范围 -128 到 127。
short16 位0存储整数,范围 -32,768 到 32,767。
int32 位0存储整数,范围 -2,147,483,648 到 2,147,483,647。
long64 位0L存储大整数,使用 L 后缀。
float32 位0.0f存储单精度浮点数,使用 f 后缀。
double64 位0.0存储双精度浮点数。
char16 位'\u0000'存储单个字符(Unicode 字符)。
boolean1 位(取决于 JVM)false只有两个值:truefalse

        使用示例

public class Main {
    public static void main(String[] args) {
        int count = 10;              // 整数类型
        double price = 19.99;       // 双精度浮点数
        char initial = 'A';         // 字符
        boolean isAvailable = true;  // 布尔值
        byte a = 129;  // 报错这就是存储范围的意义
        System.out.println(count);
        System.out.println(price);
        System.out.println(initial);
        System.out.println(isAvailable);
    }
}

        1.2 引用数据类型

                  引用数据类型用于存储对象的引用。包括类、接口、数组等。

  • :如 StringArrayListScanner 等自定义类的实例。
  • 接口:用于定义方法的协议。
  • 数组:用于存储多个同类型的值。
  • String name = "Alice";      // 字符串类型
    int[] numbers = {1, 2, 3};  // 整数数组
    

 

2. 常量

常量是在程序运行期间值不变的量。Java 使用 final 关键字来定义常量。

2.1 特性

  • 不可变性:常量一旦被赋值,不能再次修改。
  • 命名习惯:常量名通常使用全大写字母,单词之间用下划线分隔,以便于识别。

2.2 定义常量

使用示例

final double PI = 3.14159;  // 圆周率常量
final int MAX_USERS = 100;   // 最大用户数常量

尝试修改常量将导致编译错误

// PI = 3.14; // 这行代码会导致错误,因为 PI 是常量

3. 变量

变量是可以存储值并在程序运行期间修改的量。每个变量都有特定的数据类型。

        3.1 变量的定义与初始化

                定义变量需要指定类型和名称,初始化可以在声明时或稍后进行。

使用示例

public class Main {

    public static void main(String[] args) {
        int age;                    // 声明变量
        age = 25;                   // 初始化变量

        String greeting = "Hello";  // 声明并初始化变量
        System.out.println(age);
        System.out.println(greeting);

    }
}

        3.2 变量的类型

局部变量:在方法内声明的变量,仅在方法内可见。
void display() {
    int localVar = 5;      // 局部变量
    System.out.println(localVar);
}
实例变量:在类中声明的变量,属于类的实例。每个对象都有自己的实例变量。
public class Person {
    String name;           // 实例变量

    public Person(String name) {
        this.name = name;  // 通过构造函数初始化实例变量
    }
}
类变量(静态变量):使用 static 关键字声明,属于类而不是实例。所有对象共享同一个类变量。
public class Counter {
    static int count = 0;  // 类变量

    public Counter() {
        count++;            // 每创建一个对象,count 加 1
    }
}

4. 数据类型转换

分为两种主要类型:自动转换(隐式转换)和 强制转换(显式转换)。

4.1 自动转换(隐式转换)

当将一种类型的值赋给另一种类型的变量时,如果目标类型的范围大于源类型,Java 会自动进行转换,无需强制指定。这种转换通常发生在基本数据类型之间。

intlong

int num = 100;
long longNum = num;  // 自动转换

floatdouble

float floatNum = 5.5f;
double doubleNum = floatNum;  // 自动转换

charint

char character = 'A';
int asciiValue = character;  // 自动转换,得到 ASCII 值 65

4.2 强制转换(显式转换)

当将一种类型的值赋给另一种类型的变量时,如果目标类型的范围小于源类型,Java 要求使用强制转换。强制转换可能会导致数据丢失或精度降低,因此需要谨慎使用。

doubleint

double doubleNum = 9.78;
int intNum = (int) doubleNum;  // 强制转换,结果为 9,丢失小数部分

longint

long longValue = 100000L;
int intValue = (int) longValue;  // 强制转换,可能导致溢出

floatint 

float floatValue = 12.34f;
int intValue = (int) floatValue;  // 强制转换,结果为 12

4.3 类型转换的注意事项

  • 数据丢失:在强制转换时,尤其是从较大类型到较小类型,可能会导致数据丢失。例如,从 double 转换为 int 时,小数部分会被丢弃。
  • 溢出:在转换时,如果数值超出目标类型的范围,会导致溢出。例如,将一个很大的 long 值强制转换为 int,结果可能会出现意外值。
  • 对象类型的转换:对于引用数据类型,可以通过 instanceof 关键字进行类型检查,确保安全转换。
  • Object obj = "Hello, World!";
    if (obj instanceof String) {
        String str = (String) obj;  // 强制类型转换
    }
    

4.4 String 与基本数据类型之间的转换

String 转基本数据类型:使用包装类的静态方法。

String numberStr = "123";
int number = Integer.parseInt(numberStr);  // 转换为 int
double decimal = Double.parseDouble("3.14");  // 转换为 double

基本数据类型转 String:使用 String.valueOf()String 的构造函数。

int num = 456;
String numStr = String.valueOf(num);  // 转换为 String

5. Java 包装类

        在 Java 中,基本数据类型(如 intcharboolean 等)通常被称为原始类型,它们是非对象类型。为了能够将基本类型视为对象,并提供一些额外的功能,Java 提供了相应的包装类。每种基本数据类型都有一个对应的包装类,这些类都位于 java.lang 包中。
前面是基本数据类型  后面是包装类

byte         Byte 

short         Short 

int         Integer 

long         Long 

float         Float 

double         Double 

char         Character 

boolean         Boolean
5.1 包装类的特点
  • 对象:包装类是对象,具有方法和属性,可以用来处理基本数据类型的值。
  • 不可变性:包装类的对象一旦创建,其值不能被改变。例如,Integer 对象的值不可变。不是不能修改 是修改之后 不在原来的内存地址了。
  • 提供有用的方法:包装类提供了许多有用的方法,如解析字符串、比较大小、转换为其他数据类型等。
5.2 自动装箱与拆箱

Java 5 引入了自动装箱(Auto-boxing)和自动拆箱(Auto-unboxing)特性,允许基本类型与包装类之间的自动转换。

自动装箱:将基本类型自动转换为对应的包装类。

int primitiveInt = 10;
Integer wrappedInt = primitiveInt;  // 自动装箱

自动拆箱:将包装类自动转换为对应的基本类型。

Integer wrappedInt = new Integer(20);
int primitiveInt = wrappedInt;  // 自动拆箱
5.3 常用方法

每个包装类都提供了一些常用的方法:

Integer

int intValue = Integer.parseInt("123");  // 字符串转整数
String strValue = Integer.toString(456);  // 整数转字符串

Double

double doubleValue = Double.parseDouble("3.14");  // 字符串转双精度浮点数

Boolean

boolean boolValue = Boolean.parseBoolean("true");  // 字符串转布尔值

Java运算符

        运算符提供了多种方式来处理数据和控制程序的流。

1. 算术运算符

  • + :加法,例如 a + b
  • - :减法,例如 a - b
  • * :乘法,例如 a * b
  • / :除法,例如 a / b(整除会舍去小数部分)
  • % :取余(模),例如 a % b
  • public class Main {
    
        public static void main(String[] args) {
            int a = 10;
            int b = 3;
    
            // 加法
            int sum = a + b;
            System.out.println("a + b = " + sum);  // 输出 13
    
            // 减法
            int difference = a - b;
            System.out.println("a - b = " + difference);  // 输出 7
    
            // 乘法
            int product = a * b;
            System.out.println("a * b = " + product);  // 输出 30
    
            // 除法
            int quotient = a / b;
            System.out.println("a / b = " + quotient);  // 输出 3
    
            // 取余
            int remainder = a % b;
            System.out.println("a % b = " + remainder);  // 输出 1
        }
    
    
    }

2. 关系运算符

  • == :等于,例如 a == b
  • != :不等于,例如 a != b
  • > :大于,例如 a > b
  • < :小于,例如 a < b
  • >= :大于等于,例如 a >= b
  • <= :小于等于,例如 a <= b
  • public class Main {
    
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
    
            // 等于运算符
            boolean isEqual = (a == b);
            System.out.println("a == b: " + isEqual);  // 输出 false
    
            // 不等于运算符
            boolean isNotEqual = (a != b);
            System.out.println("a != b: " + isNotEqual);  // 输出 true
    
            // 大于运算符
            boolean isGreater = (a > b);
            System.out.println("a > b: " + isGreater);  // 输出 false
    
            // 小于运算符
            boolean isLess = (a < b);
            System.out.println("a < b: " + isLess);  // 输出 true
    
            // 大于等于运算符
            boolean isGreaterOrEqual = (a >= b);
            System.out.println("a >= b: " + isGreaterOrEqual);  // 输出 false
    
            // 小于等于运算符
            boolean isLessOrEqual = (a <= b);
            System.out.println("a <= b: " + isLessOrEqual);  // 输出 true
        }
    
    
    }

3. 逻辑运算符

  • && :逻辑与(AND),例如 a && b
  • || :逻辑或(OR),例如 a || b
  • ! :逻辑非(NOT),例如 !a
  • public class Main {
    
        public static void main(String[] args) {
            boolean a = true;
            boolean b = false;
    
            // 逻辑与运算符
            boolean andResult = a && b;
            System.out.println("a && b: " + andResult);  // 输出 false
    
            // 逻辑或运算符
            boolean orResult = a || b;
            System.out.println("a || b: " + orResult);    // 输出 true
    
            // 逻辑非运算符
            boolean notA = !a;
            System.out.println("!a: " + notA);            // 输出 false
    
            boolean notB = !b;
            System.out.println("!b: " + notB);            // 输出 true
        }
    
    }

4. 位运算符(自生自灭吧,不写案例了)

  • & :按位与,例如 a & b
  • | :按位或,例如 a | b
  • ^ :按位异或,例如 a ^ b
  • ~ :按位取反,例如 ~a
  • << :左移,例如 a << 2
  • >> :右移,例如 a >> 2
  • >>> :无符号右移,例如 a >>> 2

5. 赋值运算符

  • = :赋值,例如 a = 5
  • += :加法赋值,例如 a += 3 (相当于 a = a + 3
  • -= :减法赋值,例如 a -= 2
  • *= :乘法赋值,例如 a *= 4
  • /= :除法赋值,例如 a /= 2
  • %= :取余赋值,例如 a %= 3
  • &= :按位与赋值,例如 a &= b
  • |= :按位或赋值,例如 a |= b
  • ^= :按位异或赋值,例如 a ^= b
  • <<= :左移赋值,例如 a <<= 2
  • >>= :右移赋值,例如 a >>= 2
  • >>>= :无符号右移赋值,例如 a >>>= 2
  • public class Main {
    
        public static void main(String[] args) {
            int a = 5;  // 基本赋值
            int b = 3;  // 基本赋值
    
            // 加法赋值
            a += 3;  // 相当于 a = a + 3
            System.out.println("a += 3: " + a);  // 输出 8
    
            // 减法赋值
            a -= 2;  // 相当于 a = a - 2
            System.out.println("a -= 2: " + a);  // 输出 6
    
            // 乘法赋值
            a *= 4;  // 相当于 a = a * 4
            System.out.println("a *= 4: " + a);  // 输出 24
    
            // 除法赋值
            a /= 2;  // 相当于 a = a / 2
            System.out.println("a /= 2: " + a);  // 输出 12
    
            // 取余赋值
            a %= 5;  // 相当于 a = a % 5
            System.out.println("a %= 5: " + a);  // 输出 2
    
            // 按位与赋值
            a &= b;  // 相当于 a = a & b
            System.out.println("a &= b: " + a);  // 输出 2 (0000 0010)
    
            // 按位或赋值
            a |= b;  // 相当于 a = a | b
            System.out.println("a |= b: " + a);  // 输出 3 (0000 0011)
    
            // 按位异或赋值
            a ^= b;  // 相当于 a = a ^ b
            System.out.println("a ^= b: " + a);  // 输出 0 (0000 0000)
    
            // 左移赋值
            a = 5;  // 重置 a
            a <<= 2;  // 相当于 a = a << 2
            System.out.println("a <<= 2: " + a);  // 输出 20 (0001 0100)
    
            // 右移赋值
            a >>= 2;  // 相当于 a = a >> 2
            System.out.println("a >>= 2: " + a);  // 输出 5 (0000 0101)
    
            // 无符号右移赋值
            a >>>= 2;  // 相当于 a = a >>> 2
            System.out.println("a >>>= 2: " + a);  // 输出 1 (0000 0001)
        }
    
    }

6. 三元运算符

  • (条件) ? 表达式1 : 表达式2
  • public class Main {
    
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
    
            // 使用三元运算符判断哪个数更大
            int max = (a > b) ? a : b;
            System.out.println("最大值: " + max);  // 输出 20
    
            // 判断是否为偶数
            String result = (a % 2 == 0) ? "偶数" : "奇数";
            System.out.println(a + " 是 " + result);  // 输出 "10 是 偶数"
    
            // 判断是否大于 15
            String comparison = (a > 15) ? "大于 15" : "不大于 15";
            System.out.println(a + " " + comparison);  // 输出 "10 不大于 15"
        }
    }

Java选择结构

1. if 语句

用于在条件为 true 时执行代码块。

public class Main {

    public static void main(String[] args) {
        int score = 85;

        if (score >= 60) {
            System.out.println("及格");
        }
    }
}

2. if-else 语句

用于在条件为 true 时执行一块代码,如果条件为 false 则执行另一块代码。

public class Main {

    public static void main(String[] args) {
        int score = 50;

        if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

3. if-else if-else 语句

用于处理多个条件。

public class Main {

    public static void main(String[] args) {
        int score = 75;

        if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 75) {
            System.out.println("良好");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

4. switch 语句

用于根据一个表达式的值执行不同的代码块,通常用于处理多个可能的常量值。

public class Main {

    public static void main(String[] args) {
        int day = 3;
        String dayName;

        switch (day) {
            case 1:
                dayName = "星期一";
                break;
            case 2:
                dayName = "星期二";
                break;
            case 3:
                dayName = "星期三";
                break;
            case 4:
                dayName = "星期四";
                break;
            case 5:
                dayName = "星期五";
                break;
            case 6:
                dayName = "星期六";
                break;
            case 7:
                dayName = "星期日";
                break;
            default:
                dayName = "无效的输入";
                break;
        }
        System.out.println("今天是: " + dayName);
    }
}

Java循环结构

1. for 循环

for 循环用于当已知循环次数时的情况。它的语法如下:

for (初始化; 条件; 更新) {
    // 循环体
}
 public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("第 " + i + " 次循环");
        }
    }

2. while 循环

while 循环用于当循环次数不确定时的情况,循环在条件为 true 时执行。

  public static void main(String[] args) {
        int i = 1;
        while (i <= 5) {
            System.out.println("第 " + i + " 次循环");
            i++;
        }
    }

3. do-while 循环

do-while 循环与 while 循环类似,但至少执行一次循环体,因为条件是在循环体之后进行判断的。

  public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println("第 " + i + " 次循环");
            i++;
        } while (i <= 5);
    }

Java一维数组

一维数组是存储相同类型数据的一种数据结构。它是一种线性数据结构,可以通过索引访问数组中的每个元素。

1. 数组的声明与初始化

可以在声明数组时初始化它,也可以单独声明和初始化。

public class Main {

    public static void main(String[] args) {
        // 声明并初始化数组
        int[] numbers = {1, 2, 3, 4, 5};
        //运用活一点
        long[] numbers1 = {1, 2, 3, 4, 5};
        String[] numbers2 = {String.valueOf(1), String.valueOf(2), String.valueOf(3), "4", "5"};

        // 或者先声明再初始化
        int[] moreNumbers = new int[5];  // 声明一个长度为 5 的数组
        moreNumbers[0] = 10;
        moreNumbers[1] = 20;
        moreNumbers[2] = 30;
        moreNumbers[3] = 40;
        moreNumbers[4] = 50;

        // 输出数组元素
        System.out.println("numbers 数组:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("Index " + i + ": " + numbers[i]);
        }

        System.out.println("\nmoreNumbers 数组:");
        for (int i = 0; i < moreNumbers.length; i++) {
            System.out.println("Index " + i + ": " + moreNumbers[i]);
        }
    }
}

2. 数组的特点

  • 固定大小:一旦创建,数组的大小不可更改。
  • 索引访问:可以通过索引访问数组的元素,索引从 0 开始。
  • 相同类型:数组中所有元素的数据类型必须相同。

3. 数组的常用操作

  • 获取数组长度:使用 array.length 可以获取数组的长度。
  • 遍历数组:可以使用 for 循环或增强的 for-each 循环来遍历数组。
  • public class Main {
    
        public static void main(String[] args) {
            int[] numbers = {1, 2, 3, 4, 5};
    
            System.out.println("使用 for-each 循环遍历数组:");
            for (int number : numbers) {
                System.out.println(number);
            }
        }
    }

Java方法

方法是 Java 中执行特定任务的代码块,可以重用代码,提高程序的可读性和可维护性。方法可以接受参数,并返回结果。

1. 方法的定义

返回类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) {
    // 方法体
}

2. 方法的示例

public class Main {
    // 定义一个方法,计算两个整数的和
    public static int add(int a, int b) {
        return a + b;  // 返回结果
    }

    // 定义一个方法,打印问候信息
    public static void greet(String name) {
        System.out.println("你好, " + name + "!");
    }

    public static void main(String[] args) {
        // 调用方法
        int sum = add(5, 10);  // 调用 add 方法
        System.out.println("和: " + sum);  // 输出和

        greet("Alice");  // 调用 greet 方法
    }
}

3. 方法的特点

  • 返回类型:方法可以有返回值,也可以没有(使用 void 关键字)。
  • 参数:方法可以接受零个或多个参数,参数可以是基本数据类型或对象类型。
  • 方法重载:可以在同一个类中定义多个同名但参数不同的方法,这称为方法重载。

4. 方法重载示例

    // 重载的方法:计算两个整数的和
    public static int add(int a, int b) {
        return a + b;
    }

    // 重载的方法:计算三个整数的和
    public static int add(int a, int b, int c) {
        return a + b + c;
    }

    public static void main(String[] args) {
        System.out.println("两个数的和: " + add(5, 10));          // 输出 15
        System.out.println("三个数的和: " + add(5, 10, 15));     // 输出 30
    }

5. 方法的调用

  • 在同一类中调用:可以直接使用方法名调用。
  • 在其他类中调用:需要创建该类的对象,或者如果方法是 static 的,可以直接使用类名调用。

案例:学生成绩系统  输入学生成绩 计算分数

import java.util.Scanner;

public class Main {

    // 定义常量
    static final int MAX_STUDENTS = 5;  // 最大学生数量

    // 方法:添加成绩
    public static void addGrades(double[] grades) {
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < grades.length; i++) {
            System.out.print("请输入第 " + (i + 1) + " 个学生的成绩: ");
            grades[i] = scanner.nextDouble();
        }
    }

    // 方法:计算总分
    public static double calculateTotal(double[] grades) {
        double total = 0;
        for (double grade : grades) {
            total += grade;  // 累加成绩
        }
        return total;
    }

    // 方法:计算平均分
    public static double calculateAverage(double total, int count) {
        return total / count;  // 计算平均分
    }

    // 方法:输出成绩等级
    public static void printGrades(double[] grades) {
        System.out.println("\n学生成绩及等级:");
        for (double grade : grades) {
            String level;
            if (grade >= 90) {
                level = "优秀";
            } else if (grade >= 75) {
                level = "良好";
            } else if (grade >= 60) {
                level = "及格";
            } else {
                level = "不及格";
            }
            System.out.println("成绩: " + grade + " - 等级: " + level);
        }
    }

    public static void main(String[] args) {
        double[] grades = new double[MAX_STUDENTS];  // 创建存储成绩的数组

        // 添加成绩
        addGrades(grades);

        // 计算总分和平均分
        double total = calculateTotal(grades);
        double average = calculateAverage(total, MAX_STUDENTS);

        // 输出总分和平均分
        System.out.println("\n总分: " + total);
        System.out.println("平均分: " + average);

        // 输出成绩等级
        printGrades(grades);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2229690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AAOS】【源码分析】CarSystemUI -- CarSystemBar

CarSystemBar不像Android手机那样固定的顶部“状态栏”和底部“导航栏”,而是将StatusBar和NavigationBar都统称为SystemBar,可以通过如下配置为每侧最多配置一个“系统栏”。 packages/apps/Car/SystemUI/res/values/config.xml<!-- Configure which system bars should …

企业物流管理数据仓库建设的全面指南

文章目录 一、物流管理目标二、总体要求三、数据分层和数据构成&#xff08;1&#xff09;数据分层&#xff08;2&#xff09;数据构成 四、数据存储五、数据建模和数据模型&#xff08;1&#xff09;数据建模&#xff08;2&#xff09;数据模型 六、总结 在企业物流管理中&…

多线程学习篇六:park / unpark

1. API LockSupport.park()&#xff1a;暂停当前线程LockSupport.unpark (线程对象)&#xff1a;恢复某个线程的运行 1.1 先 park 再 unpark main 线程睡眠时间大于 t1 线程睡眠时间 Slf4j(topic "c.Test01") public class Test01 {public static void main(Str…

计算机网络:网络层 —— IPv4 数据报的首部格式

文章目录 IPv4数据报的首部格式IPv4数据报分片生存时间 TTL字段协议字段首部检验和字段 IPv4数据报的首部格式 IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。 在 TCP/IP 标准中&#xff0c;各种数据格式常常以32比特(即4字节)为单位来描述 固定部分&#x…

基于SSM演出道具租赁系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;道具类型管理&#xff0c;道具出租管理&#xff0c;租赁订单管理&#xff0c;道具归还管理&#xff0c;系统管理 商家账号功能包括&#xff1a;系统首页&…

《使用Gin框架构建分布式应用》阅读笔记:p272-p306

《用Gin框架构建分布式应用》学习第15天&#xff0c;p272-p306总结&#xff0c;总35页。 一、技术总结 1.TDD(test-driven development) 虽然经常看到TDD这个属于&#xff0c;从本人的工作经历看&#xff0c;实际开发中用得相对较少。 2.unitest(单元测试) go语言开发中&a…

三种SPI机制的了解及使用

文章目录 1.SPI机制概念2.Java SPI2.1 创建一个项目&#xff0c;并创建如下模块2.2 db-api模块2.3 mysql-impl模块2.4 oracle-impl模块2.5 main-project模块 3.Spring SPI4.Dubbo SPI 1.SPI机制概念 SPI全程Service Provider Interface&#xff0c;是一种服务发现机制。 SPI的…

【Linux系统编程】第四十弹---深入理解操作系统:信号捕捉、可重入函数、volatile关键字与SIGCHLD信号解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、捕捉信号 1.1、内核如何实现信号的捕捉 1.2、内核态与用户态 1.3.1、用户态&#xff08;User Space&#xff09; 1.3.2、…

【面试】数组中 Array.forEach()、Array.map() 遍历结束后是否改变原数组

forEach 、map 同理 数组内元素是 基本数据类型 时&#xff0c; 1.1. 直接给 item赋值&#xff0c;是 不会改变原数组 的&#xff08;如图中1&#xff09;&#xff0c; 1.2. 通过 原数组索引赋值 是会改变原数组的&#xff08;如图中2&#xff09;数组内元素是 复杂数据类型 时…

List<T>属性和方法使用

//author&#xff1a;shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装&#xff0c;如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…

视频去水印软件哪个好?这些软件值得一试

无论是社交媒体上的短视频&#xff0c;还是专业网站上的长视频&#xff0c;去除视频中的水印成为了许多人的需求。 选择一款合适的视频去水印软件&#xff0c;可以帮助我们轻松去除视频中的不必要标记&#xff0c;保持视频的完整性和美观。 那么&#xff0c;视频去水印软件哪…

qt QDoubleSpinBox详解

1、概述 QDoubleSpinBox是Qt框架中的一个控件&#xff0c;专门用于浮点数&#xff08;即小数&#xff09;的输入和调节。它提供了一个用户界面元素&#xff0c;允许用户在预设的范围内通过拖动滑块、点击箭头或使用键盘来递增或递减浮点数值。QDoubleSpinBox通常用于需要精确数…

在基于AWS EC2的云端k8s环境中 搭建开发基础设施

中间件下载使用helm,这里部署的都是单机版的 aws-ebs-storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: aws-ebs-storageclass provisioner: kubernetes.io/aws-ebs parameters:type: gp2 # 选择合适的 EBS 类型&#xff0c;如 gp2、io1…

MATLAB与STK互联:仿真并获取低轨卫星与指定区域地面站的可见性数据

MATLAB控制STK实现&#xff1a;仿真并获取低轨卫星与指定区域地面站的可见性数据 本次仿真主要参考了多篇文献和网站&#xff0c;包括但不限于&#xff1a;《Using MATLAB for STK Automation》、CSDN博文&#xff1a; 拜火先知的博客_CSDN博客-笔记、AGI官网有关MATLAB的内容…

docker engine stopped

1&#xff09;环境&#xff1a;win 10 2&#xff09;docker安装时已经已经安装了虚拟机 3&#xff09;启用网络适配器 4&#xff09;启用docker服务&#xff08;依赖服务LanmanServer&#xff09; 5&#xff09;全都弄好了&#xff0c;docker还是打不开&#xff0c;没办法了&a…

天翼网关 3.0 兆能 ZNHG600 获取超级密码改桥接

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 前不久朋友家断网&#xff0c;喊了宽带师傅修完之后&#xff0c;光猫就从桥接模式变成了路由模式。虽然对于日常上网来说区别不大&#xff0c;但这条宽带有公网 IP&#xff0c;通过光猫拨号的话&#xff0…

C语言常见进制 (二进制、八进制、十进制、十六进制)详解

C语言常见进制的详解 放在最前面的前言&#xff1a;1、分类2、二进制&#xff08;2.1&#xff09;二进制的解释说明&#xff08;2.2&#xff09;关于二进制的计算&#xff08;2.3&#xff09; 二进制转换为八进制&#xff08;2.4&#xff09; 二进制转换为十进制 3、八进制&…

在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法

本次介绍分为3篇文章&#xff1a; 1&#xff1a;.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2&#xff1a;在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3&#xff1a;.NET …

初识动态规划(由浅入深)

&#x1f913; 动态规划入门与进阶指南 &#x1f4d8; 动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种非常经典的&#x1f4d0;算法方法&#xff0c;特别适合用来解决那些有大量重复计算的问题&#x1f300;。它可以将复杂的问题拆分为小问题&#x1f9e9;&a…