Java开发从入门到精通(一):Java的基础语法知识高阶:静态数组、动态数组、代码调试

news2024/11/24 21:21:55

Java大数据开发和安全开发

  • (一)Java的数组
    • 1.1 静态初始化数组
      • 1.1.1 静态数组的定义
      • 1.1.2 数组的原理
      • 1.1.3 数组的访问
        • 1.1.3.1 数组的取值
        • 1.1.3.2 数组的赋值
        • 1.1.3.3 数组的长度
        • 1.1.3.4 数组的使用
      • 1.1.4 数组的遍历
      • 1.1.3 数组的案例
    • 1.2 动态初始化数组
      • 1.2.1 动态初始化数组的定义
      • 1.2.1 数组的案例
    • 1.3 数组的执行原理,Java程序的执行原理
      • 1.3.1 **多个变量指向同一个数组的问题**
      • 1.3.2 使用数组时常见的一个问题
      • 数组执行原理总结
    • 1.4 数组的练习案例
      • 1.4.1 求最大值
      • 1.4.2 数组反转
      • 1.4.3 随机排名
    • 1.5 debug工具的使用
      • 1.5.1 第一步 设置断点
      • 1.5.2 第二步 启动调试
      • 1.5.3 第三步 介绍键位
      • 1.5.3 第四步 单步执行

(一)Java的数组

  • 数组就是一个容器,用来存储一批同种类型的数据
    在这里插入图片描述

有变量,为什么还用数组?

  • 下面是一个随机点名的系统

在这里插入图片描述
假设用变量解决随机点名的需求:

  • 代码繁琐:大量变量的定义。 实现需求繁琐。

在这里插入图片描述
假设用数组解决随机点名的需求:

  • 代码简洁。 逻辑清晰。

在这里插入图片描述

结论:遇到批量数据的存储和操作时,数组比变量更适合

1.1 静态初始化数组

1.1.1 静态数组的定义

  • 定义数组的时候直接给数组赋值

静态初始化数组的格式:

在这里插入图片描述
在这里插入图片描述
注意

  • “数据类型 [ ] 数组名”也可写成“数据类型 数组名[ ]”
  • 什么类型的数组只能存放什么类型的数据。
public class ArrayDemo {
    public static void main(String[] args) {
        // 目标:掌握数组的定义方式一:静态初始化数组。
        // 1、数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,.....}
        int[] ages =new int[]{12,24,36};
        double[] scores =new double[]{89.9,99.5,59.5,88};

        // 2、简化写法:
        // 数据类型[] 数组名 = {元素1,元素2,元素3,.....}
        int[] ages2 ={12,24,36};
        double[] scores2 = {89.9,99.5,59.5,88};
        
        // 3、数据类型[] 数组名 也可以写成 数据类型 数组名[] 
        int ages3[] ={12,24,36};   //不推荐
        double scores3[]  = {89.9,99.5,59.5,88};
    }
}

1.1.2 数组的原理

声明一个数组,首先是在内存中分出一块盒子,盒子内部分成两个区域,一个区域保存数组变量,一个区域保存数组的值,数组的值又分成三部分,每个部分独立存储一个数据,每个数据都有自己的下标被用来提供访问,数组的值在内存中以地址的形式被记录,变量中保存的也是数组的内存地址,访问数组的变量就会指向这个内存地址,从而找到数组的值,这也叫传值引用
在这里插入图片描述
验证数组变量的值的指向:

public class ArrayDemo {
    public static void main(String[] args) {
        // 目标:掌握数组的定义方式一:静态初始化数组。
        // 1、数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,.....}
        int[] ages =new int[]{12,24,36};
        double[] scores =new double[]{89.9,99.5,59.5,88};
		System.out.println(ages);
        System.out.println(scores);
    }
}
[I@4554617c  //指向内存地址 
[D@74a14482

注意:数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型

1.1.3 数组的访问

数组的访问

  • 数组名 [索引]
1.1.3.1 数组的取值
/1 取值
System.out.println(arr[0]);//12
1.1.3.2 数组的赋值
// 赋值
arr[2]= 100;
System.out.println(arr[2]);//100
1.1.3.3 数组的长度

数组的长度属性:length

//获取数组的长度(就是数组元素的个数)
System.out.println(arr.length); //3

// 3、访问数组的元素个数:数组名.length
System.out.println(arr1.length);
// 技巧:获取数组的最大索引:arr.length-1(前提是数组中存在数据)
System.out.println(arr1.length-1);
int[] arr2 = {};  //并不是所有数组的长度都是length-1
System.out.println(arr2.length-1);
1.1.3.4 数组的使用
public class ArrayDemo1 {
    public static void main(String[] args) {
        //1 访问数组中的值
        int[] arr1 = {12, 25, 63, 45};
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);

        //2 修改数组中的值
        System.out.println(arr1[0]=21);
        System.out.println(arr1[1]=22);
        System.out.println(arr1[2]=23);
        System.out.println(arr1[3]=24);

    }
}

1.1.4 数组的遍历

  • 遍历:就是一个一个数据的访问
public class ArrayDemo1 {
    public static void main(String[] args) {
        //1 访问数组中的值
        int[] arr1 = {12, 25, 63, 45};
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);

        for (int i = 0; i < arr1.length;i++){
            System.out.println(arr1[i]); //访问
        }

        //2 修改数组中的值
        System.out.println(arr1[0]=21);
        System.out.println(arr1[1]=22);
        System.out.println(arr1[2]=23);
        System.out.println(arr1[3]=24);

        for (int i = 0; i < arr1.length;i++){
            arr1[i] =i+1;  //赋值
            System.out.println(arr1[i]);
        }

        // 3、访问数组的元素个数:数组名.length
        System.out.println(arr1.length);
        // 技巧:获取数组的最大索引:arr.length-1(前提是数组中存在数据)
        System.out.println(arr1.length-1);
        int[] arr2 = {};  //并不是所有数组的长度都是length-1
        System.out.println(arr2.length-1);
    }
}

为什么要遍历数组?

  • 求和 元素搜索 找最大值、最小值

1.1.3 数组的案例

在这里插入图片描述

public class ArrayDemo2 {
    public static void main(String[] args) {
        // 目标:完成对数组的元素求和。
        // 1.定义一个数组存储5名员工的销售额
        int[] arr1 = {16,26,36,6,100};

        //3、定义一个变量用于累加求和
        int sum = 0;
        //2、遍历这个数组中的每个数据。
        for (int i=0;i<arr1.length;i++){
            sum += arr1[i];
        }
        System.out.println("员工的销售总额:" + sum);

    }
}

1.2 动态初始化数组

1.2.1 动态初始化数组的定义

  • 定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度
  • 静态初始化和动态初始化数组的写法是独立的,不可以混用

数组的动态初始化格式:
在这里插入图片描述

import java.util.Random;

public class ArrayDemo3 {
    public static void main(String[] args) {
        // 目标:掌握定义数组的方式二:动态初始化数组。
        // 1、数据类型[]数组名=new 数据类型[长度]
        int[] ages =new int[3];  //ages =[0,0,0]
        System.out.println(ages[0]);
        System.out.println(ages[1]);
        System.out.println(ages[2]);
        ages[0]= 12;
        ages[1]= 18;
        ages[2]= 32;
        System.out.println(ages[0]);
        System.out.println(ages[1]);
        System.out.println(ages[2]);

        // 2、动态数组循环赋值 数据类型[]数组名=new 数据类型[长度]
        int[] arr1 = new int[10];
        
        for (int i=0; i<10;i++){
            Random r = new Random();
            int num = r.nextInt(10);
            arr1[i] = num;
        }
        System.out.println(arr1.length);
    }
}

动态初始化数组元素默认值规则:
在这里插入图片描述
在这里插入图片描述

public class ArrayDemo3 {
    public static void main(String[] args) {     
        int[] age1 =new int[3];  //age1 =[0,0,0]
        System.out.println(age1[0]);
        System.out.println(age1[1]);
        System.out.println(age1[2]);

        char[]chars = new char[3];// [0,0,0]
        System.out.println((int)chars[0]);
        System.out.println((int)chars[2]);

        double[] scores = new double[80];// [0.0, 0.0]
        System.out.println(scores[0]);
        System.out.println(scores[79]);

        boolean[] flags = new boolean[100]; // [false, false]
        System.out.println(flags[0]);
        System.out.println(flags[99]);

        String[] names = new String[80];// [null, null]
        System.out.println(names[0]);
        System.out.println(names[79]);
    }
}

两种数组定义的方法各自适合什么业务场景?

  • 动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景
  • 静态初始化:适合一开始就知道要存入哪些元素值的业务场景

1.2.1 数组的案例

在这里插入图片描述

import java.util.Scanner;

public class ArrayDemo4 {
    public static void main(String[] args) {
        // 目标:完成评委打分的案例。
        // 1、定义一个动态初始化的数组,负责后期存储6个评委的打分。
        double[] scores = new double[6];
        System.out.println(scores.length);
        double sum =0;
        Scanner sc = new Scanner(System.in);
        // 2、遍历数组中的每个位置,录入评委的分数,存入到数组中去
        for (int i=0;i<scores.length;i++){
            System.out.println("请输入第" +(i+1)+"位裁判的评分");
            double num = sc.nextDouble();
            scores[i] = num;
        }
        //3、遍历数组中的每个元素进行求和
        for (int j=0; j < scores.length;j++){
            sum += scores[j];
        }
        System.out.println("选手的平均分为" + sum / scores.length);


    }
}

1.3 数组的执行原理,Java程序的执行原理

  • java程序在编译后会产生一个class文件

在这里插入图片描述

  • Java程序运行时会把class文件放到内存中的JVM虚拟机中执行

在这里插入图片描述

  • Java为了便于虚拟机运行class文件,将虚拟机中的内存区域进行了划分,划分成了方法区、栈、堆,本地方法栈、程序计数器

在这里插入图片描述
java程序运行时,会将class文件方法方法区,然后使用栈内存加载程序中的main方法,main中new出来的东西都放在堆内存中,并且拥有自己的内存地址
在这里插入图片描述

在这里插入图片描述

理解下面代码执行的顺序

public class ArrayDemo5 {
    public static void main(String[] args) {

        // 目标:掌握普通变量、数组在计算机中的执行原理,Java程序在计算机中的执行过程
        int a= 20;
        System.out.println(a);

        int[]arr =new int[]{11,22,33};
        System.out.println(arr);
        
        System.out.println(arr[1]);

        arr[0]= 44;
        arr[1]= 55;
        arr[2]=66;

        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}
  • ● a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
  • ● new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数
  • ● arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值,

1.3.1 多个变量指向同一个数组的问题

在这里插入图片描述

public class ArrayDemo6 {
    public static void main(String[] args) {
        // 目标:认识多个变量指向同一个数组对象的形式,并掌握其注意事项、
        int[] arr1 ={11,22,33};
        
        // 把int类型的数组变量arr1赋值给int类型的数组变量arr2 
        int[] arr2 = arr1;
        
        System.out.println(arr1);
        System.out.println(arr2);
        
        arr2[1]= 99;
        System.out.println(arr1[1]);
    }
}

1.3.2 使用数组时常见的一个问题

  • 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象

在这里插入图片描述

数组执行原理总结

1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?

  • 多个数组变量中存储的是同一个数组对象的地址
  • 多个变量修改的都是同一个数组对象中的数据。

2、如果某个数组变量中存储的nul,代表什么意思?需要注意什么?

  • ●代表这个数组变量没有指向数组对象
  • ●可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,会报空指针异常:NullPointerException。

1.4 数组的练习案例

1.4.1 求最大值

  • 把数据拿到程序中去,用数组装起来,
  • 定义一个变量max用于记录最大值,
  • max变量默认存储了第一个元素值作为参照物。
  • 从第二个位置开始遍历数组的数据,如果当前元素大于变量存储的数据,则替换变量存储的值为该元素 循环结束后输出max变量即可,
import java.util.Random;

public class ArrayTest {
    public static void main(String[] args) {
        // 目标:掌握数组元素求最值。
        // 1、把颜值数据拿到程序中来,用数组装起来
        int[] faceScores = {15, 9000, 10000, 20000, 9500, -5};

        // 2、定义一个变量用于最终记住最大值。
        int max = faceScores[0];

        //3、从数组的第二个位置开始遍历。
        for (int i = 1; i < faceScores.length; i++) {
            //i=1234 51! 判断一下当前遍历的这个数据,是否大于最大值变量max存储的数据,如果大于,当前遍历的数据需要赋值给max
            if (faceScores[i] > max) {
                max = faceScores[i];
            }
        }
        System.out.println("最高颜值是:" + max);
        
        //2
        int[] arr1 = new int[10];
        Random random = new Random();
        for (int i = 0; i < arr1.length; i++) {
            int num1 = random.nextInt(10 + 1);
            arr1[i] = num1;
        }
        int num2 = arr1[0];
        for (int i = 1; i < arr1.length; i++) {
            if (arr1[i] > num2) {
                num2 = arr1[i];
            }
        }
        System.out.println(num2);
    }
}

1.4.2 数组反转

需求

  • 某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转
  • [10,20,30,40,50] 反转后 [50,40,30,20,10]
    在这里插入图片描述
public class ArrayTest1 {
    public static void main(String[] args) {
        // 目标:完成数组反转。
        // 1、准备一个数组
        int[] arr ={10,20,40,50};
        // 2、定义一个循环,设计2个变量,一个在前,一个在后
        for(int i=0, j=arr.length-1; i<j; i++, j--) {
            // arr[i]   arr[j]
            //交换
            // 1、定义一个临时变量记住后一个位置处的值
            int temp = arr[j];
            // 2、把前一个位置处的值赋值给后一个位置了
            arr[j] = arr[i];
            // 3、把临时变量中记住的后一个位置处的值赋值给前一个位置处
            arr[i] = temp;
        }
        // 3、遍历数组中的每个数据,看是否反转成功了
        for (int i=0;i < arr.length; i++){
            System.out.print(arr[i] + " ");
        }
    }
}

1.4.3 随机排名

  • 定义一个动态初始化的数组用于录入员工的工号
  • 遍历数组中的每个元素。
  • 每遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换
  • 输出数组中的内容即可,
import java.util.Random;
import java.util.Scanner;

public class ArrayTest2 {
    public static void main(String[] args) {
        int[] arr1= new int[5];

        Scanner sc = new Scanner(System.in);

        for (int i=0;i < arr1.length;i++){
            System.out.println("请输入第"+(i+1)+"员工");
            int num =sc.nextInt();
            arr1[i]=num;
        }

        Random random = new Random();
        for (int i = 0; i < arr1.length; i++) {
            int index = random.nextInt(arr1.length);
            int temp = arr1[index];
            arr1[index] = arr1[i];
            arr1[i] = temp;
//            arr1[i] = arr1[index];
        }
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
    }
}

1.5 debug工具的使用

  • IDEA自带的断点调试工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况。
  • 在这里插入图片描述

1.5.1 第一步 设置断点

点击行号右边和代码区域左边的空白区域,也就是红色圆圈部分,生成断点,产生实体的红色圆型
在这里插入图片描述

1.5.2 第二步 启动调试

右键菜单选择debug +文件名
在这里插入图片描述

1.5.3 第三步 介绍键位

Step over:程序往下执行一行。
Step into:进入方法内,可以进入自定义方法或三方库方法,JDK 方法无法进入。
Force step into:强制进入方法内,一般 Step into 进不去时可以使用。
Step out:退出方法,跟 Force step into 配合使用。
Drop Frame:当我们 Debug 从 A 方法进入 B 方法时,通过降帧(退帧)可以返回到调用 B 方法前,这样我们就可以再一次调用 B 方法。
在这里插入图片描述

1.5.3 第四步 单步执行

断点打在这一行,表示代码即将执行这一行,也就是还未执行这一行,我们点击Step into,向下执行一行,
在这里插入图片描述
蓝光打在下一行表示上一行执行完毕,上一行红框内显示执行后的结果
在这里插入图片描述
控制台也会显示相应的执行结果
在这里插入图片描述
我们点击Step into,持续向下执行,会看见每一行都会在结尾显示代码的当前执行结果
在这里插入图片描述
这里我们就方便对比和观察for循环执行的效果,i=1和i=2的时候代码执行效果
在这里插入图片描述在这里插入图片描述
点击console显示最终程序运行结果
在这里插入图片描述

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

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

相关文章

图像压缩神器:使用wxPython和Pillow快速压缩JPEG文件

导语&#xff1a; 在数字时代&#xff0c;我们经常处理大量的图像文件&#xff0c;无论是个人照片、网络图片还是工作中的设计素材。然而&#xff0c;随着图像数量的增多&#xff0c;存储和传输这些文件可能会成为一个挑战。幸运的是&#xff0c;我们可以利用Python编程和两个强…

基于Springboot影城管理系统设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

基于JAVA的数码产品应用平台设计与实现【附项目源码】分享

基于JAVA的数码产品应用平台设计与实现&#xff1a; 源码地址&#xff1a;https://download.csdn.net/download/weixin_43894652/88842576 基于Web的数码产品应用平台设计与实现需求文档 一、引言 随着科技的飞速发展和数码产品的普及&#xff0c;用户对于获取数码产品信息…

计算机网络面经八股-HTTP常见的状态码有哪些?

常见状态码&#xff1a; 200&#xff1a;服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。301 &#xff1a; (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时&#xff0c;会自动将请求者转到新位置。302&…

openssl3.2 - exp - export ecc pubkey from ecc priv key

文章目录 openssl3.2 - exp - export ecc pubkey from ecc priv key概述笔记END openssl3.2 - exp - export ecc pubkey from ecc priv key 概述 前面实验已经生成了ECC私钥, 现在做从ECC私钥(内容为公私钥对, 里面既有私钥信息, 也有公钥信息)导出ECC公钥. 实验对应的命令行…

Liunx文件系统和基础IO

文件系统和基础IO 基础IOc语言基础IO函数当前路径和标准流系统IO系统调用函数重定向FILE文件结构体 在谈缓存区问题理解文件系统初识inode 基础IO c语言基础IO函数 打开与关闭 FILE *fopen(char *filename, const char *mode);选项还可以是 r/w/a 意味着为可读可写打开。 2…

Java异常分类(二)

RuntimeException 运行时异常&#xff1a; 派生于 RuntimeException 的异常&#xff0c;如被 0 除、数组下标越界、空指针等&#xff0c;其产生比较频繁&#xff0c;处理麻烦&#xff0c;如果显式的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交…

Vcenter 定制创建 Rocky Linux 虚拟机

文章目录 1. 图形化安装2. 初始化配置 1. 图形化安装 2. 初始化配置 Centos 8.2 指南

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;在零售行业的技术进步中&#xff0c;开发商品识别系统扮演着关键角色。本博文详细阐述了如何利用深度学习技术搭建一个高效的商品识别系统&#xff0c;并分享了一套完整的代码实现。系统采用了性能强劲的YOLOv8算法&#xff0c;同时对YOLOv7、YOLOv6、YOLOv5等…

RabbitMQ 面试题及答案整理,最新面试题

RabbitMQ的核心组件有哪些&#xff1f; RabbitMQ的核心组件包括&#xff1a; 1、生产者&#xff08;Producer&#xff09;&#xff1a; 生产者是发送消息到RabbitMQ的应用程序。 2、消费者&#xff08;Consumer&#xff09;&#xff1a; 消费者是接收RabbitMQ消息的应用程序…

L2-035 完全二叉树的层序遍历(Python)

L2-035 完全二叉树的层序遍历 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 一个二叉树&#xff0c;如果每一个层的结点数都达到最大值&#xff0c;则这个二叉树就是完美二叉树。对于深度为 D 的&#xff0c;有 N 个结点的二叉树&#xff0c;若其结点对应于相同深度…

吴恩达 x Open AI ChatGPT ——如何写出好的提示词视频核心笔记

核心知识点脑图如下&#xff1a; 1、第一讲&#xff1a;课程介绍 要点1&#xff1a; 上图展示了两种大型语言模型&#xff08;LLMs&#xff09;的对比&#xff1a;基础语言模型&#xff08;Base LLM&#xff09;和指令调整语言模型&#xff08;Instruction Tuned LLM&#xff0…

[LeetCode][110]平衡二叉树

题目 110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是平衡二叉树。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false 示例 3&…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

摘要&#xff1a;开发农作物害虫检测系统对于提高农业生产效率和作物产量具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个农作物害虫检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0…

惬意上手Redis

Redis介绍 Redis&#xff08;全称为REmote Dictionary Server&#xff09;是一个开源的、内存中的数据存储结构&#xff0c;主要用作应用程序缓存或快速相应数据库。 REmote Dictionary Server: 有道翻译Redis是“远程字典服务”&#xff0c;远程不过是远程访问&#xff0c;而…

大模型学习笔记六:Semantic Kernel

文章目录 一、Semantic Kernel介绍和发展1&#xff09;SK 的语言开发进展2&#xff09;SK的生态位3&#xff09;SK基础架构 二、环境搭建1&#xff09;初始化2&#xff09;Semantic Functions&#xff08;不用编写代码&#xff0c;用配置实现回调函数&#xff09;3&#xff09;…

vb oe20.03 ssh nat

环境 virtual boxopeneuler 20.03 LTS网络设置 nat 主机端口可以自行设置&#xff0c;其余三项固定不变。然后即可通过ssh进行连接。

Dynamic Wallpaper v17.4 mac版 动态视频壁纸 兼容 M1/M2

Dynamic Wallpaper Engine 是一款适用于 Mac 电脑的视频动态壁纸&#xff0c; 告别单调的静态壁纸&#xff0c;拥抱活泼的动态壁纸。内置在线视频素材库&#xff0c;一键下载应用&#xff0c;也可导入本地视频&#xff0c;同时可以将视频设置为您的电脑屏保。 应用介绍 Dynam…

pycharm @NotNull parameter ‘module‘ of ...

下载了最新pycharm &#xff0c;无法启动运行 pycharm或者idea中Run/Debug Python项目报错 Argument for NotNull parameter ‘module‘ of … 解决方案 删除项目根目录的 idea 文件夹 随后重启&#xff0c;重新配置即可

探索Linux世界:基本指令(文件查看、时间相关、grep、打包压缩及相关知识)

今天继续介绍一些指令 文章目录 1.cat - 查看文件1.1输出重定向和追加重定向1.2指令echo 2.more 指令3.less - 逐页查看文本文件内容4.head- 显示文件开头部分内容5.tail - 显示文件末尾部分内容5.1输入重定向&#xff08;<&#xff09;5.2管道&#xff08;|&#xff09; 6.…