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

【JavaSE】类和对象的详解

前言:

大家好,我还是那个不会打拳的程序猿。今天我给大家讲解的是类和对象,相信大家在之前的学习中都是面向过程的思想,那么今天就让我们走向面向对象的世界吧。

目录

1.面向过程VS面向对象

1.1什么是面向过程

1.2什么是面向对象

2.类的定义与使用

2.1初识类

2.2类的定义与格式

3.类的实例化

3.1什么是类的实例化

3.2类和对象的说明

4.this引用

4.1为什么要有this引用

4.2什么是this引用

4.3this引用的特性

5.对象的构造及初始化

5.1如何初始化对象

5.2构造方法 

5.2.1构造方法概念

5.2.2构造方法特性

5.3对象的默认值

5.4就地初始化


1.面向过程VS面向对象

在我们学习类和对象之前,我们必须了解到面向对象和面向过程的概念是什么。相信大部分朋友都学习过C语言,C语言就是一个面向过程的语言。而Java是一个面向对象的语言,它可以引用一些对象和类比较方便。那什么是面向过程与面向对象呢,下面我就来讲解。


1.1什么是面向过程

相信大家都取过快递,我们拿快递的时候就是一个过程,我面向的就是拿快递的这个过程。我需要先到达快递驿站,然后找到快递所在位置,再拿到出库口,拿出手机打开出货码对准扫描器完成出货。这就是一个面向过程的概念。


1.2什么是面向对象

同样,还是以拿快递这个概念来举例子。如果我是一个老板,我有一个秘书。当我的快递到了的时候,我直接叫秘书给我拿一下。而我就不需要进行拿快递这个过程,这就是面向对象的概念。

我们可以看到,面向对象的概念更为方便一些。那么Java中也是如此,我们直接调用一个方法或者直接引用一个对象,就可以多次避免一个操作或过程的重复定义。我们自己调用或引用一下就好了这就是,面向对象的强大。因此面向过程VS面向对象当然是面向对象胜出。


2.类的定义与使用

在我们面向对象设计时,关注的是对象。在显示生活中对象是一些实体。比如一个手机它是一个实体,计算机是不能直接识别这个实体的,我们需要将这个实体的内容用编程语言给写出来。

 那么上图中的描述,就是一个手机的参数的描述。我们需要将这些参数用Java语言给编写出来,这就会使用到Java中的类:Class


2.1初识类

那么类是用一些实体(对象)来进行描述的,主要描述的是这些实体的特征与性能。比如一部手机:

手机,它在Java中可以将其看成是一个类。

属性:品牌、型号、功能、存储、外观、像素、颜色....

功能:打电话、看电影、听音乐、购物等等

那么我们知道了一个类里面包含着什么内容,那么如何对上述的手机进行定义呢?


2.2类的定义与格式

Java中定一个类需要用到Class关键字,语法格式:

    class ClassName {field;//字段(属性)、成员变量method;//行为或者成员方法}

以上代码中,class为定义类的关键字,ClassName为类的名称,{}里面的内容为类的主体,这些主体可以是对这个类的一些描述也可以是一些方法。比如一个手机类:

 class Phone {public String bradnd;//品牌public String type;//型号public double weight;//重量public double length;//长度//打游戏方法public void playGame() {System.out.println("打游戏");}//听音乐方法public void listenMusic() {System.out.println("听音乐");}//打电话方法public void call() {System.out.println("打电话");}}

在这个手机类里面,我定义了一个描述于这个手机的变量,有品牌、型号、重量、长度。和一些这个手机类会做到的一些功能方法,有打游戏、听音乐、打电话。当然你也可以添加更多的功能,那么以上代码就是一个简单的类的创建。

再比如定义一个狗类:

    class Dog {public String name;//名字public int age;//年龄public void eat() {System.out.println("狗粮");}public void sleep() {System.out.println("天天睡觉");}}

我们在定义一个狗类的时候,自然联想到这个狗有名字有年龄会吃饭会睡觉。因此就可以在类体里面定义一些关于这个狗会做出的一些动作。

注意:

  • 一个.java文件中只能定义一个类
  • 一个.java文件里只能有一个public类
  • 类名注意采用大驼峰定义如MyDogIs
  • 成员前面统一使用public
  • 类里面定义的方法,可以有static修饰,也可以不用static修饰

3.类的实例化

3.1什么是类的实例化

定义一个类,就相当于在计算机中定义了一种新的类型,像我们编译器中int,double,char这些都是Java内置的类型,而我们直接定义的类如狗类就是我们自己人工自定义了一个新类。

我们知道了类的定义方式,就可以拿到类里面的对象。而这些拿到这些对象前必须对这些对象进行实例化。在Java中采用new关键字,配合类名来实例化。格式:类名 任意名 = new 类名()。在上面我们定义了两个类一个是手机类一个是狗类。这两个类里面的内容只是定义了没有被使用,我们实例化类后就可以用使用这些对象。

public class Test {public static void main(String[] args) {Dog dog = new Dog();Phone phone = new Phone();dog.name = "旺财";dog.age = 3;phone.bradnd ="苹果";phone.type ="苹果13";phone.weight = 1.2;phone.length = 120;dog.eat();phone.playGame();System.out.println(dog.name+" "+dog.age);System.out.println(phone.bradnd+" "+phone.type+" "+phone.weight+" "+phone.length);}
}

运行后输出:

上述程序,我们使两个类都通过new关键字实例化了 。一个名为dog一个名为phone,我们通过.号来访问对象的属性和或方法并可以对这些属性进行操作。当然,一类可以同时创建多个实例,同样也是使用new关键字来实现。如:

public class Test {public static void main(String[] args) {Dog dog1 = new Dog();Dog dog2 = new Dog();dog1.name = "旺财";dog2.name = "来福";System.out.println(dog1.name);System.out.println(dog2.name);}
}

运行后输出: 

当然,通过一个类创建的多个实例不会在内存从相互冲突。就拿Dog类实例化的dog1和dog2这两个实例。它们在是在内存中是这个样子的:

注意:

  • new关键字用于创建一个对象的实例
  • 使用.号来访问对象中的属性和方法
  • 同一个类可以创建多个实例

3.2类和对象的说明

  • 类就像一个模型,用来对一个实体进行描述,类这个模型限定了里面有创造出的东西有哪些成员。
  • 类是一个自定义类型,可用来定义变量。
  • 一个类可以实例化多个对象,实例化出对象占用的内存根据类里面的存储的数据类型来计算。

我们可以这样去理解。类型实例化对象就像手机在工厂中,手机要通过一个模型来制造出一个个性能一样的手机。但是这个模型没有实际的实体,我们只能通过这个模型来创造出一个实体。类亦是如此,只是一个模型,我们需要通过new来制造一个实体这就叫实例化类。

当然怎样new一个对象,我们在上面已经讲到了,那么上图描述的大概就是类与实例化的关系。 


4.this引用

4.1为什么要有this引用

this为当前对象的引用,我们来看一个例子,定义一个日期类并通过main方法来调用这个类:

  class Date {public int year;public int month;public int day;public void setData(int y,int m,int d) {year = y;month = m;day = d;}public void show() {System.out.println(year+"年"+month+"月"+day+"日");}
}
public class Test {public static void main(String[] args) {Date date1 = new Date();Date date2 = new Date();date1.setData(2023,3,10);date2.setData(2023,3,11);date1.show();date2.show();}
}

输出:

以上代码,定义了一个Date类。然后在main方法中创建了两个对象分别为date1和date2,并通过Date类中seDate方法对Date里面的对象进行修改,并通过show方法打印出设置好的内容。这样是没有任何问题的,但是还有两个疑问点:

1.形参名不小心与成员变量名相同

    public void setData(int year,int month,int day) {year = year;month = month;day = day;}

那方法体中到底是谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?估计自己都搞不清楚了。因此,我们得这样定义:

    public void setData(int year,int month,int day) {this.year = year;this.month = month;this.day = day;}

加上了this就表明的当前对象的引用。什么意思呢,就是说明了被this的这个才是当前的对象。this的具体用法我们下面会讲到。

2.还是拿上述代码说明

两个对象都在调用setDate和show方法,但是这两个方法中没有任何有关对象的说明,那么setDate和show方法是如何知道打印哪一个对象的数据呢?因此我们可以加上this关键字

  class Date {public int year;public int month;public int day;public void setData(int year,int month,int day) {this.year = year;this.month = month;this.day = day;}public void show() {System.out.println(this.year+"年"+this.month+"月"+this.day+"日");}
}
public class Test {public static void main(String[] args) {Date date1 = new Date();Date date2 = new Date();date1.setData(2023,3,10);date2.setData(2023,3,11);date1.show();date2.show();}
}

如果加上this后,无论是我们还是编译器都能很清晰的知道。诶,我要找的就是这个对象,我要打印的就是这个对象(类中的成员变量)。


4.2什么是this引用

this引用是指,指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问的。注意this引用后面要加.号。

class Date {public int year;public int month;public int day;public void setData(int year,int month,int day) {this.year = year;this.month = month;this.day = day;}public void show() {System.out.println(this.year+"年"+this.month+"月"+this.day+"日");}
}

比如以上的代码,我们的setData方法中形参名和Date的类成员变量名相同了。那么这时候可以用到this来引用成员变量名这样使得我们程序员和编译器都能很清晰的知道,这就是我想要进行的操作。


4.3this引用的特性

  • this的类型是对应类型的类型引用,比如一个类里面有个对象为int那么this的类型为引用的这个对象的类型
  • this只能在"成员方法"中使用
  • 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
  • this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收


5.对象的构造及初始化

在上述内容总,我们知道了this可以访问成员变量。其实this还有另外两种用法:this访问构造方法、this访问成员方法,当然我们在使用这两种方法时,得知道怎样去构造一个对象。具体怎么使用,下面我就来一一讲解。


5.1如何初始化对象

在学习数据类型时,我们知道了在Java中定义一个局部面必须要初始化,否则编译器会编译失败。

public class Test {public static void main(String[] args) {int num;System.out.println(num);}
}

显示:

要让以上代码成功的编译通过,我们只需要在num上赋个初始值 。那如果是对象呢?拿4.1中的日期类举例:

class Date {public int year;public int month;public int day;public void setData(int y,int m,int d) {year = y;month = m;day = d;}public void show() {System.out.println(year+"年"+month+"月"+day+"日");}
}
public class Test {public static void main(String[] args) {Date date = new Date();date.show();date.setData(2023,3,10);date.show();}
}

输出:

我们发现,对象不初始化会默认自带值跟数组不初始化化默认值为0类似,当然并不是所有对象都默认值为0根据不同的类型有不同的默认值。那么对象的默认值我在下方会讲到,先把目前的难点搞懂。

因此我想对象有初始值就调用setDate方法才能将具体的日期设置到对象中。因此我们可以发现有两个问题:

  1. 每次对象创建好后调用setDate方法才能设置具体的日期,非常麻烦,那么对象如何初始化呢?
  2. 局部变量必须要初始化才能使用,为什么对象里面的字段声明后没有值依然可以使用?

以上问题解决方法:对象的初始化与为何对象里面字段不声明有默认值,下文中有很好的讲解。


5.2构造方法 

我们知道方法有返回值,参数列表。而构造方法,没有返回值,只有参数列表,并且一般由public修饰。

class GouZao {public GouZao(){System.out.println("这是一个构造方法");}
}
public class Test {public static void main(String[] args) {GouZao gouzao = new GouZao();}
}

输出:

 

以上代码,我在GouZao类里面创建了一个构造方法。我们可以发现这个构造方法没有返回值,参数列表什么都没有,这就是一个构造方法。 这个构造方法在我们的main方法中直接实例化GouZao类的时候,就已经被调用了。而且只能被调用一次。


5.2.1构造方法概念

上面我们简单认识了构造方法的创建,构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

class Date {public int year;public int month;public int day;public Date(int year,int month,int day) {this.year = year;this.month = month;this.day = day;}public void show() {System.out.println(year+"年"+month+"月"+day+"日");}
}
public class Test {public static void main(String[] args) {Date date = new Date(2023,3,11);date.show();}
}

输出:

以上代码,还是使用一个日期类来给大家展示。我们可以看到Date类里面创建了一个带有参数的构造方法和一个普通show方法。我们直接在main方法里面创建一个对象也就是实例化Date类,并且往这个对象里面塞入三个int类型参数传给构造方法,使得这个对象里面有值了。并调用show方法来输出刚刚塞入的三个int类型值,这就是带有参数的构造方法使用方式。不带参数的在上方5.2中已经演示过了在此就不再重复讲解。

注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟内存空间。


5.2.2构造方法特性

  • 特性1,构造方法只能在一个类中创建,构造方法名必须与类名相同
  • 特性2,构造方法没有返回值类型,设置为void也不行
  • 特性3,如果用户没有显式定义,编译器会生成一份默认的构造方法,且默认的构造方法一定是无参的
  • 特性4,构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
  • 特性5,创建对象时给定对象中参数,对象中的参数会自动跳入到构造方法中。并且编译器也会自动打印构造方法。
  • 特性6,构造方法中,可以使用this调用其他构造方法来简化代码
  • 特性7,创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)

以上6个特性中1-3的特性我已经在上面给大家展示到了,但为了更好的让大家理解,我再次展示一遍。


特性1、特性2

class Dog {public Dog() {}
}

以上代码中,Dog类中的就是一个构造方法。满足了特性1的所有特征,构造方法名与类名相同,并且满足特性2中无返回值。


特性3

class Dog {public Dog() {System.out.println("自动调用了");}
}
public class Test {public static void main(String[] args) {Dog dog = new Dog();}
}

运行后输出:

以上代码,我们发现。在main方法中创建一个dog对象后,编译器自动调用了构造方法,从而输出了“自动调用了”。当然构造方法里面什么都没有的话,编译器运行时也调用只不过什么都没有打印出来。


特性4、特性7

class Dog {public String name;public int age;public String hobby;public Dog() {System.out.println("这是一个构造方法");}public Dog(String name,int age,String hobby) {System.out.println(name+age+"岁了,爱好是"+hobby);}
}
public class Test {public static void main(String[] args) {Dog dog = new Dog("旺财",2,"睡觉");}
}

运行后输出:

以上代码中,在Dog类里我创建了两个构造方法,一个为无参一个未为有参的。当然有参的构造方法比无参的优先级更高,那是因为我在main方法中创建对象时已经把参数传给构造方法里了。而且我们可以看到最后程序输出的只有一个构造方法,印证了特性7中只调用一次构造方法。


特性5

class Dog {public String name;public int age;public String hobby;public Dog(String name,int age,String hobby) {System.out.println(name+age+"岁了,爱好是"+hobby);}
}
public class Test {public static void main(String[] args) {Dog dog = new Dog("旺财",3,"睡觉");}
}

 运行输出:

以上代码满足了特性5中,创建对象时给定对象中参数,对象中的参数会自动跳入到构造方法中。并且编译器也会自动打印构造方法。

当你把构造方法中参数给定义了又没有在创建对象时候给定参数时,这时候编译器会报错。要求你给定相应参数。


特性6

class Dog {public String name;public int age;public String hobby;public Dog() {this("赛虎",4,"吃饭");System.out.println("这是一个无参的构造方法");}public Dog(String name,int age,String hobby) {System.out.println(name+age+"岁了,爱好是"+hobby);}
}
public class Test {public static void main(String[] args) {Dog dog = new Dog();}
}

运行后输出:

以上代码就是构造方法中使用this调用其他构造方法,我们知道main方法中创建对象的时候没有给参数,那么编译器会调用无参的构造方法,创建对象时给定了参数则调用有参的构造方法。但是如果我想要调用有参的构造方法却不在创建对象的时候给定参数,那怎么办呢?就使用this来给有参的构造方法赋值,因此在程序运行后输出了无参和有参的构造方法。


5.3对象的默认值

在5.1中我提到的第二个问题:为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

class Snake {public boolean name;public int age;public void show() {System.out.println(name+" "+age);}}
public class Test {public static void main(String[] args) {Snake S1 = new Snake();S1.show();}
}

运行后输出:

 

因为类在创建后,里面的成员变量根据自己的类型都有了默认值。那么这些默认值是根据数据类型来分配的,如下表所示:

数据类型默认值
byte0
char'\u0000'
short0
int0
long0L
booleanfalse
float0.0f
double

0.0

reference(引用)null

那么我们在创建一个类里面的成员变量或者实例化一个类的时候,虽然只是简单的几行代码,但JVM想要做很多事情,如:

  1. 检测对象对应的类是否加载了,如果没有加载则加载
  2. 为对象分配内存空间
  3. 处理并发安全问题,如多个线程同时申请对象,JVM要保证给对象分配的空间不冲突
  4. 初始化所分配的空间,也就是默认的初始值如上述表格一样

5.4就地初始化

就地初始化就比较简单了,就是在创建类里面的成员变量时直接给初始化上,如以下代码:

class Dog {public String name = "小米";public int age = 3;public String hobby = "睡觉";public Dog() {System.out.println("这是一个无参的构造方法");}public Dog(String name,int age,String hobby) {System.out.println(this.name+"今年"+this.age+"岁,爱好是"+this.hobby);}
}
public class Test {public static void main(String[] args) {Dog dog1 = new Dog();Dog dog2 = new Dog("赛虎",3,"跑步");}
}

运行后输出:


那么本期博客就到这里结束了,感谢你的阅读。如有问题欢迎在评论区指出,如有疑问也可在评论区提出。

下期预告:封装

相关文章:

【JavaSE】类和对象的详解

前言: 大家好,我还是那个不会打拳的程序猿。今天我给大家讲解的是类和对象,相信大家在之前的学习中都是面向过程的思想,那么今天就让我们走向面向对象的世界吧。 目录 1.面向过程VS面向对象 1.1什么是面向过程 1.2什么是面向对…...

2023年中职组“网络安全”赛项广西自治区竞赛任务书

2023年中职组“网络安全”赛项 广西自治区竞赛任务书 一、竞赛时间 总计:360分钟 需求环境可私信博主!点个赞加三连吧! 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2…...

简单的自定义录屏工具

在csdn上写文章,需要配一些操作动态图,需要针对电脑录屏,可能是整个屏幕录屏,也可能是某窗口,甚至是某一小块区域。 动态图最好是gif格式,方便直接嵌入文章中。 一、设计 窗口类widget 切屏类Capturescr…...

数据结构与算法基础(王卓)(17):KMP算法详解(精讲(最简单、直接、有效的思路方法,答案以及代码原理)

本文具体思路参考: (最后证明,该教材/网课实际上是最有效的) DS第四章【3】KMP1_哔哩哔哩_bilibili 中间走的一些弯路的教材: 第06周05--第4章串、数组和广义表5-4.3串的操作--串的匹配算法2--KMP算法_哔哩哔哩_bi…...

【java基础】HashMap源码解析

文章目录基础说明构造器put方法(无扩容,无冲突)put方法(无冲突,有扩容)put方法(有冲突,无树化)put方法(有冲突,树化)remove方法&#…...

实现异步的8种方式,你知道几个?

一、前言 在编程中,有时候我们需要处理一些费时的操作,比如网络请求、文件读写、数据库操作等等,这些操作会阻塞线程,等待结果返回。为了避免阻塞线程、提高程序的并发处理能力,我们常常采用异步编程。 异步编程是一种…...

二叉树的三种遍历

二叉树的遍历可以有:先序遍历、中序遍历、后序遍历先序遍历:根、左子树,右子树中序遍历:左子树、根、右子树后序遍历:左子树、右子树、根下面是我画图理解三种遍历:二叉树里都是分为左子树和右子树。分治思…...

我,30岁程序员被裁了,千万别干全栈

大家好,这里是程序员晚枫,今天是读者投稿。下面开始我们的正文。👇 关注博主👉程序员晚枫 很久了,今天给大家分享一下我从事程序员后,30岁被裁的经历,希望帮到有需要的人。 1、我被裁了 大家好…...

【linux】:进程地址空间

文章目录 前言一、进程地址空间总结前言 本篇文章接着上一篇文章继续讲解进程,主要讲述了进程在运行过程中是如何在内存中被读取的以及为什么要有虚拟地址的存在,CPU在运行过程中是拿到程序的虚拟地址还是真实的物理内存。 一、进程地址空间 下面我们先…...

【保姆级】JMeter Mqtt 压测配置

忽然有个紧急任务要对某个服务做MQTT做压测,紧急实操下JMeter,这里记录下非专业测试员的测试过程、(▽`),欢迎👏大家检查指点( ̄∇ ̄)/下载⏬工具JMeter官方下载地址https://jmeter.apache.org/do…...

C语言数据结构初阶(4)----带头双向循环链表

我们先来看看带头双向循环链表的结构:看到这里我们可能会产生一个想法:这个链表看起来好复杂的样子,是不是它的增删改查比单链表更难写呢?嘿嘿,还真的不是这样的,双向链表的增删改查是很好写的哦&#xff0…...

原生javascript手写一个丝滑的轮播图

通过本文,你将学到: htmlcssjs 没错,就是html,css,js,现在是框架盛行的时代,所以很少会有人在意原生三件套,通过本文实现一个丝滑的轮播图,带你重温html,css和js基础知识。 为什么选用轮播图做示例&…...

【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)

文章目录进程优先级Linux下优先级用top命令更改已存在进程的nice:其他概念进程切换进程优先级 我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。 什么叫做优先级? 优先级和权限是两…...

2016年chatGPT之父Altman与马斯克的深度对话(值得一看)

2016年9月,现今OpenAI CEO,ChatGPT之父,时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷,以及就他而言,对于未来最为重要的五件事。这是OpenAI的两…...

基于vscode开发vue3项目的详细步骤教程 3 前端路由vue-router

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAw…...

【C语言】每日刷题 —— 牛客语法篇(5)

前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博…...

操作系统(2.1)--进程的描述与控制

目录 一、前驱图和程序执行 1.前驱图 2.程序顺序执行 2.1 程序的顺序执行 2.2 程序顺序执行时的特征 3. 程序并发执行 3.1程序的并发执行 3.2 程序并发执行时的特征 一、前驱图和程序执行 1.前驱图 前趋图:是一个有向无循环图,用于描述进程之间执行的前后…...

JAVA查看动态代理类

JAVA查看代理类 1. 代理类 class 生成 System.setProperty // jdk8及之前的设置System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");// or System.getProperties().put("sun.misc.ProxyGenerator.saveGenerated…...

Chapter2 : SpringBoot配置

尚硅谷SpringBoot顶尖教程 1. 全局配置文件 SpringBoot使用一个全局的配置文件 application.properties 或者 application.yml ,该配置文件放在src/main/resources目录或者类路径/config目录下面, 可以用来修改SpringBoot自动配置的默认值。 yml是YA…...

手撕单链表练习

Topic 1:LeetCode——203. 移除链表元素203. 移除链表元素 - 力扣(LeetCode)移除链表中的数字6操作很简单,我们只需要把2的指向地址修改就好了,原来的指向地址是6现在改为3这个思路是完全正确的,但是在链表…...

Kubuntu安装教程

文章目录Kubuntu介绍下载Kubuntu在VMware虚拟机中安装Kubuntu1. 点击“创建新的虚拟机”2. 选择“自定义(高级)”3. 按照下图所示进行设置设置网络4. 点击“自定义硬件”5. 开启虚拟机6. 进入安装界面,选择中文,之后点击“安装Kub…...

[蓝桥杯] 树状数组与线段树问题(C/C++)

文章目录 一、动态求连续区间和 1、1 题目描述 1、2 题解关键思路与解答 二、数星星 2、1 题目描述 2、2 题解关键思路与解答 三、数列区间最大值 3、1 题目描述 3、2 题解关键思路与解答 标题:树状数组与线段树问题 作者:Ggggggtm 寄语:与其…...

Matlab-Loma Prieta 地震分析

此示例说明如何将带时间戳的地震数据存储在时间表中以及如何使用时间表函数来分析和可视化数据。 加载地震数据 示例文件quake.mat包含 1989 年 10 月 17 日圣克鲁斯山脉 Loma Prieta 地震的 200 Hz 数据。这些数据由加州大学圣克鲁斯分校查尔斯F里希特地震实验室的 Joel Yelli…...

Spring Boot全局异常处理

使用注解方式处理全局异常使用 ControllerAdvice (RestControllerAdvice) 配合 ExceptionHandler适用于返回数据的请求(一般是RESTful接口规范下的JSON报文)package com.example.exception;import org.slf4j.Logger; import org.s…...

websocket每隔5秒给服务端send一次信息

websocket轮询每隔5秒给服务端send一次信息,主要功能点如下:socket 采用了定时器 setInterval() 需要清除定时器否则会报错监听了突然关闭浏览器窗口,destroyed里面直接监听 window.removeEventListener("beforeu…...

2023年中职网络安全——SQL注入测试(PL)解析

SQL注入测试(PL) 任务环境说明: 服务器场景:Server2312服务器场景操作系统:未知(关闭链接)已知靶机存在网站系统,使用Nmap工具扫描靶机端口,并将网站服务的端口号作为Flag(形式:Flag字符串)值提交。访问网站/admin/pinglun.asp页面,此页面存在SQL注入漏洞,使用排…...

利用蜜罐捕捉攻击实验(31)

预备知识 1、蜜罐的含义和作用 蜜罐(Honeypot)是一种在互联网上运行的计算机系统。它是专门为吸引并诱骗那些试图非法闯入他人计算机系统的人(如电脑黑客)而设计的,蜜罐系统是一个包含漏洞的诱骗系统,它通过模拟一个或多个易受攻击的主机&#xff…...

PyTorch深度学习实战 | 自然语言处理与强化学习

PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。本文主要介绍深度学习领域中自然语言处理与强化学习部分。自然语言区别于计算机所使用的机器语言和程序语…...

测牛学堂:接口测试基础理论和工具的使用

接口测试流程总结 1 需求分析,看产品经理的需求文档 2 接口文档解析,开发编写的api接口文档 3 设计测试用例 4脚本开发 5 执行及缺陷跟踪 6 生成测试报告 7接口自动化持续集成 测试解析接口文档 接口文档,又称为api文档,是由后…...

定长内存池的实现

解决的是固定大小的内存申请释放需求&#xff1a; 性能达到极致不考虑内存碎片问题(统一使用自由链表管理还回来的空间) 为了避免命名污染&#xff0c;不要直接using namespace std;只展开常用的。 #include <iostream> using std::cout; using std::endl;申请空间时有…...

wordpress如何修改登录地址/seo值是什么意思

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 原生代码问题VBR和CBR概念参考 原生代码问题 MediaCodec中的bitrate mode有个坑&#xff0c;比如我在设置之前想确认下CBR是否支持&#xff0c;那么会调用isBitrateModeSupported()判断&#xff0c;这样会有问题。 M…...

网站用excel做数据库吗/免费推广的方式有哪些

1.使用自带效果 在Flex里面不像在Flash里面随意制作动画了&#xff0c;Flex更趋向于应用程序&#xff0c;而不是动画制作了&#xff0c;所以没有了时间轴的概念。在Flex中使用动画效果&#xff0c;可以用Flex自带的Effect&#xff0c;或者自已定制Effect&#xff0c;因为很多人…...

和恶魔做交易的网站/发布任务注册app推广的平台

基于 Promise 的动画库 所谓的动画序列&#xff0c;也就是说可以在上一段动画播放结束之后进行下一段动画的播放&#xff0c;这样可以方便用多段动画实现各种不同的复杂效果。而我们不难想到&#xff0c;要实现这个目的&#xff0c;将动画接口实现成 Promise 是一个非常好的方案…...

广东省住房和建设网站/网络广告电话

1. 前言 上一篇文章 《Flutter渲染之通过demo了解Key的作用》里面通过两个小 demo 讲了 Key 的作用。其实在写小 demo 的过程中也碰到一个问题&#xff0c;开始是没有想清楚的&#xff0c;后来跟同事交流&#xff0c;去源码里面翻了翻才找到一些原因&#xff0c;这里再来写一下…...

长沙工程有限公司/企业seo顾问

“互联网这个行业&#xff0c;最早由老虎和狐狸把事业开创起来&#xff0c;后来逐渐进入两条狗&#xff0c;然后是熊——百度&#xff0c;还有猫——猫扑。当然&#xff0c;南极的动物企鹅也不甘寂寞&#xff0c;没有想到 在这么多野兽横行的市场上竟然长出土豆&#xff0c;最后…...

做网站怎么样/百度云搜索引擎入口百度网盘

--取平均值 AVG() :求sal平均值 select avg(sal) as avg_sal from emp; --求和 SUM() 对sal求和 select sum(sal) as sum_sal from emp&#xff1b; --求最大值 MAX()、最小值MIN() 对sal进行操作 select max(sal) as max_sal,min(sal) as min_sal from emp&#xff1b; --求行…...