JAVA_类和对象
目录
1.面向对象的初步认知
1.1.什么是面向对象
1.2.面向对象与面向过程
2.类的定义和使用
2.1.简单认识类
2.2类的定义格式
2.3.练习
学生类
动物类(可爱猫猫🐱)
3.类的实例化
3.1.什么是实例化
3.2.类和对象的说明
4.this引用
4.1什么是this引用
4.2为什么要用this引用
4.3.this引用的特征
5.对象的构造及初始化
5.1.如何初始化对象
5.2.构造方法
概念
特征
5.3.默认初始化
5.4.就地初始化
6.封装
6.1.封装的概念
6.2.访问限定符
6.3.封装扩展之包
6.3.1.包的概念
6.3.2.导入包中的类
6.3.3.常见的包
7. static成员
7.1.再谈学生类
7.2.static修饰成员变量
7.3.static修饰成员方法
7.4.static成员变量初始化
就地初始化:
8.代码块
8.1.代码块的概念
8.2.构造代码块与静态代码块
8.3.结论
9.对象的打印
9.1.toString()
toString()方法的创建:
9.2.@Override
1.面向对象的初步认知
1.1.什么是面向对象
JAVA是一个面向对象的语言,面向对象主要靠对象之间的交互来完成一件事。
1.2.面向对象与面向过程
例如我们传统洗衣服方式,我们要分很多步骤
- 把衣服放盆里
- 放水
- 倒洗衣液
- 手搓等等·····
但是现在我们有洗衣机,我们人只需要给洗衣机衣服和洗衣液再给一个指令它就能帮我们洗衣服。以上任务中,我们有人,洗衣机,衣服,洗衣液这四个对象,他们四个对象相互完成洗衣服这个任务。人不需要去关注洗衣机如何洗衣服,包括如何洗,如何甩干这些,过程性的东西我们都不需要去关注。
以面向对象的方式来处理事务,我们不需要关注过程。
2.类的定义和使用
图片中的型号,类型等等是对洗衣机的描述,我们需要将这一块内容抽象(对一个复杂事物的重新认知)出来,因为计算机不懂上述的这些描述,所以我们就需要有一门语言使得计算机能懂这些描述,例如JAVA。
2.1.简单认识类
类就是对一个对象进行描述,描述它的型号,类型以及它的功能等等。
- 类:一个洗衣机中,它有很多牌子,我们就可以把它的其中一个牌子定义为一个类别
- 成员属性:这个牌子的洗衣机中的型号,类型等可以理解为成员属性
- 成员方法:这个牌子的洗衣机有一些洗衣,烘干等功能可理解为成员方法
2.2类的定义格式
//创建WashingMachine类
public class WashingMachine {//属性public String name;//方法public void dosomthing() {System.out.println();}
}
class为类的关键字,WashingMachine为类名,{}内部的是类的主题,包含属性和方法等
2.3.练习
既然我们了解了类的含义以及创建,那我们就来练习一下。
学生类
//学生类
public class Student {//名字属性public String name;//年龄属性public int age;//班级属性public String classes;//睡觉方法public void sleep(){System.out.println(name+"睡觉");}//吃饭方法public void eat(){System.out.println(name+"在吃饭");}//游戏方法public void ganme() {System.out.println(name + "在打游戏");}
}
动物类(可爱猫猫🐱)
//猫属性
public class Cat {//名字属性public String name;//年龄属性public int age;//主人属性public String master;//睡觉方法public void sleep(){System.out.println(name+"睡觉");}//吃饭方法public void eat(){System.out.println(name+"在吃饭");}//玩玩具方法public void paly() {System.out.println(name + "在玩玩具");}
}
3.类的实例化
3.1.什么是实例化
例如JAVA本身的自带的int,double等类型
int []arr=new int[10];
在上面这段代码中,我们创建了int类型的arr数组,new相当于创建对象实例的关键字
而这种用类类型创建对象的过程就称之为实例化
我们可以尝试一下示例化下上面练习中的猫类型
public class text {public static void main(String[] args) {//实例化猫类型,并创建cat1对象Cat cat1=new Cat();//给cat1对象的name属性赋值cat1.name="小咪";//给cat1对象的age属性赋值cat1.age=3;//调用cat1对象的睡觉方法cat1.sleep();//实例化猫类型,并创建cat2对象Cat cat2=new Cat();//给cat2对象的name属性赋值cat2.name="大咪";//给cat2对象的age属性赋值cat2.age=3;//调用cat2对象的睡觉方法cat2.sleep();}
}
我们在main方法中创建了用Cat类类型创建了cat1和cat2对象,并利用创建出来的对象,修改它们的属性和调用Cat的方法。
- new关键字用来创建对象的实例
- 一个类类型能实例化多个对象
- 通过 “.” 能调用对象的成员属性和成员方法
3.2.类和对象的说明
- 类只是一个模型,用来对实体的描述
- 类是一种自定义类型,可以用来定义变量
- 一个类可以实例化多个对象,实例化出来的对象占实际存储空间
- 可以把类理解成平面设计图,建筑工人会根据这张平面设计图建筑出多个实体的相关内容
4.this引用
4.1什么是this引用
我们先创建一个Date类型之后,并实例化Date类型的d1,d2,d3三个对象,然后我们在类中设置一个setDate的方法,其目的是为了在main方法中调用的Date类型对象时,传入3个值赋给year,mouth,day,当我们应用this的时候,系统会知道是谁调用的这个setDate。例如:d1调用setDate方法时,这个时候的this就代表d1,etDates中的代码就会转换为
d1.year=year;
d1.mouth=mouth;
d1.day=day;
综上所述,this是指向当前对象的引用。
4.2为什么要用this引用
可以看4.1中的代码,我们运用了this引用所以系统直到调用的哪个对象,当时如果我们没用this呢?
//Date类
public class Date {//时间的三给属性public int year;public int mouth;public int day;//传入时间的方法public void setDate(int year,int mouth,int day){year=year;mouth=mouth;day=day;}//输出时间的方法public void getDate(){System.out.println(year+ "-" +mouth + "-"+day);}
}
结果:
可以看到,如果没有this引用的话,输出的结果就不正确了,原因是他这边的命名是重复的,将year赋值给year?
我们在Date中虽然没有给三个属性赋值,但是,他们都会有默认初值,而int类型的默认初值就为0。再者,我们代码运行是由局部变量优先,所以在setDate中,是形参给形参赋值,main方法中的值并没有传给三个属性。
所以我们要使用this应用,让该变量知道是哪个对象赋的值,并解决变量与形参重名导致错误的结果。那我们再看以下代码
我们在右边的代码中的两个方法的括号里添加的Date类型的this引用,编译器并没有报错,这表明右边的写法没有问题,虽然右边的代码比左边多了Date类型的this引用,但其实这两段代码是一样的,当我们在方法中使用了this的引用后,编译器会默认在方法的第一个位置为我们添加隐藏的Date类型的this引用,使得该方法知道是哪个对象调用了该方法。
4.3.this引用的特征
- this只能被当前对象所引用,其他对象不行
- this被哪个对象调用,就为哪个对象的引用
- this只能在方法中被调用
- this会默认在隐藏的Date类型的this引用
5.对象的构造及初始化
5.1.如何初始化对象
先构造一个Date方法,设置传入的参数
在创建对象的时候直接赋值即可
5.2.构造方法
概念
//Date类
public class Date {//三个变量public int year;public int mouth;public int day;//Date构造方法public Date(int year,int mouth,int day){this.year=year;this.mouth=mouth;this.day=day;}//取得返回值public void setDate(int year,int mouth,int day){this.year=year;this.mouth=mouth;this.day=day;}//输出值public void getDate(){System.out.println(year+ "-" +mouth + "-"+day);}
}
构造方法(也称为构造器)的名字必须与类名相同,并且默认使用public修饰,在整个对象周期中只调用一次。
在创建一个类的时候,编译器会给我们提供一个不带任何参数的构造方法,但是如果我们创建了一个不管有没有带参数的构造方法时,编译器就不会为我们提供不带任何参数的构造方法。
如上图中,我们创建了一个带参数的构造方法,当我们在mian方法中创建不带参数的d4对象时,编译器会报错,那就验证了上述讲的:如果我们创建了一个不管有没有带参数的构造方法时,编译器就不会为我们提供不带任何参数的构造方法。
这种解决方法也很简单,那就是再创建一个不带参数的构造方法。
这时候就能正常编译通过啦~~
那这时候有人要讲了,驻波驻波,自己写构造方法还是有点吃操作,有没有什么更简单的方法,驻波的回答是:有的兄弟有的,这种类似的方法还有7种,那接下来就看驻波的操作吧。
1.右键编译器空白位置
2.点进去之后找到“Constructor”,也就是第一个位置
3.再点进去之后,会让你选择参数,那就选择自己想要传入的参数就好啦~
5.结果
特征
- 构造方法的名字要与类名相同
- 默认使用public修饰
- 没有返回类型
- 构造方法在整个生命周期中只执行一次
- 可下、创建多个带不同参数的构造方法(可重载) 如
5.3.默认初始化
首先我们先来看这段代码
为什么两个变量没有赋初始值,Date类型的能通过而int类型的却通过不了呢
那我们就得知道new这个关键字在后台所做的任务了
- 1.检测对象对应的类是否加载,如果没有则加载
- 2.为对象在堆上分配空间
- 3.处理并发问题
- 4.初始化分配的空间
- 即:对象空间分配好后,对象中的成员属性就被初始化好了值
- 5.调用构造方法,给对象中的成员属性赋值。(这边的赋值是我们给成员属性赋值,而不是new操作给成员赋的默认值)
以下是数据类型和对应的初始值
5.4.就地初始化
在声明成员变量时,就进行赋值。
//Date类
public class Date {//创建三个成员变脸并赋值public int year=2020;public int mouth=7;public int day=16;public Date(int year) {this.year = year;}//Date构造方法public Date() {}//Date构造方法public Date(int year,int mouth,int day){this.year=year;this.mouth=mouth;this.day=day;}//取得返回值public void setDate(int year,int mouth,int day){this.year=year;this.mouth=mouth;this.day=day;}//输出值public void getDate(){System.out.println(year+ "-" +mouth + "-"+day);}
}
6.封装
6.1.封装的概念
封装就如字面意思,现实中是将一件东西封装在一个箱子里,而JAVA中对应的则是将一段代码封装在包(后面讲)里。
打个比方,我们能将电脑进行开关机,通过一些外设给电脑提供指令,而我们不需要知道电脑内部如何处理这些指令,因为计算机厂商在制作的时候就将cpu,显卡,硬盘等进行了封装,而负责封装这些硬件的则是电脑这个“包”。
6.2.访问限定符
JAVA主要通过类和访问权限控制符来实现封装,类是将数据的数据的方法结合起来,而访问限定符则是决定该类能不能被外部使用。
同一个包的同一类 | 同一个包的不同类 | 不同包的同一类 | 不同包的不同类 | |
public | 可以使用 | 可以使用 | 可以使用 | 可以使用 |
protected | 可以使用 | 可以使用 | 可以使用 | |
default | 可以使用 | 可以使用 | ||
private | 可以使用 |
- public可以理解为一个公开的信息,比如说你的名字,所有人都知道
- default可以理解为朋友之间的小秘密,只有朋友之间知道,其他人不知道
- private可以理解为自己的小秘密,只有自己知道
- protected(后续讲)
我们先学习下创建包
按上面三步创建后再命名以下就好啦~~
我们先创建pack1和pack2两个包,在pack1中创建Peopel类和text类,在pack2中创建text类
//pack1包
package peck1;public class People {//public 公开的名字public String name="陈长生";//default 只有自己人知道String friend_secret="陈长生私下喜欢女装";//private 只有自己知道private String secret="我喜欢小帅,我是南通";public void secret_printf(){//private 可在本类中实现System.out.println(secret);}
}
//-----------------------------------------------
//pack1包
package peck1;
public class text {public static void main(String[] args) {People p1=new People();//public提供同一个包同一个类System.out.println(p1.name);//default在在同一个包中跨类实现System.out.println(p1.friend_secret);//private 不提供其他类System.out.println(p1.secret);}
}
//==================================================
//pack2包
package pack2;
import peck1.People;
public class text {public static void main(String[] args) {People p2=new People();//public可跨包实现 nameSystem.out.println(p2.name);//因为是不同包所以default修饰的 friend_secret//所以People不提供 friend_secretSystem.out.println(p2.friend_secret);}
}
虽然正常的方式无法在外部获取defalut和private修饰的成员变量,但是,规则就是用来打破的!
接下来看驻波的操作 ξ( ✿>◡❛)
public String getSecret(){return secret;}public String getFriend_secret(){return friend_secret;}
创建两个方法,并返回想要的值,然后在想要的类里调用该方法就可以咯~
那如果需要的返回变量很多,却又不想敲那么多重复的代码怎么办呢?
这时候想到驻波前面说的这种这种类似的方法还有7种了吗╭☞(  ̄ ▽ ̄)╭☞
不准忘哦!╭(°A°`)╮
真没办法,那就再教一遍吧(●'◡'●)👆
6.3.封装扩展之包
6.3.1.包的概念
在面向对象的过程中,提出了包这个概念,其目的是为了更好的管理类,所以引用了包,将类导入包中,就类似于我们电脑中的文件夹,假设有风景图,人物图,古风音乐,rap音乐,这时候我们就需要创建一个图片文件夹和一个音乐文件夹将这四个进行分类。
包也是同理,将几个类似的类放入一个包中,这样就能更好的管理类了,且不同包中的类可以同名。
6.3.2.导入包中的类
格式 import 包.类
例:import text2.People
注意:不能只导入包而不添加后面的类哦,这样编译器就不知道该如何调用该包中的哪个类了
6.3.3.常见的包
- java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入
- java.lang.reflect:java 反射编程包
- java.net:进行网络编程开发包
- java.sql:进行数据库开发的支持包
- java.util:是java提供的工具程序包。(集合类等) 非常重要
- java.io:I/O编程开发包。
7. static成员
7.1.再谈学生类
我们前面创建学生类时,有3个成员变量,姓名,年龄,班级,那如果我们创建三个对象,他们的姓名,年龄不同,而班级相同。
结果:
那这样看上去我们是不是在添加一个重复的班级,能不能去掉这个麻烦的操作呢?
我们想象一下,一间教室是不是由三个同学对象共享的呢?那既然是,说明目前这个classes成员变量需要变成所有成员共享的,有谁能提供这个功能呢? 那当然是static啦~
被static修饰的成员可以称为静态成员或者是类成员,他不属于某个对象,他是属于这个类中的所有对象,也就是可以被该类中的所有对象共享,可以理解为被static修饰的成员变量不依赖于对象。
7.2.static修饰成员变量
//学生类
public class Student {//名字属性public String name;//年龄属性public int age;//班级属性public static String classes="建筑1班";public Student(String name, int age) {this.name = name;this.age = age;}//自我介绍public void prinf(){System.out.println("我是来自" +classes + "的" + name +"我" + age + "岁" );}
}
//----------------------------------------------------------------------------------
//text类
public class text {public static void main(String[] args) {Student s1=new Student("s1",18);Student s2=new Student("s2",19);Student s3=new Student("s3",20);//打印静态成员变量System.out.println(s1.classes);System.out.println(s2.classes);System.out.println(s3.classes);}
}
结果:
可以看到运行的结果跟第一次运行的一样,所以当我们以后遇到这种重复的内容用static就可以啦~
但是但是,这种方法是不合理的,前面我们也讲到静态成员变量也可以称为类成员,那就代表可以直接用类来调用,让我们来实验一下
public class text {public static void main(String[] args) {Student s1=new Student("s1",18);Student s2=new Student("s2",19);Student s3=new Student("s3",20);System.out.println(Student.classes);}
}
结果:
所以所以!以后我们调用静态的成员变量时,用类方法直接调用就好了。
7.3.static修饰成员方法
上述我们讲过,静态成员变量不依赖于对象并且调用的时候直接用类调用即可,而我们的静态成员方法也是同理。
//学生类
public class Student {//名字属性public String name;//年龄属性public int age;//班级属性public static String classes="建筑1班";public Student(String name, int age) {this.name = name;this.age = age;}//创建静态方法,并打印静态变量public static void printf_c1(){System.out.println(classes);}}
//--------------------------------------
//text类
public class text {public static void main(String[] args) {Student s1=new Student("s1",18);Student s2=new Student("s2",19);Student s3=new Student("s3",20);//调用该类中的静态方法Student.printf_c1();}
}
结果:
7.4.static成员变量初始化
就地初始化:
也就是在创建静态成员变量时就为其赋值
public static String classes="建筑1班";
8.代码块
8.1.代码块的概念
我们写代码时候都会加个“ {} ”,而被这个“ {} ”定义的代码则为代码块。
8.2.构造代码块与静态代码块
//学生类
public class Student {//名字属性public String name;//年龄属性public int age;//班级属性public static String classes="建筑1班";//实例代码快{this.name="changsheng";this.age=17;System.out.println("执行实例代码块...");}//静态代码快static{System.out.println("执行静态代码块...");}
}
//---------------------------------------------
//text类
public class text {public static void main(String[] args) {Student s=new Student();}
}
结果:
可以看到,打印的顺序是静态代码块先打印,然后再是实例代码块
所以他们的实现顺序是——>静态代码块>实例代码块
//学生类
public class Student {//名字属性public String name;//年龄属性public int age;//班级属性public static String classes="建筑1班";//实例代码快{this.name="changsheng";this.age=17;System.out.println("执行实例代码块...");}//静态代码快static{System.out.println("执行静态代码块...");}}
//----------------------------------------------
//text类
public class text {public static void main(String[] args) {Student s1=new Student();Student s2=new Student();}
}
如果我们创建两个对象实例进行会怎样呢,是不是打印两对静态代码块和实例代码块呢?
结果:
可以看到打印结果,静态变量只执行了一次,所以我们可以得出
静态代码块只能被调用一次
//学生类
public class Student {//名字属性public String name;//年龄属性public int age;//班级属性public static String classes="建筑1班";//实例代码快{this.name="changsheng";this.age=17;System.out.println("执行实例代码块1...");}{this.name="changsheng";this.age=17;System.out.println("执行实例代码块2...");}//静态代码快static{System.out.println("执行静态代码块1...");}static{System.out.println("执行静态代码块2...");}
}
//------------------------------------------------
//text类
public class text {public static void main(String[] args) {Student s1=new Student();Student s2=new Student();}
}
我们创建了两个静态代码块和实例代码块以及两个实例对象,来看下打印顺序是怎样的
结果:
这边同样也是静态代码块优先于实例代码块,且是由代码的从上至下的顺序打印出来的。
8.3.结论
- 实例代码块用于初始化普通成员变量
- 静态代码块用于初始化静态成员变量
- 静态实例块优先于实例代码块
- 静态实例块只执行一次
- 抛去静态和实例的优先顺序,其顺序是从上而下的
- 实例代码块只有在创建对象时才会执行
9.对象的打印
9.1.toString()
在JAVA中打印类中的信息我们可以使用toString()方法。
//学生类
public class Student {//名字属性public String name="changsheng";//年龄属性public int age=17;//班级属性public static String classes="建筑1班";//toString()方法 @Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
//------------------------------------------
//text类
public class text {public static void main(String[] args) {Student s1=new Student();//打印toString的返回值System.out.println(s1.toString());}
}
toString()方法的创建:
创建方法跟前面的构造方法同理
9.2.@Override
可以理解为检查机制,当我们下面写的代码中有不合理的地方,编译器发现不了,而@Override却可以发现,并标明位置。
相关文章:
JAVA_类和对象
目录 1.面向对象的初步认知 1.1.什么是面向对象 1.2.面向对象与面向过程 2.类的定义和使用 2.1.简单认识类 2.2类的定义格式 2.3.练习 学生类 动物类(可爱猫猫🐱) 3.类的实例化 3.1.什么是实例化 3.2.类和对象的说明 4.this引用…...
高频面试题(含笔试高频算法整理)基本总结回顾65
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
数据库系统-数据库控制
并发控制 事务的ACID特性: 原子性(Atomicity):事务包含的所有操作要么全部成功(commit提交),要么全部失败(rollback回滚)一致性(Consistency)&a…...
Python Cookbook-5.3 根据对象的属性将对象列表排序
任务 需要根据各个对象的某个属性来完成对整个对象列表的排序。 解决方案 DSU方法仍然一如既往地有效: def sort_by_attr(sed,attr):intermed [ (getattr(x,attr),i,x) for i,x in enumerate(seg)]intermed.sort()return [ x[-1] for x in intermed def sort_by_attr_inpl…...
Java MCP SDK 开发笔记(一)
MCP 简介 AI 大模型诞生之初,其高度模拟人的对话之能力惊为天人。但我们肯定不希望止步于此—— 工具化就是我们希望 AI 能够完成的目标,由此可以从单纯的对话发展为代替繁复人力的“干活”。这条道路上毋庸置疑 AI 大模型任重道远。而 MCP(Model Contr…...
AF3 OpenFoldDataLoader类_prep_batch_properties_probs方法解读
AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类的 _prep_batch_properties_probs 方法是为每个批次数据准备 recycling 维度 的概率分布。它将根据配置文件中的设定为每个批次数据生成 recycling 轮次的概率分布,并存储到 prop_probs_tensor 中,用于后续抽样选择特定…...
寻找字符串数组中的最长共同前缀字符串
问题描述:给定一个字符串数组 strs,编写一个函数来找到这些字符串的最长公共前缀字符串,如果没有则返回空字符串"" 算法思路 横向扫描法: 从数组的第一个字符串开始,逐个和后面的字符串比较,逐…...
leetcode_数组 56. 合并区间
56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:int…...
Jenkins学习(B站教程)
文章目录 1.持续集成CI2.持续交付CD3.持续部署4.持续集成的操作流程5.jenkins简介6.后续安装部署,见视频 bilibili视频 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用…...
学习笔记—C++—类和对象(一)
目录 类和对象 类的定义 类定义格式 访问限定符 类域 实例化 实例化概念 对象的大小 this指针 C和C语言实现Stack对比 类和对象 类的定义 类定义格式 ● class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后…...
PyTorch 深度学习 || 6. Transformer | Ch6.3 Transformer 简单案例
1. 简单案例 这个代码是一个简单的 Transformer 模型的实现,这个例子展示了一个基本的序列到序列(seq2seq)任务,比如将一个数字序列转换为另一个数字序列。可以用于学习和理解 Transformer 的基本结构和工作原理。 import torch import torch.nn as nn import math# 位置…...
体育风暴篮球足球体育球员综合资讯网站模板
源码名称:篮球足球体育球员综合资讯网站模板 开发环境:帝国cms7.5 空间支持:phpmysql 带软件采集,可以挂着自动采集发布,无需人工操作! 演示地址:https://www.52muban.com/shop/184016.html …...
Visual Studio Code SSH 连接超时对策( keep SSH alive)
文章目录 问题解决方法一:配置服务端关于ClientAliveInterval和ClientAliveCountMax1、打开终端,打开SSH配置文件:输入以下命令:2、打开配置文件后,添加以下内容:3、添加后,Esc按 <Enter>…...
Docker容器中的ubuntu apt update报错 解决办法
问题现象 # apt update Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB] Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Err:2 http://security.ubuntu.com/ubuntu noble-security InRelease At least one invalid signa…...
CV - 目标检测
物体检测 目标检测和图片分类的区别: 图像分类(Image Classification) 目的:图像分类的目的是识别出图像中主要物体的类别。它试图回答“图像是什么?”的问题。 输出:通常输出是一个标签或一组概率值&am…...
linux提权 corn 提权
corn提权 corn的基本使用方法 corn的作用就是可以定时的完成一下任务(如备份一下log 或者清除一下日志文件 这些就是运维人员用的) 先找一下定时任务的工作表 cat /bin/corntab 这个是普通用户 我们直接看都看不了 说明什么说明这个 是root高权限执…...
1Panel安装失败 国内docker安装失败
本文仅针对学习交流,只为了帮助计算机相关专业大学生个人技能实操而记录 非学习目的严禁学习!!!否则后果自负 1、离线安装1Panel(不需要手动安装docker,离线安装包里包括了docker) 离线包下载地…...
Excel + VBA 实现“准实时“数据的方法
Excel 本身是静态数据处理工具,但结合 VBA(Visual Basic for Applications) 可以实现 准实时数据更新,不过严格意义上的 实时数据(如毫秒级刷新)仍然受限。以下是详细分析: 1. Excel + VBA 实现“准实时”数据的方法 (1) 定时刷新(Timer 或 Application.OnTime) Appl…...
请问你怎么看待测试,指导哪些测试的类型,有用过哪些测试方法?
作为深耕测试领域多年的博主,我始终认为测试是软件质量的守护者,更是推动研发流程优化的催化剂。以下从测试认知、分类体系到实战方法论,结合具体案例为你系统拆解: 一、测试的本质认知 测试≠找 Bug,而是通过系统性验证回答三个核心问题: 软件是否符合用户需求?系统在…...
详解 Redis repl_backlog_buffer(如何判断增量同步)
一、repl_backlog_buffer 复制积压缓冲区(Replication Backlog Buffer) 是一个环形内存区域(Ring Buffer),用于临时保存主节点最近写入的写命令,以支持从节点断线重连后的增量同步。 1.1 三个复制偏移量 …...
工业操作系统国产化替代的战略路径与挑战分析
一、政策背景与战略意义 工信部提出的 2027 年替换 80 万套工业操作系统计划,是中国制造业向智能化转型的核心举措。该政策旨在通过国产化替代,解决工业领域 “缺芯少魂” 的问题,构建自主可控的工业软件生态体系。当前,中国工业操…...
JMeter接口性能测试从入门到精通
前言: 本文主要介绍了如何利用jmter进行接口的性能测试 1.在测试计划中添加线程组 1.1.线程组界面中元素含义 如果点击循环次数为永远: 2.添加HTTP取样器 2.1.填写登录接口的各个参数 2.2.在线程组下面增加查看结果树 请求成功的情况: 请求…...
WinForm真入门(9)——RichTextBox控件详解
WinForm中RichTextBox控件详解:从基础到高级应用 上一文中笔者重点介绍了TextBox控件的详细用法,忘记的 请点击WinForm真入门(8)——TextBox控件详解,那么本文中的RichTextBox与TextBox有什么区别吗,光看名字的话,多了…...
Linux : 内核中的信号捕捉
目录 一 前言 二 信号捕捉的方法 1.sigaction()编辑 2. sigaction() 使用 三 可重入函数 四 volatile 关键字 一 前言 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。在Linux: 进程信号初识-CSDN博客 这一篇中已经学习到了一种信号…...
Linux 字符串截取#与%
在Linux的Shell脚本中,#和%用于字符串截取,通过通配符模式匹配删除部分内容 批量修改文件名技巧:Linux下#、##、%、%%符号操作详解-CSDN博客 从左截取(# 和 ##) #:删除最短匹配左侧内容。 ##:…...
Android学习总结之自定义View实战篇
场景一:自定义进度条 在很多应用中,我们会看到一些独特样式的进度条,接下来就实现一个简单的圆形进度条。 实现思路 继承 View 类。重写 onDraw 方法,在该方法里使用 Canvas 和 Paint 来绘制圆形进度条。提供更新进度的方法。 …...
C++ STL 详解 ——list 的深度解析与实践指南
在 C 的标准模板库(STL)中,list作为一种重要的序列式容器,以其独特的双向链表结构和丰富的操作功能,在许多编程场景下发挥着关键作用。深入理解list的特性与使用方法,能帮助开发者编写出更高效、灵活的代码…...
open函数的概念和使用案例
open 是 Linux/Unix 系统中用于打开或创建文件的系统调用,返回一个文件描述符(File Descriptor),后续可通过该描述符进行文件读写等操作。以下是其核心概念和使用案例的详细说明: 1. 核心概念 作用:打开或…...
整理一些大模型部署相关的知识
不一定有什么用, 不经常用还会忘掉. 之前被人问到一次,脑子卡壳回答不出要点, 非常尴尬! 在此记录一下使用心得, 偶尔回来翻看! 一 并行方式 1.1 数据并行 (Data Parallelism) 主要用于模型训练阶段, 即将多个完整的模型副本分布到多个gpu上, 每个gpu运行一部分数据数据, 每个…...
算法刷题记录——LeetCode篇(2.10) [第191~200题](持续更新)
更新时间:2025-04-04 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 198. 打家劫舍 你是一个专业的…...
蓝桥杯备赛 Day 19 加练dfs
是否需要回溯? 输入参数有哪几个(当前dfs和下一个dfs什么会变?)? 是否需要返回值? 一.1158: 八皇后 P1158 - 八皇后 - New Online Judge (ecustacm.cn) 学习: 1.dfs输入为层数,即行号i,因为是每行只放一个,下一个dfs就是i1 2…...
蓝桥杯-卡java排序
问题描述 本题是一道针对 Java 中 Arrays.sort 的题目,因此只有一个数据,该数据可以把 int 类型的数组在使用 Arrays.sort 后卡成 O(n2)O(n2)。 给定一个有 nn 个正整数的序列 aa,你需要将其升序排序后输出。 输入格式 第一行输入一个正整…...
内存管理模块
在 Linux 内核中,内存管理是一个复杂而关键的组成部分。内核空间的虚拟地址被划分为多个区域,每个区域有其特定的用途和映射机制。本文将详细介绍 直接映射区(Direct Mapping Area)、vmalloc 区、永久内核映射区(Perma…...
Spring RestTemplate修仙指南:从HTTP萌新到请求大能的终极奥义
各位在Spring生态摸爬滚打的道友们!今天要解锁的是Spring官方御用HTTP法宝——RestTemplate!这货堪称Java界的"御剑飞行术",虽然官方已推荐WebClient接棒,但江湖上仍有80%项目在用这员老将!准备好一键起飞了…...
cpp经典数论问题
题目如下 思路 代码如下...
Redis 线程模型:单线程也能快如闪电?
目录 一、核心思想:快刀斩乱麻的“单线程”高手 🦸♂️二、为什么是“单线程”?🤔三、单线程如何做到高性能?✨ “I/O 多路复用”是关键!四、真的一直都只有“一个线程”吗?并不完全是&#x…...
游戏引擎学习第208天
运行游戏并回顾我们的情况 今天,我们将继续完成之前中断的调试输出工作。最近的工作偏离了一些,展示了如何进行元编程的实践,主要涉及了一个小的解析器。尽管这个解析器本身是一个玩具,但它展示了如何完成一个完整的循环…...
JavaScript箭头函数介绍(=>)(箭头函数不绑定自己的this,而是继承上下文的this;不能用于造函数)JavaScript =>
文章目录 JavaScript箭头函数全解析箭头函数的基本语法简洁语法特性隐式返回值对象字面量返回 词法绑定的this不适用箭头函数的场景对象方法构造函数DOM事件处理 高级用法在数组方法中的应用链式调用柯里化函数 性能考量1. 作为回调函数时减少创建闭包的开销2. 简化代码结构&am…...
数据对象:DTO、DO、PO和 BO的区别和关系
在Java开发中,DTO(Data Transfer Object)、DO(Domain Object)、PO(Persistent Object)和BO(Business Object)是常用的数据对象概念,下面为你详细介绍并给出简…...
Java内存模型详解:堆、栈、方法区
1. 堆(Heap) 作用:存放所有对象实例及数组,是垃圾回收的主要区域。 结构: 新生代(Young Generation): Eden区:新创建的对象首先分配在此。 Survivor区(From…...
ubuntu 20.04 编译运行LeGo_LOAM 跑数据集 并且保存pcl文件
1.搭建文件目录,clone代码,编译 mkdir -p Lego_LOAM/src cd Lego_LOAM/src git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git cd .. catkin_make -j1 错误1:: fatal error: opencv/cv.h: 没有那个文件或目录 13 | #include <opencv/cv.h…...
CMake使用教程
CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便。 使用命令行执行CMakeLists.txt,对文件进…...
快速上手Linux进程管理
一.理解进程和线程 1.1 什么是进程 它表示一个正在执行的程序实例。在操作系统中,进程是系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间、代码、数据和系统资源,如打开的文件、使用的硬件设备等。 进程的主要特点包括:…...
pytorch框架实现cnn四种天气图片多分类问题-添加dropout和bn层
目录 1.导包 2.加载数据、拼接训练、测试文件夹 3. 查看当前目录下的所有文件名,以列表的形式输出 4.原数据集dataset中存在的数据的目标类别 5.创建train和test目录 及其需要分类的子文件夹 6.使用torchvision 的transforms进行数据预处理 6.1数据统一缩放resize、To…...
swift-11-init、deinit、可选链、协议、元类型
一、required 二、属性观察器 三、可失败初始化器 可以用init!定义隐式解包的可失败初始化器 可失败初始化器可以调用非可失败初始化器,非可失败初始化器调用可失败初始化器需要进行解包 如果初始化器调用一个可失败初始化器导致初始化失败 ,那么整个初…...
【力扣hot100题】(062)搜索插入位置
感觉自己对二分法还是没有很好掌握,主要在于边界问题,只会基本的搜索,如果要搜索比目标值大的第一个索引或者比目标值小的最后一个索引(或者换一些花里胡哨的题目)就完全不会了。 class Solution { public:int search…...
TCPIP详解 卷1协议 三 链路层
3.1——以太网和IEEE802局域网/城域网标准 以太网这个术语通常指一套标准,由DEC,Intel公司和Xerox公司在1980年首次发布,并在1982年加以修订。第一个常见格式的以太网,目前被称为10Mb/s以太网或共享以太网。它被IEEE采纳为802.3标…...
以太网安全
前言: 端口隔离可实现同一VLAN内端口之间的隔离。用户只需要将端口加入到隔离组中,就可以实现隔离组内端口之间的二层数据的隔离端口安全是一种在交换机接入层实施的安全机制,旨在通过控制端口的MAC地址学习行为,确保仅授权设备能…...
linux如何查看当前系统的资源占用情况
在 Linux 系统中,有多个命令可以查看当前系统的资源占用情况。以下是一些常用的命令及其说明: 1. 查看内存使用情况:free free -h-h 参数表示以人类可读的格式显示(如 MB, GB)。输出示例: to…...
人脸识别系统(人脸识别、前后端交互、Python项目)
基于Flask、Face_Recognition的人脸识别系统 项目介绍 基于flask、face_recognition的人脸识别系统。 本项目采用Face_Recognition库内置的ResNet-34预训练模型,其已对LFW公开数据集进行预训练而得到的模型。利用ResNet-34预训练模型,可使用少量已知人…...