当前位置: 首页 > news >正文

java Object 万字详解 (通俗易懂)

  • 基本介绍

  • 构造方法

  • 成员方法

  • hashCode()

  • getClass()

  • toString()

  • equals()

  • finalize()

  • JavaBean重写Object类的方法

  • 重写toString

  • 重写equals


一、基本介绍

Object类是java类层次最顶层的基类(父类),所有类都是直接或间接继承自Object类,因此,所有类都可以使用Object类中的成员方法。

Object类属于java.base模块,java.lang包下(java.lang包下的类可以直接使用,不需要导包),如下图所示 :


二、构造方法

Object() : 构造一个对象。

如下图所示 :

Object类仅一个构造器,根据继承机制,所有子类在初始化前都会默认优先调用该构造器。


三、成员方法

0.总览 :

Object类常用的方法,如下图所示 :

像notify,wait这些与线程相关的

方法,因为我们还没有讲到java高级篇——多线程的内容,因此这里不做说明。我们来一起看一看up用粗线条标注出的这五个方法

①int hashCode()

返回当前对象的哈希码值,该方法通过对象的地址值进行计算,不同对象的返回值一般不同

②Class <?> getClass()

返回调用此方法的对象的运行时类对象(字节码文件对象)

③String toString()

返回该对象的字符串表示(默认打印的是"全类名 + @ + 哈希码值的十六进制")

④boolean equals()

返回其他某个对象是否与此对象“相等”(默认情况下比较的是两个对象的引用)

⑤void finalize()

当“垃圾回收器”确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法

1.hashCode() :

其实我们在上一专题的封装篇中,就已经提到过hashCode方法,并且还给出了hashCode的应用和常规协定。不知道大家是否还有印象,如果忘了也不要紧,这里再给大家演示一下 :

演示 :

up以HashCode_类为测试类,以Student类为演示类。

代码如下 :

package knowledge.api.objectmethods;/*** @author : Cyan_RA91. hashCode() : 返回当前对象的哈希码值,该方法通过对象的地址值进行计算,不同对象的返回值一般不同。*/
public class HashCode_ {public static void main(String[] args) {//创建学生类对象Student student_0 = new Student();Student student_1 = new Student();//比较不同学生对象的哈希码值System.out.println("student_0对象的哈希码值为 : " + student_0.hashCode());System.out.println("student_1对象的哈希码值为 : " + student_1.hashCode());System.out.println("student_0对象的哈希码值为 : " + student_0.hashCode());}
}class Student {}

运行结果 :

从运行结果可以看出,当我们打印不同对象的哈希码值时,得到的结果不同。而同一对象的哈希码值相同。

2.getClass() :

getClass方法需要用一个Class类来作接收,即获取字节码文件对象(即Class对象)。并且getClass方法要通过对象来调用,因此使用前一定要创建一个对象。这个方法呢,其实我也讲过😂。只不过是在未来的java反射专题(虽然我已经写好了)。同样的,不要紧,再来演示一下不就完了。

演示 :

up以GetClass_类为测试类,以Grape类和Apple类作为演示类。

代码如下 :

package knowledge.api.objectmethods;/*** @author : Cyan_RA92.Class <?> getClass() : 返回调用此方法的对象的运行时类对象(字节码文件对象)*/
public class GetClass_ {public static void main(String[] args) {//创建葡萄类对象Grape grape_0 = new Grape();Grape grape_1 = new Grape();//获取葡萄类的Class对象Class class_grape_0 = grape_0.getClass();Class class_grape_1 = grape_1.getClass();Class grape_0_class = grape_0.getClass();//比较通过葡萄类不同对象获得的葡萄类的Class对象有什么不同。System.out.println("grape_0对象的字节码文件对象是:" + class_grape_0);System.out.println("grape_1对象的字节码文件对象是:" + class_grape_1);System.out.println("grape_0对象的字节码文件对象是:" + grape_0_class);System.out.println("--------------------------------------------------");//创建苹果类对象Apple apple_0 = new Apple();Apple apple_1 = new Apple();//获取苹果类的Class对象Class apple_0_class = apple_0.getClass();Class apple_1_class = apple_1.getClass();//比较通过苹果类不同对象获得的苹果类的Class文件有什么不同System.out.println("apple_0对象的字节码文件对象是:" + apple_0_class);System.out.println("apple_1对象的字节码文件对象是:" + apple_1_class);}
}class Grape {}
class Apple {}

运行结果 :

从输出结果我们可以看出,一个类只有一个字节码文件对象。我们通过创建同一个类的不同对象来分别调用getClass方法,得到的Class对象是相同的。而不同类的字节码文件是不同的。同时,我们也能发现字节码文件对象的格式为“class + 类的正名(类的正名 = 包类+ 类名)

3.toString() :

关于toString方法要注意一点 : 当我们直接输出一个对象时,默认调用toString方法

演示 :

up以ToString_类为测试类,以Animal类为演示类。

代码如下 :

package knowledge.api.objectmethods;/*** @author : Cyan_RA93. toString() : 返回该对象的字符串表示(默认打印的是"全类名 + @ + 哈希码值的十六进制")*/
public class toString_ {public static void main(String[] args) {//创建Animal类对象Animal animal_0 = new Animal();Animal animal_1 = new Animal();Animal animal_2 = new Animal();//toString() 方法的返回值类型为String类型(也可不做接收)String animal_0_string = animal_0.toString();System.out.println("animal_0对象的字符串表示是:" + animal_0_string);System.out.println(animal_0);System.out.println("------------------------------------------------");System.out.println("animal_1对象的字符串表示是:" + animal_1.toString());System.out.println("animal_2对象的字符串表示是:" + animal_2.toString());}
}class Animal {}

运行结果 :

运行结果可以验证我们之前的结论——当我们直接输出一个对象时,默认调用toString方法。而且toString() 方法默认打印的的确是“类的正名 + @ + 哈希码值的十六进制”。当然,可能有p小将(Personable小将,指风度翩翩的人)要怀疑这里“@”后面跟着的一大堆玩意儿是不是当前对象哈希码值的十六进制?

哎😂,其实验证方法也很简单,你先把这里的某个十六进制数转换成十进制数,然后利用hashCode() 方法打印出该对象的哈希值,比对一下就知道了。当然up这里就不演示了,绝不是因为我懒!是因为我已经明确知道结论了,才给大家演示的,对不对?

这不是重点。大家有没有想过,toString() 方法既然要打印出对象的字符串表示形式,那肯定是要有用的啊,最起码给人直观想象的机会。但是现在就这一堆乱七八糟的玩意儿,给谁第一眼看了也觉得糟心。那怎么办?诶~,别急,等等我们讲到子类重写Object类成员方法时再说。

4.equals() :

Object类中的equals()方法默认比较的是两个对象的引用。

演示 :

up以Equals_类为测试类,以Teacher类为演示类。

代码如下 :

package knowledge.api.objectmethods;/*** @author : Cyan_RA94. equals() : 返回其他某个对象是否与此对象“相等”(默认情况下比较的是两个对象的引用)*/
public class Equals_ {public static void main(String[] args) {//创建教师类对象Teacher teacher_0 = new Teacher();Teacher teacher_1 = new Teacher();//通过对象调用equals() 方法System.out.println("teacher_0和teacher_1是一个对象吗?" + teacher_0.equals(teacher_1));System.out.println("teacher_0和teacher_0是一个对象吗?" + teacher_0.equals(teacher_0));}
}class Teacher {}

相信大家看代码也能感觉出来了——这方法的原版没什么意义!你只比较个地址值有个啥用?雷声大雨点小!我们创建对象的目的是什么?创建对象是为了描述某一类事物的一个具体存在,每个对象的属性和行为都不尽相同。所以,我想你也猜到了,这个方法也要在子类重写的。

5.finalize() :

垃圾回收机制的调用,是由系统来决定的,即有自己的GC算法;也可以通过System.gc()来尝试主动触发,虽然也有可能无效。你也可以重写此方法,做一些释放资源的操作。

finalize()方法在实际开发中用的并不多,对于初学者几乎用不到,因此这里不做演示


四、JavaBean重写Object类的方法

0.需求 :

实际开发中,通常需要将对象转换成字符串形式进行运输,也需要对即将使用的对象进行相等判断。而toString() 方法和equals() 方法本身的特点无法实现以上需求。因此,这时候就需要我们定义标准JavaBean类,并重写Object类的toString() 方法 和 equals() 方法

IDEA中提供了自动重写toString和equals方法的机制,可以使用快捷键Alt + Enter,选择要定义或重写的方法,即可自动完成。

1.重写toString() 方法

up以ToString_EX类为测试类,以Teacher类为演示类。

代码如下 :

package knowledge.api.objectmethods.override_;/*** @author : Cyan_RA9* @purpose : 重写Object类的toString方法*/
public class ToString_EX {public static void main(String[] args) {Teacher teacher_0 = new Teacher();teacher_0.setName("王斌");teacher_0.setAge(44);teacher_0.setSalary(20000);Teacher teacher_1 = new Teacher("许银川", 48, 100000);//直接输出对象,默认调用toString() 方法System.out.println(teacher_0);System.out.println(teacher_1);}
}class Teacher {     /** 以JavaBean标准来敲 *///成员变量private String name;private int age;private double salary;//构造器public Teacher() {}public Teacher(String name, int age, double salary) {this.name = name;this.age = age;this.salary = salary;}//getter,setter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}//重写的toString() 方法@Overridepublic String toString() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}
}

运行结果 :

可以看到,重写后的toString方法本身并不复杂,就是返回了一个拼接后的字符串。而当我们在Teacher类中重写toString方法后,输出Teacher类对象调用的就是我们重写后的toString方法,成功打印出了Teacher类对象的相关信息。因此,重写toString() 方法的目的,往往是将对象的信息能够显式地打印出来,让我们看到。

2.重写equals() 方法(重点)

up以Equals_EX类为测试类,以Animal类为演示类。

代码如下 :

package knowledge.api.objectmethods.override_;import java.util.Objects;/*** @author : Cyan_RA9* @purpose : 重写Object类的equals方法*/
public class Equals_EX {public static void main(String[] args) {//利用带参构造创建不同Animal类对象Animal animal_0 = new Animal("猫", 15);Animal animal_1 = new Animal("狗", 12);Animal animal_2 = new Animal("猫", 15);//查看不同Animal对象的信息System.out.println("animal_0对象的信息为:" + animal_0);System.out.println("animal_1对象的信息为:" + animal_1);System.out.println("animal_2对象的信息为:" + animal_2);System.out.println("----------------------------------------------");//通过重写后的equals方法比较不同对象的信息是否相同System.out.println("animal_0对象和animal_1对象信息相同吗?" + animal_0.equals(animal_1));System.out.println("animal_0对象和animal_2对象信息相同吗?" + animal_0.equals(animal_2));System.out.println("animal_1对象和animal_2对象信息相同吗?" + animal_1.equals(animal_2));}
}class Animal {      /** JavaBean标准 *///成员变量private String species_name;private int average_age;//构造器public Animal() {}public Animal(String species_name, int average_age) {this.species_name = species_name;this.average_age = average_age;}//getter,setter方法public String getSpecies_name() {return species_name;}public void setSpecies_name(String species_name) {this.species_name = species_name;}public int getAverage_age() {return average_age;}public void setAverage_age(int average_age) {this.average_age = average_age;}//重写equals方法@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Animal animal = (Animal) o;return average_age == animal.average_age && species_name.equals(animal.species_name);}@Overridepublic int hashCode() {return Objects.hash(species_name, average_age);}//重写toString方法以打印出对象的信息@Overridepublic String toString() {return "Animal{" +"species_name='" + species_name + '\'' +", average_age=" + average_age +'}';}
}

运行结果 :

我们先来解读一下关于equals方法的重写 :

//重写equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Animal animal = (Animal) o;
return average_age == animal.average_age &&
species_name.equals(animal.species_name);
}

解读①——该方法的形参列表是一个Object类型的对象,也就是多态了。

解读②——方法第一行是一个if条件语句的判断,判断条件“this == o”中,用到了比较运算符“==”,我们之前讲过,==比较运算符如果判断引用类型,判断的是二者的地址是否相同,即判定是否为同一对象;因此这里就是像看看你要判断的对象是不是它本身,如果判断为true,意思就是你拿一个对象和它自己比去了。那还用比吗😅,这不就和你照镜子一样,比个🐔儿?因此直接return true,不再进行后续的比较。

解读③——接着,又来了第二个if条件语句的判断,判断条件“o == null || getClass() != o.getClass())”中,由逻辑运算符短路或“||”分为了两部分,短路或的判断中,从左向右执行,且只要满足第一部分的判断,之后的部分便不再执行。第一部分“o==null”,是判断传入的对象是否为空。你想,一个在堆空间中真正存在的对象和一个空能比出个啥来吗?就像你比身高,让你和空气比,这不虚空对线呢😅?因此,如果传入的对象为空,立刻return false,没啥比头。来看第二部分“getClass() != o.getClass())”,这不我们前面刚说过getClass方法么,巧了😋。其实,第一个getClass() 前面隐含了“this.”,当然你也可以手动加上。这部分判断是看你传入的对象和调用该方法的对象是否是同一类对象。因为一个类的只有一个字节码文件,因此同一个类的字节码文件对象一定相同。你想,如果一条狗和你手里的泡泡糖都叫“大大”,那**能比么?因此,如果第一部分判断条件不通过,说明传入的对象不为空;如果第二部分判断条件不通过,说明传入的对象和调用方法的对象是同一类型的对象,可做后续的比较。反之,return false,不再进行后续的判断。

解读④——当前两个if条件语句都没有把o对象拦下来后,我们已经确定传入的对象既不是调用方法的对象本身,也不为空,并且和调用方法的对象是同一类对象。这时候它来了一个强制转型“Animal animal = (Animal) o;”,没毛病吧,妥妥地强转,原因估计你也猜到了,现在的o对象是一个Object类型的对象,根据多态的弊端,父类引用不能直接使用子类对象的特有成员。因此,这里要把o对象进行强制向下转型,以改变o对象的编译类型,使得做接收后的新的引用变量可以调用要判断类型(此处为Animal类)的特有成员,以便进行后续的判断。

解读⑤——最后就可以开始判断了。IDEA也很干脆,直接return了一个boolean类型。注意,具体的比较语句中up还要说一下,判断非引用类型直接用比较运算符“==”即可,如果判断的是引用类型,比如说字符串,要使用“字符串.equals()”的形式来判断,很明显字符串属于String类,而String类中重写了Object类的equals方法,可以比较两个字符串的内容是否相同。

其次,看到代码后,可能会有小伙伴儿们疑惑——

为什么我用快捷键重写equals方法时,IDEA会默认同时重写equals方法和hashCode方法呢?

这要说起来可就大费篇章了😂。这与hashCode的常规协定有关,也是为了避免某些程序执行出现异常的情况。现在不需要深究,大家了解一下即可。等你到找工作面试的时候,你不想懂也得懂它了🤗。


五、总结

其实,关于Object类中的方法,大家只要理解这几个原初的方法,并且掌握toString方法和equals方法的重写问题就没问题了。

🆗,以上就是我们关于API常用类Object类内容分享的全部内容了,下一节String类我们不见不散,感谢阅读!

相关文章:

java Object 万字详解 (通俗易懂)

基本介绍构造方法成员方法hashCode()getClass()toString()equals()finalize()JavaBean重写Object类的方法重写toString重写equals一、基本介绍Object类是java类层次最顶层的基类&#xff08;父类&#xff09;&#xff0c;所有类都是直接或间接继承自Object类&#xff0c;因此&a…...

Java并发简介(什么是并发)

文章目录并发概念并发和并行同步和异步阻塞和非阻塞进程和线程竞态条件和临界区管程并发的特点提升资源利用率程序响应更快并发的问题安全性问题缓存导致的可见性问题线程切换带来的原子性问题编译优化带来的有序性问题保证并发安全的思路互斥同步&#xff08;阻塞同步&#xf…...

团队API管理工具-YAPI

团队API管理工具-YAPI 推荐一款接口管理平台&#xff0c;操作简单、界面友好、功能丰富、支持markdown语法、可使用Postman导入、Swagger同步数据展示、LDAP、权限管理等功能。 YApi是高效、易用、功能强大的api管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接…...

学习记录 --- Pytorch优化器

文章目录参考文献什么是优化器optimizer的定义optimizer的属性defaultsstateparam_groupsoptimizer的方法zero_grad()step()add_param_group()state_dict()、load_state_dict()优化一个网络同时优化多个网络当成一个网络优化当成多个网络优化只优化网络的某些指定的层调整学习率…...

Flink State 状态后端分析

flink状态实现分析 state * State* |* -------------------InternalKvState* | |* MergingState |* | |* …...

和年薪30W的阿里测开工程师聊过后,才知道我的工作就是打杂的...

前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了腾讯和阿里的offer&#xff0c;最后选择了阿里。 阿里内部将员工一共分为了14个等级&#xff0c;P6是资深工程师&#xff0c;P7是技术专家。 其中P6和P7就是一个分水岭了&#xff0c;P6是最接近P7的不持股员工&#x…...

C#开发的OpenRA的界面布局数据加载

C#开发的OpenRA的界面布局数据加载 当显示完成加载界面之后,就是进行其它内容处理。 因为后面内容的加载会比较长时间,所以首先显示加载界面是一种非常友好的方法。 因此在软件设计里,尽可能先显示界面,让用户先看到程序正在运行, 然后再处理时间长的加载。如果不这样做,…...

并查集结构

文章目录并查集特点构建过程查找两个元素是否是同一集合优化查找领头元素设置两个元素为同一集合构建结构应用场景并行计算集合问题并查集特点 对于使用并查集构建的结构&#xff0c;可以使得查询两个元素是否在同一集合&#xff0c;以及合并集合的操作无限接近O(1) 构建过程…...

全国CSM敏捷教练认证将于2023年3月25-26开班,报名从速!

CSM&#xff0c;即Certified Scrum Master&#xff0c;是Scrum联盟发起的Scrum认证。 CSM可以帮助团队正确使用Scrum&#xff0c;从而提高项目整体成功的可能性。 CSM深刻理解Scrum的价值观、实践以及Scrum框架。 CSM是“服务型领导”&#xff0c;帮助Scrum团队一起紧密合作。 …...

JavaEE进阶第六课:SpringBoot ⽇志⽂件

上篇文章介绍了SpringBoot配置文件&#xff0c;这篇文章我们将会介绍SpringBoot ⽇志⽂件 荔枝1.日志有什么用2.自定义日志输出2.1获取程序日志对象2.2使用相关方法输出日志2.3日志级别2.3.1日志级别的作用2.3.2日志级别如何设置2.4日志格式3.持久化日志4.更简单的日志输出4.1使…...

外置MOS管平均电流型LED降压恒流驱动器

产品描述 AP5125 是一款外围电路简单的 Buck 型平均电 流检测模式的 LED 恒流驱动器&#xff0c;适用于 8-100V 电压 范围的非隔离式大功率恒流 LED 驱动领域。芯片采用 固定频率 140kHz 的 PWM 工作模式&#xff0c; 利用平均电 流检测模式&#xff0c;因此具有优异的负载调整…...

python+pytest接口自动化(6)-请求参数格式的确定

我们在做接口测试之前&#xff0c;先需要根据接口文档或抓包接口数据&#xff0c;搞清楚被测接口的详细内容&#xff0c;其中就包含请求参数的编码格式&#xff0c;从而使用对应的参数格式发送请求。例如某个接口规定的请求主体的编码方式为 application/json&#xff0c;那么在…...

开发手册——一、编程规约_3.代码格式

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】大括号的使用约定。如果是大括号内为空&#xff0c;则简洁地写成{}即可&#xff0c;不需要换行&#xff1b;如果是非空代码…...

十七、Django-restframework之序列化器(二)

1. 序列化器 REST framework提供了一个serializer类&#xff0c;它可以非常方便的序列化模型实例和查询集为JSON或者其他内容形式。它还提供反序列化&#xff0c;允许在验证传入数据后将解析的数据转换回复杂类型。 2. 定义序列化器 在crm应用目录下创建serializers.py文件&a…...

python GUI图形化编程-----wxpython

一、python gui&#xff08;图形化&#xff09;模块介绍&#xff1a; Tkinter :是python最简单的图形化模块&#xff0c;总共只有14种组建 Pyqt :是python最复杂也是使用最广泛的图形化 Wx :是python当中居中的一个图形化&#xff0c;学习结构很清晰 Pywin :是pyth…...

【Python 】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细

时间格式 时间格式(协议)描述gg时期或纪元。y不包含纪元的年份。不具有前导零。yy不包含纪元的年份。具有前导零。yyyy包含纪元的四位数的年份。M月份数字。一位数的月份没有前导零。MM月份数字。一位数的月份有一个前导零。MMM月份的缩写名称&#xff0c;在AbbreviatedMonthN…...

【C++】C++11 异常

目录 1. C语言传统的处理错误的方式 2. C异常概念 3. 异常的使用 3.1. 异常的抛出和捕获 3.2. 在函数调用链中异常栈展开匹配原则 3.3. 异常的重新抛出 3.4. 异常安全 3.5. 异常规范 4.自定义异常体系 5. C标准库的异常体系 6. 异常的优缺点 6.1. C异常的优点&…...

关于Thread.start()后的困惑、imap

在for循环中&#xff0c;接着开thread&#xff0c;开完就start&#xff0c;当时有个困惑&#xff0c;就是比如开的一个thread的这个start执行完&#xff0c;但是这个for循环还没执行完&#xff0c;那程序会跑到for循环的后面逻辑吗&#xff1f;比如下面13行for循环开始开第一个…...

qml学习之qwidget与qml结合使用并调用信号槽交互

学习qml系列之一说明&#xff1a; 学习qml系列之qwiget和qml信号槽的交互使用&#xff0c;并在qwidget中显示qml界面 在qml中发送信号到qwidget里 在qwidget里发送信号给qml 在qwidget里面调用qml界面方式 方式一&#xff1a;使用QQuickView 这个是Qt5.0中提供的一个类&…...

【 华为OD机试 2023】 组装新的数组(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则: R中元素总和加起来等于MR中的元素可以从N中重复选取R中的元素最多只能有1个不在N中,且比N中…...

【洛谷 P2089】烤鸡(循环枚举)

烤鸡 题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡&#xff08;本是同畜牲&#xff0c;相煎何太急&#xff01;&#xff09;Hanke 吃鸡很特别&#xff0c;为什么特别呢&#xff1f;因为他有 101010 种配料&#xff08;芥末、孜然等&#xff09;…...

windows10安装ubantu双系统

windows10安装ubantu双系统 文章目录windows10安装ubantu双系统一、安装前准备1.前期说明2.制作U盘启动器3.设置硬盘分区相关4.设置给ubantu系统的硬盘大小&#xff0c;设置为未分配&#xff08;删除卷&#xff09;二、进行安装1.设置bios相关2.进入bios启动界面选择U盘安装3.进…...

【华为OD机试 2023】 人数最多的站点/小火车最多人时所在园区站点(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述用例题目解析C++JavaScriptJavaPython励志做全网最全、解法最多的华为OD机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。每篇文章都有详细的结题步骤。有问题,随时解答。😁😁😁😁 目前为了造福广大…...

2024届暑期实习实录(阿里云大数据研发平台)

1. 项目介绍&#xff08;介绍一下你觉得有挑战的项目 &#xff08;1&#xff09;项目的痛点需求&#xff08;配置变更的痛点、你做的目的是什么&#xff1f;&#xff09; 思考方向&#xff1a;业务背景&#xff0c;用户需求&#xff1b;产品发展&#xff0c;产品现有局限问题…...

空口协议probe req和probe rsp 、auth req和auth rsp 、assoc req和assoc rsp讲解

我们经常可以看到抓到的报文主要有三种:probe req和probe rsp 、auth req和auth rsp 、assoc req和assoc rsp 。 建立联结的三个阶段 相互发现阶段:probe req和probe rsp probe是探测的意思 相互了解阶段:auth req和auth rsp auth是认证的缩写 建立关…...

vscode ssh一直卡在wget的解决方案

vscode ssh一直卡在wget的解决方案找到commit_id 在服务器下点进该目录 .vscode-server\bin 一般日期最新的那一串就是我们需要的commit_id下载vscode-server-linux-x64.tar https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable 将加粗部分替换…...

【Python学习笔记】第二十五节 Python MySQL

Python 连接到 MySQL 数据库有几种不同的连接方法&#xff0c;而且不是所有的方法都能与不同的操作系统很好地配合.MySQL connector/Python模块是Oracle支持的官方驱动&#xff0c;用于通过Python连接MySQL。该连接器完全是Python语言&#xff0c;而mysqlclient是用C语言编写的…...

折叠屏手机自带的屏幕表面层为什么不能自己撕?

计划入手折叠屏手机的小伙伴看过来&#xff0c;因为折叠屏手机外观的特殊形态&#xff0c;在日常使用中与普通直板手机屏幕的养护还是有着很大的不同&#xff0c;比如直板机入手后新机开箱撕膜这个操作&#xff0c;对于折叠屏手机来说&#xff0c;万万不可&#xff01;除此之外…...

20.hadoop系列之Yarn资源调度器

Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统&#xff0c;而MapReduce等运算程序则相当于运行于操作系统之上的应用程序 1.Yarn基础架构 Yarn主要由ResourceManager、NodeManager、ApplicationMaster和Contai…...

206页16万字城市运行“一网统管”体系建设项目需求报告

本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 第 一 章 应用场景示例 一.1 一卡通人员管理针对企业厂区、办公楼等场所人员出入频繁、安保问题多样化、管理环节复杂等现状&#…...

wordpress 垃圾文章/网上如何推广产品

背景 前段时间朋友辞去了北京一家小创公司Android开发的工作&#xff0c;准备寻找新的工作的时候&#xff0c;要和我聊聊天。告诉我再找不到工作就考虑转行了&#xff01; 话语间无不感叹安卓有点强弩之末的味道&#xff01;聊天过程中&#xff0c;朋友也顺带分享了一波阿里饿…...

wordpress图片广告代码/站长全网指数查询

字符串介绍String类是java.lang包中的一个类&#xff0c;是我们日常中使用的非常多的一个类&#xff0c;它不是基础数据类型&#xff0c;底层实现是字符数组来实现的&#xff1a;/** The value is used for character storage. */private final char value[];String类是由final…...

做围棋题最好的网站/qq推广引流怎么做

一、 使用Autowired时注解下面出现了波浪线&#xff0c;仔细一看是这样的 二、出现原因 查阅了相关文档了解了一下&#xff0c;原来这个提示是spring framerwork 4.0以后开始出现的&#xff0c;spring 4.0开始就不推荐使用属性注入&#xff0c;改为推荐构造器注入和setter注入…...

那个做头像的网站好/网络公司网络推广服务

两三年过去了&#xff0c;中间考研&#xff0c;毕业等事宜&#xff0c;一直没有再动过博客。 原本自己的文笔和表达能力就有限&#xff0c;中间一直不断学习新东西&#xff0c;更觉得没有精力去经营博客。 看到很多人能写出高质量博客深感羡慕&#xff0c;自己也是一枚菜鸡&…...

wordpress大数据/南宁关键词排名公司

在现实生活中&#xff0c;公司合并是非常普遍的&#xff0c;公司合并可以采取吸收合并或者新设合并。公司合并后&#xff0c;合并各方的债权、债务&#xff0c;应当由合并后存续的公司或者新设的公司承继&#xff0c;那么公司合并派遣员要怎样处理呢?上海律师已经整理了如下的…...

如何选择网站制作公司/微信推广软件

第二章详细介绍了Visual Studio 2010中内置的SharePoint Developer Tools。发现任何问题&#xff0c;请告诉我&#xff08;kaneboy [a] gmail.com&#xff09;。 第二章 使用Visual Studio 2010 2 第一节 建立开发环境 2 2.1.1 建立开发环境的可选方案 3 2.1.2 在Wind…...