类和对象的初步介绍

news2025/7/19 6:23:25

文章目录

  • 面向对象的初步认识
    • 什么是面向对象
    • 面向对象与面向过程
  • 类定义和使用
    • 简单认识类
    • 类的定义格式
    • 随堂练习
      • 定义一个学生类
  • 类的实例化
    • 什么是实例化
    • 类和对象的说明
  • this 引用
    • 为什么要有this引用
    • 什么时this引用
    • this引用的特性
  • 对象的构造和初始化
    • 构造方法
      • 概念
      • 特性
    • 默认初始化
    • 就地初始化
  • 封装
    • 封装的概念
    • 访问限定符
    • 封装扩展之包
      • 包的概念
      • 导入包中的类
      • 自定义包
      • 包的访问权限控制举例
  • static成员
    • 再谈学生类
    • static修饰成员变量
    • static修饰成员方法
    • static成员变量初始化
  • 代码块
    • 代码块概念以及分类
    • 普通代码块
    • 构造代码块
    • 静态代码块
  • 对象的打印

面向对象的初步认识

什么是面向对象

Java是一门纯面向对象的语言(简称OOP),在面向对象的世界里,一切皆为对象。面向对象是一种解决问题的一种思想,主要依靠对象之间的交互完成一件事。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

面向对象与面向过程

  1. 传统洗衣服过程

    在这里插入图片描述
    传统的方式:注重的是洗衣服的过程,少了一个环节都可能不行。
    而且不同的衣服洗的方式、时间、拧干方式都不同,处理起来我们必须逐过程解决。如果换成洗鞋子,过程还要使用另一种方式。
    按照这种方式来写代码,如需求改变,将来扩展或者维护起来会很麻烦
  2. 现代洗衣服
    在这里插入图片描述

总共有四个对象:人、衣服、洗衣机。
整个洗衣服的过程就变成了人设置洗衣机,让洗衣机洗衣服的过程。
一面向对象方式来进行处理,就不关注洗衣服的过程,具体是怎麽洗衣服我们并不关注,我们只需要对洗衣机进行交互即可。通过对象间的交互来完成任务
【注意】面向对象和面向过程是解决问题的两种思路,并没有好坏之分。

类定义和使用

面向对象设计的重点是对象。而对象是生活中的实体,如洗衣服,房子。

简单认识类

***类是用来对一个实体(对象)来进行描述的,***主要描述该对象的具体属性和功能。描述之后计算机即可识别和使用。

比如:类:手机
属性:品牌,颜色,系统…
功能:打电话,看视频,听音乐…

接下来让我们在Java中来定义。

类的定义格式

在Java中定义类时需要用到 class 关键字,格式如下:

class className {
//成员属性
//方法
}

class 为定义类时的关键字,className 为类的名字,{}内为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称为类的成员属性或者成员变量。方法主要说明类的功能,称为类的成员方法
这里我们定义一个狗的类。

//关于狗的类
class Dog {
    //成员属性 成员变量
    public String name;
    public int age;

    //成员方法
    public void eat() {
        System.out.println("吃骨头!");
    }
    public void run() {
        System.out.println("用四条腿奔跑!");
    }

}

注意事项

  1. 类名注意采用大驼峰的形式

随堂练习

定义一个学生类

//定义一个学生类
class Student {
    //成员属性 成员变量
    public String name;
    public int age;
    public int achievement;

    //成员方法
    public void DoHomeork() {
        System.out.println("写作业!");
    }
    public void play() {
        System.out.println("去玩耍!");
    }

}

【注意事项】

  1. 一般一个文件当中只有一个类
  2. main 方法所在的类要使用 public 修饰(注意:Eclipse 默认会在 public 修饰的类中找 main 方法)
  3. public 修饰的类必须要和文件名相同
  4. 不要轻易去修改 public 修饰的类的名称,如果要修改,通过开发工具修改。

类的实例化

什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与 int, double 类似,只不过 int 和 double 是Java 语言自带的内置类型,而类是用户自定义了一种新的类型。比如上述的:DOG 和 Student 类。
用类创建对象的过程,称为类的实例化。在Java中采取 new 关键字,配合类名来实例化的对象。

//狗
//实例化对象
class Dog {
    public String name;
    public int age;

    public void wangwang() {
        System.out.println("汪汪叫!");
    }

    public void run() {
        System.out.println("用四条腿奔跑!");
    }
}

public class test {
    public static void main(String[] args) {
        Dog dog1 = new Dog();//通过new实例化对象
        dog1.name = "汪汪队";
        dog1.age = 1;
        dog1.run();
        dog1.wangwang();

        //再实例化一个对象
        Dog dog2 = new Dog();
        dog2.name = "哮天犬";
        dog2.age = 100;
        dog2.run();
        dog2.wangwang();
    }
}

在这里插入图片描述
【注意事项】

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

类和对象的说明

  1. 类知识一个模型一样的东西,用来对实体进行描述,限定了类有哪些成员;
  2. 类是一种自定义的类型,可以用来定义变量。
  3. 一个类可以实例化多个对象,实例化出来的对象占用实际的物理空间,储存成员变量
  4. 通俗一点来讲,类相当于一个统称,像:房子。但我们并不知道这个房子的具体细节。实例化一个对象相当于一个具体的、真实存在的房子,像:一个三层楼,带花园的小别墅。类实例化一个对象相当于通过通过图纸造房子。
    在这里插入图片描述

this 引用

为什么要有this引用

//this 应用
//为什么要有this引用
class Date {
    public int year;
    public int month;
    public int day;

    public void setDate(int y, int m, int d) {
        year = y;
        month = m;
        day = d;
    }
    public void printDate() {
        System.out.println(year + "." + month + "." + day);
    }
}

public class test {
    public static void main(String[] args) {
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();

        d1.setDate(2022, 11, 17);
        d2.setDate(2011, 11, 12);
        d3.setDate(2001, 1, 30);

        d1.printDate();
        d2.printDate();
        d3.printDate();
    }

}

在这里插入图片描述
以上代码定义了一个日期类, 同时main方法中创建了三个对象,通过对Date类中的成员方法我们可以对对象进行初始化和打印。但是有两个疑问。
1. 参数名与成员变量相同时会发生什么?

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

函数体中到底是谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?这样我们又能否进行初始化?
2. 三个对象都在调用setDate和printDate函数,但是这两个函数中并没有任何有关对象的说明,setDate和printDate函数如何知道对象的数据呢?
在这里插入图片描述
接下来让我们揭开this神秘的面纱。

什么时this引用

***this应用指向当前对象,在成员方法中对成员变量的操作,都是通过引用去访问。***只不过所有的操作对用户都是透明的,即用户不需要自己来传递,编译器会帮你完成。
在这里插入图片描述
在实际的操作过程中编译器都会加上这样的参数,以便识别不同的对象。
【注意】this引用的时调用成员方法的对象。

this引用的特性

  1. this的类型:对应类类型的引用,即哪个对象调用就是那个对象的引用类型;
  2. this只能在“成员方法”里使用;
  3. 在“成员方法”里,this只能引用当前对象。
  4. this是一个隐蔽的参数。编译器会自动传递,编译器会负责将调用成员方法的对象的引用传递给“成员方法”,this用来接收对象的引用。

对象的构造和初始化

构造方法

概念

构造方法(也称构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期只能调用一次

/构造方法
//概念
class Date {
    public int year;
    public int month;
    public int day;

    //构造方法
    //名字要与类名熊,没有放回值,void也不行
    //一般情况下使用public修饰
    //创建对象时由编译器自动调用,并且在对象的生命周期内只能调用一次。
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("Date带参数的构造别调用了一次");
    }

    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }
}

public class test {
    public static void main(String[] args) {
        //此处创建对象时,构造方法自动被调用
        Date d = new Date(2022, 11, 17);
        d.printDate();
    }
}

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

特性

  1. 名字要与类名相同;
  2. 没有返回值,void也不行;
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只能调用一次。如果当时没有进行赋值,只能在接下来的步骤中,自己手动赋值。
  4. 如果用户自己没有写构造方法,编译器会自动提供一套无参的、默认的构造方法。【注意】如果自己写了构造方法,默认的构造方法将不会被提供。
  5. 构造方法可以重载(根据自己的需求提供不同参数的构造方法);
  6. 构造方法中,可以通过this调用其他的构造方法;【注意】this(…)必须在构造方法中第一条语句;不能相互调用
//this调用其他的构造方法
class Date {
    public int year;
    public int month;
    public int day;

    public Date() {
        //这里的this调用了另一个带参的构造方法
        //this(...)必须放在构造方法的第一行
        this(2000, 1, 1);
        System.out.println("Date不带参数的构造方法被调用了一次");
    }
    
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("Date带参数的构造别调用了一次");
    }

    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }
}

public class test {
    public static void main(String[] args) {
        //此处创建对象时,构造方法自动被调用
        Date d = new Date();
        d.printDate();
    }
}

在这里插入图片描述

默认初始化

在上文中提出的第二个问题:为什么局部变量在使用时必须初始化,而成员变量不需要呢?

//默认初始化
class Date {
    public int year;
    public int month;
    public int day;

    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }
}

public class test {
    public static void main(String[] args) {
        //此处创建对象时,构造方法自动被调用
        Date d = new Date();
        d.printDate();
    }
}

在这里插入图片描述
要搞清楚这个过程,就要知道new关键字背后所发生的一些事情。

Date d = new Date(2021,6,9);

在程序层面只是一条简单的语句,但是在JVM层面需要做好多的事情:

  1. 检测对象对应的类是否被加载,如果没有则加载;
  2. 为对象分配空间;(对应上了上面的内容,构造方法并不负责开配空间)
  3. 处理并发安全问题(保证给对象分配的空间并不冲突)
  4. 初始化所分配的空间
    即:空间被申请好后,对象里面的成员变量会被设置一个初识的值,比如:
数据类型默认值
byte\short\int0
long0L
float0.0f
double0.0
char‘\u0000’
booleanfalse
referencenull
  1. 调用构造方法,给对象各成员变量进行赋值。(实际上这是第二次更改成员变量的值,第一次是默认的值);

就地初始化

在声明成员变量时,直接给出初始值。

//就地初始化
class Date {
    public int year = 2000;
    public int month = 1;
    public int day = 1;

    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }
}

public class test {
    public static void main(String[] args) {
        //此处创建对象时,构造方法自动被调用
        Date d = new Date();
        d.printDate();
    }
}

在这里插入图片描述
【注意】代码编译完成后,编译器会将所有给成员初始化的这些语句,添加到构造函数中。(意思如下)
在这里插入图片描述

封装

封装的概念

面向对象程序的三大特性:封装、继承、多态。
何为封装?简单的说就是套壳屏蔽细节
比如:我们使用洗衣机的时候,我们只需要下达命令让其执行,我们不需要知道洗衣机工作原理和方法。
使用电脑进行办公时,我们只需下达命令让其操作,我们不需要关注电脑是如何实现这些功能的。
封装:将数据和操作数据的方法进行有机的结合,隐蔽对象的属性和实现细节,仅对外公开接口来和对象进行交互

访问限定符

Java中主要通过类的访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认识,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

范围privatedefaultprotectedpublic
同一包中的同一类
同一包中的不同类
不同包中的子类
不同包中的非子类

比如:
public:可以理解为一个人的外貌特征,谁都能看到;
default:对于自己家族中(同一个包)不是什么秘密,对于其他人来说就是隐私了。
private:只有自己知道,其他人不知道。
【说明】

  • default权限指:什么都不写的默认权限;
  • 访问权限出了可以限定类中的成员可见性,也可以类的可见性
    【注意】一般情况下成员变量设置为private,成员方法设置为public.
//访问限定符
class Computer {
    private String cpu;
    private String memory;
    public String screen;
    String brand;

    public Computer(String cpu, String memory, String screen, String brand) {
        this.brand = brand;
        this.cpu = cpu;
        this.memory = memory;
        this.screen = screen;
    }

    public void Surflnternet() {
        System.out.println("上网!");
    }
}

public class test {
    public static void main(String[] args) {
        Computer p = new Computer("hw", "i7","8G","13*14");
        System.out.println(p.cpu);//这里cpu只能在自己的类中被访问,失败
        System.out.println(p.screen);//可以被其他类访问,成功
        System.out.println(p.brand);//可以在同一包被访问,成功
    }
}

封装扩展之包

包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起形成一个组,称为软件包。比如:我们为了更好的管理电脑中的音乐,我们可以将中文歌放在一个文件夹里,把英文歌放在另一个文件夹里,把日语歌放在另一个文件夹里。每一个文件夹就相当于一个包。
在这里插入图片描述
在Java中也引入了包。包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包即可

导入包中的类

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.util.Date;

//导入包中的类
public class test {
    public static void main(String[] args) {
        //java.util.Date date = new java.util.Date();
        Date date = new Date();
        //得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

但是我们更建议显示的指定要导入的类名。否则还是容易出现冲突的情况(在不同的包中,有相同名称的类名会发生冲突)。

自定义包

【基本规则】

  • 在文件中的最上方加上一个 package 语句指定该代码在那个包中。
  • 包名需要尽量指定成唯一的名字,通常会用公司的 域名和颠倒形式(com.***.demo1)
  • 包名要和代码路径相匹配。例如建造com.baidu.demo1的包,那么会存在一个对应的路径com/baidu/demo1来储存代码。
  • 如果一个类没有package语句,则该类会被放到一个默认的包中。
    操作步骤
  1. 在IDEA中先新建一个包:右键scr-> New -> 包
    在这里插入图片描述
  2. 在弹出的对话框中输入包名,例如com.baidu.demo1
    在这里插入图片描述
  3. 在包中创建类,右键包名 -> New -> Java Class, 然后输入类名即可。
    在这里插入图片描述
  4. 此时可以在我们的磁盘上的目录结构已经被IDEA自动创建出来了。
    在这里插入图片描述
    5.同时我们也可以看到在新建的Test.java文件的最上方,就出现了一个package语句。
    在这里插入图片描述

包的访问权限控制举例

Computer类位于com.baidu.demo1包中,TestComputer位置com.baidu.demo2包中

package com.baidu.demo1;

public class Computer {
    String brand;
    private String cpu;
    private String memory;
    public String screen;

    public Computer(String brand, String cpu, String memory, String screen) {
        this.brand = brand;
        this.cpu = cpu;
        this.memory = memory;
        this.screen = screen;
    }

    public void Surflnternet() {
        System.out.println("网上冲浪~~~~");
    }
}
package com.baidu.demo2;

import com.baidu.demo1.Computer;

public class TestComputer {
    public static void main(String[] args) {
        Computer p = new Computer("hw", "i7", "8G", "13*14");
        System.out.println(p.screen);
        //System.out.println(p.cpu);  //错误,cpu是私有的,不允许被其他类访问
        //System.out.println(p.brand);//错误,brand是默认的,不允许被其他包中的类访问
    }
}

static成员

再谈学生类

使用前文中介绍的学生类实例化三个对象s1, s2, s3, 每个对象都有自己的名字,年龄,成绩等成员信息,这些信息就是对不同学生的描述,但是这几个学生都有一个相同的特性,我们将如何表示呢?
在Java中,被static修饰的成员,被称为静态成员,也称为类成员,其不属于某一个具体的对象,而是所有对象共享的。

static修饰成员变量

static修饰的成员变量,称为静态成员变量
【静态成员变量特征】

  1. 不属于某一个具体的对象,是类的属性,所有对象共享的,不存储在任何一个对象的空间中;
  2. 可以通过对象访问,也可以通过类名访问,推荐使用类名访问;
  3. 类变量储存在方法区中;
  4. 生命周期伴随类的一生(随着类的加载而创建,随着类的卸载而销毁);
//static修饰的成员变量
class Student {
    //成员属性 成员变量
    public String name;
    public int age;
    public int achievement;

    public static String school = "大肥羊学校";

    public Student(String name, int age, int achievement) {
        this.name = name;
        this.age = age;
        this.achievement = achievement;
    }

    //成员方法
    public void DoHomework() {
        System.out.println("写作业!");
    }

    public void play() {
        System.out.println("去玩耍!");
    }
}

public class test {
    public static void main(String[] args) {
        Student s1 = new Student("喜羊羊",10, 99);
        Student s2 = new Student("懒洋洋",9, 60);
        Student s3 = new Student("美羊羊",10, 83);

        //通过对象访问静态成员变量
        System.out.println(s1.school);
        System.out.println(s2.school);
        System.out.println(s3.school);

        //通过类访问静态成员变量
        System.out.println(Student.school);

    }
}

static修饰成员方法

一般类中的数据成员都设置为private,而成员方法设置public,那样设置之后,Student类中school属性又如何在类外访问呢?
在这里插入图片描述
答案是我们可以通过方法方法来在类外访问和修改相关变量,实例如下:

//static修饰的成员变量
//成员变量使用private修饰,我们如何访问成员变量
class Student {
    //成员属性 成员变量
    private String name;
    private int age;
    private int achievement;

    private static String school = "大肥羊学校";

    public Student(String name, int age, int achievement) {
        this.name = name;
        this.age = age;
        this.achievement = achievement;
    }

    //成员方法

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int getAchievement() {
        return achievement;
    }

    public static String getSchool() {
        return school;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setAchievement(int achievement) {
        this.achievement = achievement;
    }

    public static void setSchool(String school) {
        Student.school = school;
    }

    public void DoHomework() {
        System.out.println("写作业!");
    }

    public void play() {
        System.out.println("去玩耍!");
    }
}

public class test {
    public static void main(String[] args) {
        Student s1 = new Student("喜羊羊",10, 99);
        Student s2 = new Student("懒洋洋",9, 60);
        Student s3 = new Student("美羊羊",10, 83);

        //访问成员变量
        System.out.println(s1.getName());
        System.out.println(s2.getAge());
        System.out.println(s3.getAchievement());
        
        //访问静态成员变量
        System.out.println(Student.getSchool());
        
    }
}

Java中,***被static修饰的成员方法称为静态成员方法,是类的方法。***静态成员变量一般通过静态成员方法来访问(如上述的getSchool()).
静态方法特征

  1. 不属于某个具体的对象,是类的方法;
  2. 可以通过对象调用,也可以通过类名调用,推荐使用类名调用;
  3. 不能在静态方法中访问任何非静态成员变量(与对象无关,是类的特征);
  4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用;
  5. 静态方法无法重写,无法实现多态(后面的知识);

static成员变量初始化

注意:今天太成员变量一般不会放在构造方法中来初始化,构造方法初始化的是与对象相关的实例属性。
静态成员变量的初始化分为来个两种:就地初始化和静态代码块初始化

  1. 就地初始化
    在定义的时候直接给出初始值
    如上述的Student类

private static String school = "大肥羊学校”;

2.静态代码初始化
什么是静态代码块呢?继续往下看:)~~

代码块

代码块概念以及分类

***使用{ }定义的一段代码称为代码块。***根据代码块定义的位置以及关键词,又可以分为一下四种:

  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块(以后讲解)

普通代码块

定义在方法中的代码块。(非常少见)

//普通代码块
public class test {
    public static void main(String[] args) {
        {
            //此部分为普通代码块
            int x = 10;
            System.out.println(x);
        }
        int x = 30;
        System.out.println(x);
    }
}

在这里插入图片描述

构造代码块

构造块:定义在类中的代码块(不加修饰词),也叫实例代码块。构造代码块一般用于初始化实例成员变量。(初始化成员变量的另一种方法)

//构造代码块
class Student {
    private String name;
    private int age;
    private int achievement;

    private static String school = "大肥羊学校";


    //构造代码块  实例代码块
    {
        name = "未知";
        age = 10;
        achievement = 100;
    }
    public Student() {

    }

    public Student(String name, int age, int achievement) {
        this.name = name;
        this.age = age;
        this.achievement = achievement;
    }

    public void DoHomework() {
        System.out.println("写作业!");
    }

    public void play() {
        System.out.println("去玩耍!");
    }

    public void show() {
        System.out.println(name + " " +age + " " +achievement);
    }
}

public class test {
    public static void main(String[] args) {
        Student s = new Student();
        s.show();
    }
}

在这里插入图片描述

静态代码块

使用static定义的代码块被称为静态代码块。一般用于初始化静态成员变量

//静态代码块
class Student {
    private String name;
    private int age;
    private int achievement;

    private static String school;


    //静态代码块
    static {
        school = "大肥羊学校";
        System.out.println(school);
    }

    //构造代码块  实例代码块
    {
        name = "未知";
        age = 10;
        achievement = 100;
    }
    public Student() {

    }

    public Student(String name, int age, int achievement) {
        this.name = name;
        this.age = age;
        this.achievement = achievement;
    }

    public void DoHomework() {
        System.out.println("写作业!");
    }

    public void play() {
        System.out.println("去玩耍!");
    }

    public void show() {
        System.out.println(name + " " +age + " " +achievement);
    }
}

public class test {
    public static void main(String[] args) {
        Student s = new Student();
        s.show();
    }
}

注意事项

  • 静态代码块不管生成多少个对象,只会被执行一次;
  • 静态成员变量是类的属性。因此是在JVM加载类时开辟空间并初始化的;
  • 如果一个类中包含多个静态代码块,在编译代码的时候,编译器会按照定义的先后次序依次执行(合并);
  • 实例代码块只有在创建对象的时候才会被执行。

对象的打印

我们要打印对象的成员变量我们应当怎么做呢?

  1. 在Java中每个类都会继承object类,除非声明了继承了别的类。在object类中有一个成员方法叫toString。该方法是将Java对象的内存地址通过哈希算法得出的int类型的值转化为十六进制。这个值可以理解为一个地址。
//toString
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 String toString() {
//        return "[" + name + "," + gender + "," + age + "]";
//    }
}
public class test {
    public static void main(String[] args) {
        Person person = new Person("Jim","男", 18);
        System.out.println(person.toString());
    }
}

在这里插入图片描述
Person类,@分割,后面的时十六进制地址。
如果我们要打印对象的成员属性,我们可以重写toString()这个方法。
在这里插入图片描述

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

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

相关文章

Shell脚本学习指南(三)——文本处理工具

文章目录排序文本行的排序以字段的排序文本块排序sort的效率sort的稳定性sort小结删除重复重新格式化段落计算行数、字数以及字符数打印打印技术的演化其他打印软件提取开头或结尾数行排序文本 含有独立数据记录的文本文恶剪,通常都可以拿来排序。一个可预期的记录…

Vue3 - 组件通信(父传子)

前言 在 Vue3 中&#xff0c;父组件向子组件传参的方法。 与 Vue2 相比&#xff0c;还是有一些区别的。 基础示例 现在我们的需求是&#xff0c;要通过父组件&#xff0c;传递一个标题来让子组件显示。 子组件 Com.vue&#xff1a; <template><div>{{ title }}&l…

大数据工程师必备之数据可视化技术

可视化技术 数据&#xff1a; 偏耀明 7800 高军鹏 8000 代欣 8800 王国庆 20000 ​ 应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据、生产数据、用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数…

tp6使用redis消息队列

尾部写入 for ($i1;$i<1000;$i){Cache::store(redis)->rpush(list,date("Y-m-d H:i:s")."消息{$i}"); }头部读取消息队列并删除 $list Cache::store(redis)->lpop(list); 1、新建个方法运行写入队列 public function hello(){for ($i1;$i<…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: erase

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/erase/ 公有成员函数 <deque> std::deque::erase C98 iterator erase (iterator position); iterator erase (iterator first, iterator last); C11 iterator erase (const_iterator position )…

Android 后台服务启动Actvity

一、问题背景 相机自动化测试需求&#xff0c;测试apk通过bindService绑定相机apk里面的一个服务&#xff0c;通过AIDL接口的方式向相机apk发送命令&#xff0c;服务接收到命令之后会拉起相机的Activity。原本没有人为干预的情况下是可以拉起这个Activity的&#xff0c;但是拉…

基于PYTHON游乐场服务管理系统的设计与实现

摘要 项目门票是游乐园必不可少的一个部分。在游乐园发展的整个过程中&#xff0c;项目门票担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类管理系统程序也在不断改进。本课题所设计的游乐场服务管理系统&#xff0c;使用Django框架&#xff0c;Python语言进…

如何优雅部署OpenStack私有云I--Kolla

为方便大数据平台与管理工具的研发&#xff0c;在公司成本不额外增加的情况下&#xff0c;从公司仓库里拉了几台下线物理机来做大数据平台的实验环境。但整体物理机性能都偏高&#xff0c;单独安装一个大数据服务&#xff0c;很豪&#xff0c;但是也很浪费。而且主机台数不是很…

优先级队列(堆)——小记

文章目录堆概念堆的创建堆向下调整堆的插入堆的删除堆排序整体代码&#xff08;创建堆&#xff08;向下调整&#xff09;&#xff0c;堆的插入&#xff0c;堆的删除&#xff0c;堆排序&#xff09;TOPKPriorityQueue特性堆 概念 如果有一个关键码的集合Kk0&#xff0c;k1&…

48 基于 jdk9 编译的 jdk8 的字节码报错

前言 呵呵 大概是由于最近的这个 “Apache Log4j被曝存在严重高危险级别远程代码执行漏洞” 昨天晚上 编译了一下 logging-log4j2-log4j-2.15.0-rc2, 项目需要一个 toolchain.xml 的一个配置, 里面需要配置为 jdk9 因此 我的项目配置的 jdk 为 jdk9 然后 idea 里面默认…

【计算机毕业设计】校园二手市场平台+vue源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐…

校园跑腿系统小程序怎么用_校园跑腿系统小程序的基本功能是什么

大学可能是人生中最可能的阶段&#xff0c;而大学也是创业的最佳选择。近年来&#xff0c;在微信小程序的红利生态圈下&#xff0c;校园跑腿系统系统已经成为大学校园创业的第一热点。 随着大学生人数的增加&#xff0c;消费水平也在不断地提高&#xff0c;大学校园内代取快递、…

交换机之trunk access hybrid 以及vlan深入理解

服务器开发系列 文章目录服务器开发系列一、802.1Q封装VLAN数据帧格式是&#xff1f;二、Access Trunk Hybrid是什么&#xff1f;三、Access Trunk Hybrid数据处理流程是什么&#xff1f;四、示例五、最简单交换机应用总结一、802.1Q封装VLAN数据帧格式是&#xff1f; IEEE 80…

kubernetes中ingress控制器traefik获取真实客户源IP

一.现象 公司kubenetes生产环境使用的ingress控制器是traefik&#xff0c;默认是通过deployment部署的&#xff0c;现在研发上反馈不能获取客户的真实源IP地址&#xff0c;通过x_forward_for获取的IP地址都是kubernetes集群内部的IP地址。 二.解决思路 通过查找traefik的官方…

【雨夜】业务中 自定义异常用 Exception 还是 RuntimeException? 为什么?

今天和同事 聊了下异常 相关的事&#xff0c;整理在此 目前公司中使用的 自定义异常是 extend RuntimeException 目录 思维导图 继承异常 我们在业务开发中 继承异常是extend RuntimeException 还是 Exception呢 一想 这肯定是 RuntimeException 啊&#xff0c;但是这是为什…

kingdee漏洞金蝶云星空存在弱口令漏洞

kingdee漏洞简介 金蝶云星是基于云计算、大数据、社交、人工智能、物联网等前沿技术研发的新一代战略性企业管理软件。金蝶云星空存在弱口令漏洞&#xff0c;攻击者利用该漏洞登录系统后台&#xff0c;获取敏感信息。 CNNVD编号&#xff1a;CNVD-2022-15854危害等级&#xff…

【C++笔试强训】第二十七天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

使用PostMan测试WebService接口

在浏览器中输入 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 查看是否启动服务&#xff0c;确保WS地址可用。通过地址获取获取WSDL地址相关参数&#xff0c;并找空间命名&#xff0c;这个位置是固定的&#xff0c;下面会用到&#xff0c;这里是 http://WebXml.c…

62岁腾格尔要开线上演唱会,直播间能否唱《遥远的地方》成焦点

人生六十岁一花甲&#xff0c;著名草原歌手腾格尔&#xff0c;在经历了人生的风风雨雨后&#xff0c;如今已经步入了六十二岁的年龄。虽然已经年过花甲&#xff0c;但是腾格尔老师依旧意气风发&#xff0c;他的个人线上演唱会&#xff0c;也准备在11月19日与大家见面。 在网友的…

【C++布隆过滤器和哈希切分】

目录 1.布隆过滤器概念 2.布隆过滤器优点 3.哈希切分 位图储存的类型只能是整形&#xff0c;有没有储存自定义类型或者是字符串类型的“位图”呢&#xff1f; 1.布隆过滤器概念 步隆过滤器是由布隆&#xff08;Burton Howard Bloom&#xff09;在1970年提出的 一种紧凑型的…