Java类和对象(下篇)
今天接着学习类和对象(苦笑)(苦笑)(苦笑)
1. 封装
1.1 封装的概念
面向对象程序三大特性:封装、继承、多态。
而类和对象阶段,主要研究的就是封装特性。
何为封装呢?简单来说就是套壳屏蔽细节。
举例:对于计算机使用者而言,不用关心内部核心部件,
比如主板上线路是如何布局的,CPU内部是如何设计的等,
用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。
因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,
仅仅对外提供开关机、鼠标以及键盘插孔等,
让用户可以与计算机进行交互即可。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互
2.2 访问限定符
Java中主要通过类和访问权限来实现封装:
类可以将数据以及封装数据的方法结合在一起,
更符合人类对事物的认知,
而访问权限用来控制方法或者字段能否直接在类外使用。
Java中提供了四种访问限定符:
比如:
public:可以理解为一个人的外貌特征,谁都可以看得到
default: 对于自己家族中(同一个包中) 不是什么秘密,
对于其他人来说就是隐私了
private:只有自己知道,其他人都不知道
public class UnderGraduate {private int height;//身高private int weight;//体重public String gender;//性别public String specialty;//专业int classandgrade;//年级和班级 -->>default属性public UnderGraduate(int height,int weight,String gender,String specialty,int classandgrade){this.height = height;this.weight = weight;this.gender = gender;this.specialty = specialty;this.classandgrade = classandgrade;}public void Sleep(){System.out.println("Slepp~~~~~~");}public void Forget(){System.out.println("Forget~~~~~~");}public void Eat(){System.out.println("Eat~~~~~~");}public class TestUndergraduate{public static void main(String[] args) {UnderGraduate g1 = new UnderGraduate(173,59,"man","computer scicence and technology",241);System.out.println(g1.height);// private属性:只能在Computer类中访问,不能被其他类访问System.out.println(g1.weight);// private属性:只能在Computer类中访问,不能被其他类访System.out.println(g1.gender); // public属性: 可以任何其他类访问System.out.println(g1.specialty); // public属性: 可以任何其他类访问System.out.println(g1.classandgrade);// default属性:只能被本包中类访问}}}
3.3 封装扩展(包)
3.3.1 包的概念
在面向对象体系中,提出了一个软件包的概念,
即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。
有点类似于目录。比如:为了更好的管理电脑中的歌曲,
一种好的方式就是将相同属性的歌曲放在相同文件下,
也可以对某个文件夹下的音乐进行更详细的分类。
在Java中也引入了包,包是对类、接口等的封装机制的体现,
是一种对类或者接口等的很好的组织方式,
比如:一个包中的类不想被其他包中的类使用。
包还有一个重要的作用:
在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
3.3.2 导入包中的类
Java 中已经提供了很多现成的类供我们使用.
例如Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类.
public class Test {public static void main(String[] args) {java.util.Date date = new java.util.Date();// 得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}
但是这种写法比较麻烦一些, 可以使用 import语句导入包
import java.until.Date;// 得到一个毫秒级别的时间戳public static void main(String[] args) {Date date = new Date();System.out.println(date.getTime());}
如果需要使用 java.util 中的其他类, 可以使用 import java.util.*
import java.util.*;
public class Test {public static void main(String[] args) {Date date = new Date();// 得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}
但是我们更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况
import java.util.*;
import java.sql.*;
public class Test {public static void main(String[] args) {// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错Date date = new Date();System.out.println(date.getTime());}
}
// 编译出错
Error:(5, 9) java: 对Date的引用不明确java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
在这种情况下需要使用完整的类名
import java.util.*;
import java.sql.*;
public class Test {public static void main(String[] args) {java.util.Date date = new java.util.Date();System.out.println(date.getTime());}
}
可以使用import static导入包中静态的方法和字段
import static java.lang.Math.*;
public class Test {// 静态导入的方式写起来更方便一些public static void main(String[] args) {double x = 48;double y = 55;double result = sqrt(pow(x,2)+pow(x,2));System.out.println(result);}
}
3.3.3 自定义包
基本规则:
在文件的最上方加上一个 package 语句指定该代码在哪个包中.
包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式
(例如 com.xiaoxin.demo1 ).包名要和代码路径相匹配.
例如创建 com.xiaoxin.demo1 的包,
那么会存在一个对应的路径 com/xiaoxin/demo1 来存储代码.
如果一个类没有 package 语句, 则该类被放到一个默认包中.
操作步骤
-
在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包
-
在弹出的对话框中输入包名, 例如 com.xiaoxin.demo1
-
在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名即可
-
此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了
-
同时我们也看到了, 在新创建的 Test.java 文件的最上方,
就出现了一个 package 语句
3.3.4 包的访问权限控制(举例)
UnderGraduate类位于com.xiaoxin.demo包中,
public static class UnderGraduate {private int height;//身高private int weight;//体重public String gender;//性别public String specialty;//专业int classandgrade;//年级和班级 -->>default属性public UnderGraduate(int height,int weight,String gender,String specialty,int classandgrade){this.height = height;this.weight = weight;this.gender = gender;this.specialty = specialty;this.classandgrade = classandgrade;}public void Sleep(){System.out.println("Slepp~~~~~~");}public void Forget(){System.out.println("Forget~~~~~~");}public void Eat(){System.out.println("Eat~~~~~~");}
TestUndergraduate位置com.xiaoxin.demo1包中:
public class TestUndergraduate{public static void main(String[] args) {Teat.UnderGraduate g1 = new Teat.UnderGraduate(173,59,"man","computer scicence and technology",241);//System.out.println(g1.height);// private属性:只能在类中访问,不能被其他类访问//System.out.println(g1.weight);// private属性:只能在类中访问,不能被其他类访System.out.println(g1.gender); // public属性: 可以任何其他类访问System.out.println(g1.specialty); // public属性: 可以任何其他类访问//System.out.println(g1.classandgrade);// default属性:只能被本包中类访问}
注意:如果去掉UnderGraduate类之前的public修饰符,代码也会编译失败
3.3.5 常见的包
- java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
- java.lang.reflect:java 反射编程包;
- java.net:进行网络编程开发包。
- java.sql:进行数据库开发的支持包。
- java.util:是java提供的工具程序包。(集合类等) 非常重要
- java.io:I/O编程开发包。
2. stiac 成员
2.1 学生类
学生类实例化三个对象s1、s2、s3,每个对象都有自己特有的名字、性别,年龄,学分绩点等成员信息,这些信息就是对不同学生来进行描述,如下所示:
public class Student{// ...public static void main(String[] args) {Student s1 = new Student("xiaoxin","boy",19,59);Student s2 = new Student("HYZS","girl",18,99);Student S3 = new Student("Tsing","girl",18,100);}
2.2 stiac 修饰成员变量
Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享。在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。
public class Student {public String name;public String gender;public int age;public int score;public static String classroom = "JK241";//…………………………public static void main(String[] args) {Student s1 = new Student("xiaoxin","boy",19,59);Student s2 = new Student("HYZS","girl",18,99);Student s3 = new Student("Tsing","girl",18,100);// 静态成员变量可以直接通过类名访问System.out.println(Student.classroom);System.out.println(s1.classroom);System.out.println(s2.classroom);System.out.println(s3.classroom);}
}
2.3 stiac 修饰成员方法
public class Student {public String name;public String gender;public int age;public int score;public static String classroom = "JK241";//…………………………
}public class TestStudent{public static void main(String[] args) {System.out.println(Student.classroom);}}编译失败:
Error:(10, 35) java: classRoom 在 extend01.Student 中是 private 访问控制
public class Student {public String name;public String gender;public int age;public int score;public static String classroom = "JK241";//…………………………public static String getclassroom(){return classroom;}
}public class TestStudent{public static void main(String[] args) {System.out.println(Student.getclassroom());}}
public static String getClassRoom(){System.out.println(this);return classRoom;
}// 编译失败:Error:(35, 28) java: 无法从静态上下文中引用非静态 变量 thispublic static String getClassRoom(){age += 1;return classRoom;
}// 编译失败:Error:(35, 9) java: 无法从静态上下文中引用非静态 变量 age
public static String getClassRoom(){doClass();return classRoom;
}
// 编译报错:Error:(35, 9) java: 无法从静态上下文中引用非静态 方法 doClass()
2.4 stiac 成员变量初始化
注意:静态成员变量一般不会放在构造方法中来初始化,
构造方法中初始化的是与对象相关的实例属性
静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。
- 就地初始化
就地初始化指的是:在定义时直接给出初始值
public class Student {public String name;public String gender;public int age;public int score;public static String classroom = "JK241";//……………………………………
}
- 静态代码块初始化
3. 代码块
3.1 代码块的概念,代码块的类型
使用 {} 定义的一段代码称为代码块。
根据代码块定义的位置以及关键字,又可分为以下四种:
- 普通代码块
- 构造块
- 静态块
- 同步代码块(后续多线程部分再学习)
3.2 普通代码块
普通代码块:定义在方法中的代码块
public static void main(String[] args) {{ //直接使用{}定义,普通方法块int x = 10;System.out.println("x:"+x);}int x2 = 100;System.out.println("x2:"+x2);}
这种用法较少见
3.3 构造代码块
构造块:定义在类中的代码块 (不加修饰符)。
也叫:实例代码块。构造代码块一般用于初始化实例成员变量
public class Student {//实例成员变量public int age;public int score;public String gender;public String name;public int classandgrade;public Student(){System.out.println("I am a computer major student");}//实例代码块{this.score = 59;this.name = "xiaoxin";this.gender = "boy";this.age = 19;this.classandgrade = 241;System.out.println("I am computer major student");}public void show(){System.out.println("name:"+name+"gender:"+gender+"age:"+age+"classandgrade:"+classandgrade);}public class Main{public static void main(String[] args) {Student student = new Student();student.show();}}
}
3.4 静态代码块
使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量
// 静态代码块static{classandgrade = 241;System.out.println("I am a computer major student");}
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,
编译器会按照定义的先后次序依次执行(合并) - 实例代码块只有在创建对象时才会执行
4. 内部类
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,
而这个内部的完整的结构又只为外部事物提供服务,
那么这个内部的完整结构最好使用内部类。
在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,
前者称为内部类,后者称为外部类。内部类也是封装的一种体现
public class OutClass {class InnerClass{}
}// OutClass是外部类
// InnerClass是内部类
- 定义在class 类名{}花括号外部的,即使是在一个文件里,
都不能称为内部类
public class A{}class B{}
// A 和 B是两个独立的类,彼此之前没有关系
- 内部类和外部类共用同一个java源文件,
但是经过编译之后,内部类会形成单独的字节码文件
4.1 内部类的类型
内部类都可以在一个类的哪些位置进行定义
public class OutClass {// 成员位置定义:未被static修饰 --->实例内部类public class InnerClass1{}// 成员位置定义:被static修饰 ---> 静态内部类static class InnerClass2{}public void method(){// 方法中也可以定义内部类 ---> 局部内部类:几乎不用class InnerClass5{}}
}
根据内部类定义的位置不同,一般可以分为以下几种形式:
- 成员内部类(普通内部类:未被static修饰的成员内部类 和 静态内部类:
被static修饰的成员内部类) - 局部内部类(不谈修饰符)、匿名内部类
注意:内部类其实日常开发中使用并不是非常多,
大家在看一些库中的代码时候可能会遇到的比较多,
日常开始中使用最多的是匿名内部类
4.2 成员内部类
在外部类中,内部类定义位置与外部类成员所处的位置相同,
因此称为成员内部类
4.2.1 实例内部类
即未被static修饰的成员内部类
public class OutClass {private int a;static int b;int c;public void methodA(){a = 10;System.out.println(a);}public static void methodB(){System.out.println(b);}// 实例内部类:未被static修饰class InnerClass{int c;public void methodInner(){// 在实例内部类中可以直接访问外部类中:任意访问限定符修饰的成员a = 100;b =200;methodA();methodB();// 如果外部类和实例内部类中具有相同名称成员时,优先访问的是内部类自己的c = 300;System.out.println(c);// 如果要访问外部类同名成员时候,必须:外部类名称.this.同名成员名字OutClass.this.c = 400;System.out.println(OutClass.this.c);}}public static void main(String[] args) {// 外部类:对象创建 以及 成员访问OutClass outClass = new OutClass();System.out.println(outClass.a);System.out.println(OutClass.b);System.out.println(outClass.c);outClass.methodA();outClass.methodB();System.out.println("=============实例内部类的访问============="); // 要访问实例内部类中成员,必须要创建实例内部类的对象// 而普通内部类定义与外部类成员定义位置相同,因此创建实例内部类对象时必须借助外部类// 创建实例内部类对象OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();// 上述语法比较怪异,也可以先将外部类对象先创建出来,然后再创建实例内部类对象OutClass.InnerClass innerClass2 = outClass.new InnerClass();innerClass2.methodInner();}
注意:
- 外部类中的任何成员都可以在实例内部类方法中直接访问
- 实例内部类所处的位置与外部类成员位置相同,
因此也受public、private等访问限定符的约束 - 在实例内部类方法中访问同名的成员时,优先访问自己的,
如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问 - 实例内部类对象必须在先有外部类对象前提下才能创建
- 实例内部类的非静态方法中包含了一个指向外部类对象的引用
- 外部类中,不能直接访问实例内部类中的成员,
如果要访问必须先要创建内部类的对象
4.2.2 静态内部类
被static修饰的内部成员类称为静态内部类
public class OutClass {private int a;static int b;public void methodA(){a = 10;System.out.println(a);}public static void methodB(){System.out.println(b);}// 静态内部类:被static修饰的成员内部类static class InnerClass{public void methodInner(){// 在内部类中只能访问外部类的静态成员// a = 100; // 编译失败,因为a不是类成员变量b =200;// methodA(); // 编译失败,因为methodB()不是类成员方法methodB();}}public static void main(String[] args) {// 静态内部类对象创建 & 成员访问OutClass.InnerClass innerClass = new OutClass.InnerClass();innerClass.methodInner();}
}
注意:
-
在静态内部类中只能访问外部类中的静态成员
如果确实想访问,我们该如何做?
-
创建静态内部类对象时,不需要先创建外部类对象
4.3 局部内部类
定义在外部类的方法体或者{}中,
该种内部类只能在其定义的位置使用,
一般使用的非常少,此处简单了解下语法格式
public class OutClass {int a = 10;public void method(){int b = 10;// 局部内部类:定义在方法体内部// 不能被public、static等访问限定符修饰class InnerClass{public void methodInnerClass(){System.out.println(a);System.out.println(b);}}// 只能在该方法体内部使用,其他位置都不能用InnerClass innerClass = new InnerClass();innerClass.methodInnerClass();}public static void main(String[] args) {// OutClass.InnerClass innerClass = null; 编译失败}
}
注意:
- 局部内部类只能在所定义的方法体内部使用
- 不能被public、static等修饰符修饰
- 编译器也有自己独立的字节码文件,
命名格式:外部类名字$数字内部类名字.class - 几乎不会使用
4.4 匿名内部类
蹲后续抽象与接口学习
5. 对象的打印
public class Person {String name;String gender;int age;public Person(String name, String gender, int age) {this.name = name;this.gender = gender;this.age = age;}public static void main(String[] args) {Person person = new Person("Jim","男", 18);System.out.println(person);}
}
如果想要默认打印对象中的属性该如何处理呢?
答案:重写toString方法即可
public class Person {String name;String gender;int age;public Person(String name, String gender, int age) {this.name = name;this.gender = gender;this.age = age;}@Overridepublic String toString(){return "["+name+","+gender+","+age+"]";}public static void main(String[] args) {Person person = new Person("Jim","男", 18);System.out.println(person);}}
总结
学习了封装概念,访问限定符,包的有关知识,staic成员,代码块,内部类,对象的打印
今天对类和对象的学习就到这里了,如果感觉不错,希望可以给博主点赞收藏和关注,感谢大家的支持,还有什么问题和建议可以在评论区评论,拜拜。
相关文章:

Java类和对象(下篇)
今天接着学习类和对象(苦笑)(苦笑)(苦笑) 1. 封装 1.1 封装的概念 面向对象程序三大特性:封装、继承、多态。 而类和对象阶段,主要研究的就是封装特性。 何为封装呢?简单来说就是套壳屏蔽细节。 举例:对于计算机使用者而言&am…...

k8s图形化显示(KRM)
在master节点 kubectl get po -n kube-system 这个命令会列出 kube-system 命名空间中的所有 Pod 的状态和相关信息,比如名称、状态、重启次数等。 systemctl status kubelet #查看kubelet状态 yum install git #下载git命令 git clone https://gitee.com/duk…...

apache poi 实现下拉框联动校验
apache poi 提供了 DataValidation 接口 让我们可以轻松实现 Excel 下拉框数据局校验。但是下拉框联动校验是无法直接通过 DataValidation 实现,所以我们可以通过其他方式间接实现。 步骤如下: 创建一个隐藏 sheet private static void create…...

【canal 中间件】canal 实时监听 binlog
文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 canal2.1 安装 canal-admin(可选)2.1.1 启动 canal-admin 容器2.1.2 …...
JVM垃圾收集算法、对应收集器和选择建议
如果说垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 到目前为止还没有最好的垃圾收集器出现,也没万能的垃圾收集器。实际使用中,根据具体应用场景选择合适的垃圾收集器。 1、垃圾收集算法 垃圾收集算法可以从高…...

如何在算家云搭建Aatrox-Bert-VITS2(音频生成)
一、模型介绍 Aatrox - Bert -VITS2 模型是一种基于深度学习的语音合成系统,结合了 BERT 的预训练能力和 VITS2 的微调技术,旨在实现高质量的个性化语音合成。 二、模型搭建流程 1. 创建容器实例 进入算家云的“应用社区”,点击搜索找到…...
ceph灾备之cephfs snapshot mirror和rsync对比
背景 最近要做ceph集群之间的灾备功能,主要讨论文件存储,因为ceph集群容量越来越大,接入的业务也越来越多,一旦出现故障,恢复时间都是小时级(根据经验每年都会出现几次这种事故),对于核心业务无法接受&…...

【工具分享】Plutocrypt勒索病毒解密工具
前言 Plutocrypt勒索软件首次出现在2021年,作为CryptoJoker勒索软件的变种。该恶意软件通过钓鱼邮件和恶意链接传播,主要针对个人和小型企业用户。Plutocrypt使用了.NET框架开发,并依赖AES-256和RSA-4096的加密算法来加密受害者的文件。与Cr…...

IDEA启动提示Downloading pre-built shared indexes
Download pre-built shared indexes Reduce the indexing time and CPU load with pre-built JDK shared indexes 翻译: 下载预构建的共享索引 使用预构建的JDK共享索引减少索引时间和CPU负载. 使用预构建的JDK共享索引可以显著减少索引构建时间和CPU负载…...

[HCTF 2018]WarmUp 1--详细解析
打开靶机,进入界面: 信息搜集 当前界面没有任何有用信息。 想到查看页面源代码。右键–查看页面源代码 看到hint:<!--source.php--> 进入/source.php页面,看到页面源代码: <?phphighlight_file(__FILE_…...

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述
第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求,即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…...
TOSHIBA 74VHC00FT COMS汽车、工业企业的选择
74VHC00FT 是一种四路双输入 NAND 门,属于 CMOS 系列数字集成电路。它采用东芝先进的硅栅 C2MOS 技术设计,能够实现类似于双极性肖特基 TTL 逻辑电路的高速运行,同时保持 CMOS 器件的低功耗。这种独特的结合使其非常适合需要高性能和低功耗的…...

【Android】使用productFlavors构建多个变体
项目需求 在一个设备上安装两个一样的程序app 需求解决 我们知道每一个app都有一个包名的,如果一个app在Android设备上安装之后,再安装这个app的话会进行覆盖安装,因为他们两个的包名是一样的,默认是一个app。 但是我们现在需…...
ubuntu 22.04 防火墙 ufw
Ubuntu(22.04)云主机SSH安全加固 https://blog.csdn.net/qq_44846097/article/details/141098092 ubuntu22.04防火墙策略 https://blog.csdn.net/sunyuhua_keyboard/article/details/139493464 Ubuntu 22.04 防火墙设置和开放端口命令 https://blog.c…...

MySQL压缩版安装详细图解
1.下载 mysql压缩包版本和msi版的安装方法不一样,下面的是压缩包版本的安装详细图解: 总地址下载地址:MySQL :: Download MySQL Community Server MySQL :: Download MySQL Community Server (Archived Versions) 压缩版下载MySQL :: Dow…...

elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法
elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法 试过网上其他方法,发现表单清空数据还是有问题,索性用下面方法解决: // 给弹框里面添加 v-ifvisible测试无问题,暂时先这样解决,如果有其他方法&#x…...

软件开发项目管理:实现目标的实用指南
由于软件项目多数是复杂且难以预测的,对软件开发生命周期的深入了解、合适的框架以及强大的工作管理平台是必不可少的。项目管理系统在软件开发中通常以监督为首要任务,但优秀的项目计划、管理框架和软件工具可以使整个团队受益。 软件开发项目管理的主要…...
Jenkins面试整理-如何在 Jenkins 中进行并行构建?
在 Jenkins 中,并行构建 是通过并行执行多个任务来提高构建效率的常见方法。并行构建特别适用于需要执行多个独立步骤的工作流,如并行测试、构建不同平台上的软件或并行执行多个阶段。Jenkins 提供了两种方式来配置并行构建:Declarative Pipeline 和 Scripted Pipeline。下面…...
DPDK(F-Stack) 实现UDP通信
因刚开始学习DPDK,在学习过程中了解到需使用用户态协议栈,在网上找到F-Stack的相关介绍,但是缺乏DPDK的相关知识,导致使用F-Stack 时UDP数据无法收到 一文了解dpdk rte_ring无锁队列F-Stack实现UDP服务端、客户端,并进…...

基于ExtendSim的库存与订购实验
说明: 库存和订购实验室是一个单部件模拟模型,旨在测试从组件需求站点到组件分发站点的订购策略,以及 在组件分销现场的生产区域内。最佳解决方案允许为需求站点提供高服务级别,同时最大限度地降低总库存水平。 该模型演示了分层模…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...