javaSE -类(class)和对象

news2024/11/27 8:33:17

一、类与对象的初步认知

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
面向过程注重的是过程,在整个过程中所涉及的行为,就是功能。
面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来

1.1、面向对象概念

1.面向对象是思考问题的一种思考方式,是一种思想。    
2.类就是一类对象的统称。对象就是这一类具体化的一个实例。   
3.面向对象的好处:将复杂的事情变简单了,只要面对一个对象就行。

1.2、面向对象设计

面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法!
(被动的一方是数据的拥有者,主动的一方是执行者)
开发时:找对象,建对象,用对象,并维护对象之间的关系。

面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性和行为
在这里插入图片描述
以上转载于:https://blog.csdn.net/DarkAndGrey/article/details/121039002

二、类和类的实例化

类就是一类对象的统称。对象就是这一类具体化的一个实例。
简单的例子:我们做月饼的模子就是一个类,而通过这个模子可以做出月饼,那么在这个例子当中,类就是那个模子,而月饼就是那个对象,所以月饼就是一个实体。一个模子可以实例化无数个对象。
总的来说:类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。
声明一个类就是创建一个新的数据类型,而类在 Java 中属于引用类型, Java 使用关键字 class 来声明类。

2.1、类的创建

基本语法

	// 创建类
	class <class_name>{
		field;//成员属性,也叫字段,成员变量
		method;//成员方法
}
	// 实例化对象
	<class_name> <对象名> = new <class_name>();

class为定义类的关键字,ClassName为类的名字,{}中为类的主体(类体)。
类中的元素称为:成员属性(成员变量)。类中的函数称为:成员方法。

例如:创建一个学生类

//创建一个学生类
class Student{
    //学生有的属性
    String name; //姓名
    int age; //年龄
    int hight; //身高
    
    //方法(又称 成员方法) 可以解析为 学生的行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}

和之前写的方法不同, 此处写的方法不带 static 关键字. 后面我们会详细解释 static 是干啥的

2.2、类的实例化 (通过new关键字)

	// 创建类
	class <class_name>{
		field;//成员属性,也叫字段,成员变量
		method;//成员方法
}
	// 实例化对象
	<class_name> <对象名> = new <class_name>();

用类类型创建对象的过程,称为类的实例化

  1. 类只是一个模型一样的东西,限定了类有哪些成员.
  2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
  3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东
    西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
//创建一个学生类
class Student{
    //学生有的属性
    String name; //姓名
    int age; //年龄
    int hight; //身高

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}
public class TestDome {
    public static void main(String[] args) {
        Student student1 = new Student();
    }
}

在这里插入图片描述
一个类可以实例化多个对象

//创建一个学生类
class Student{
    //学生有的属性
    String name; //姓名
    int age; //年龄
    int hight; //身高

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}
public class TestDome {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
        Student student3 = new Student();
        Student student4 = new Student();
}    	

在这里插入图片描述

2.3、访问 类的成员变量(通过引用来访问)

//创建一个学生类
class Student{
    //学生有的属性
    String name; //姓名
    int age; //年龄
    int hight; //身高

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}
public class TestDome {
    public static void main(String[] args) {
        Student student = new Student();
        //访问属性
        System.out.println(student.name);
        System.out.println(student.age);
        System.out.println(student.hight);
        //访问方法
        student.eat();
        student.sleep();
        //还可以给 属性赋值
        student.name = "张三";
        student.age = 18;
        System.out.println(student.name);
        System.out.println(student.age);
    }
}

在这里插入图片描述

可以看见上面的属性没有初始化的时候是有默认值的
在这里插入图片描述

三、类的成员

类的成员可以包含以下:字段、方法、代码块、内部类和接口等

3.1、字段/属性/成员变量

定义在类的内部,方法的外部定义的变量. 这样的变量我们称为 “字段” 或 “属性” 或 “成员变量”(三种称呼都可以, 一般不会严格区分)

//创建一个学生类
class Student{
    //字段,属性,成员变量
    String name; //姓名
    int age; //年龄
    int hight; //身高

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}

注意事项
使用 . 访问对象的字段.
“访问” 既包含读, 也包含写.
对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值

3.1.1、成员变量又可分为两类: 普通成员变量,静态成员变量

成员变量又可分为两类: 普通成员变量,静态成员变量
静态成员变量就是由static修饰的变量

class Person{
    //普通成员变量
    public String name; //姓名
    public int age; //年龄
    //静态成员变量
    public static int cont;
}   

3.1.1.1、普通成员变量,静态成员变量的区别

首先看一段代码:

class Person{
    //普通成员变量
    public String name; //姓名
    public int age; //年龄
    //静态成员变量
    public static int cont;

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}

public class TestDome {

    public static void main(String[] args) {
        Person person1 = new Person();
        person1.age++;
        System.out.println(person1.age);

        System.out.println("=========");

        Person person2 = new Person();
        person2.age++;
        System.out.println(person2.age);
    }
}    

在这里插入图片描述

此时再看代码:

class Person{
    //普通成员变量
    public String name; //姓名
    public int age; //年龄
    //静态成员变量
    public static int cont;

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
}

public class TestDome {

    public static void main(String[] args) {
        Person person1 = new Person();
        person1.age++;
        person1.cont++;
        System.out.println(person1.age);
        System.out.println("cont = " + person1.cont);

        System.out.println("=========");

        Person person2 = new Person();
        person2.age++;
        person2.cont++;
        System.out.println(person2.age);
        System.out.println("cont = " + person2.cont);
    }
}    

在这里插入图片描述

静态成员变量/方法,就是类变量,它只属于类,不属于对象,可以通过 类名.静态成员变量/方法 的方式来访问

class Person{
    //普通成员变量
    public String name; //姓名
    public int age; //年龄
    //静态成员变量
    public static int cont;

    //方法,这个方法指的是能完成的功能,行为
    public void eat(){
        System.out.println(name + " 正在吃饭!");
    }
    public void sleep(){
        System.out.println(name + " 正在睡觉!");
    }
    public static void func(){
        System.out.println("static :: func");
    }
    
}

public class TestDome {

    public static void main(String[] args) {
        Person.cont = 10;
        System.out.println(Person.cont);
        Person.func();
    }
}       

在这里插入图片描述

3.1.1.2、普通方法里面能不能定义 静态成员变量

普通方法里面不能定义静态成员变量
但是能调用静态成员方法

在这里插入图片描述

3.1.1.3、静态方法里面能不能定义 静态成员变量

在这里插入图片描述
无论是 普通成员方法还是静态成员方法,都不能在其内部创建一个被static修饰的变量
因为 被static修饰了的变量,该变量就属于类了(类变量/静态变量)。
而你把一个(类变量/静态成员变量)写在方法里,就意味着属于方法(是一个局部变量,不再是 类变量了),而不属于类
所以冲突了,不合适,导致编译器报错

3.1.1.4、总结

1、static定义的变量,类变量,属于类的
2、eat方法的调用,需要对应的引用来调用。
3、静态方法是不需要对象的,直接就可以用类来调用,如果静态方法里面有静态变量,那这个变量就是属于方法的,不是属于类的了,这就有冲突了
4、当然如果在普通方法里面定义静态变量,那这个变量也属于方法,而不属于类了
5、静态的变量是不能在方法中定义的
6、静态的方法不能调用普通方法
7、静态的方法能调用静态方法
8、普通方法可以调用普通方法
9、普通方法可以调用静态方法

3.1.1.5、一个dan疼的面试题

main 函数为什么是静态的?
首先 main 函数 是不是静态都可以!!!
这个东西取决于 JVM 的规则。
main 之所以 是 静态的,是因为 在设计 JVM的时候,就这么设计的
所以 main 只有被static 修饰的时候,JVM才认为它是main函数

3.1.2、引用 一定是在栈上吗?

答:不一定

class Person{
    public String name = "author";

    public void eat(){
        staticFunc();
        System.out.println(name+"正在吃饭.");
    }

    public static  void staticFunc(){
        System.out.println("static::func()");
    }
}

public class TestDome {

    Person person = new Person();
    public static void main(String[] args) {
        TestDome classAndObject = new TestDome();
    }
}

在这里插入图片描述

3.2、static 关键字

1、修饰属性
修饰属性,Java静态属性和类相关, 和具体的实例无关. 换句话说, 同一个类的不同实例共用同一个静态属性

2、修饰方法
如果在任何方法上应用 static 关键字,此方法称为静态方法。
静态方法属于类,而不属于类的对象。
可以直接调用静态方法,而无需创建类的实例。
静态方法可以访问静态数据成员,并可以更改静态数据成员的值。

注意事项1:

静态方法和实例无关, 而是和类相关. 因此这导致了两个情况:
静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的).
this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关).

注意事项2

我们曾经写的方法为了简单, 都统一加上了 static. 但实际上一个方法具体要不要带 static, 都需要是情形而定. main 方法为 static 方法

3.3、小结

class Person {
    public int age;//实例变量 存放在对象内
    public String name;//实例变量
    public String sex;//实例变量
    public static int count;//类变量也叫静态变量,编译时已经产生,属于类本身,且只有一份。存放在方法区
    public final int SIZE = 10;//被final修饰的叫常量,也属于对象。 被final修饰,后续不可更改
    public static final int COUNT = 99;//静态的常量,属于类本身,只有一份 被final修饰,后续不可更改
    //实例成员函数
    public void eat() {
        int a = 10;//局部变量
        System.out.println("eat()!");
    }
    //实例成员函数
    public void sleep() {
        System.out.println("sleep()!");
    }
    //静态成员函数
    public static void staticTest(){
//不能访问非静态成员
//sex = "man"; error
        System.out.println("StaticTest()");
    }
}

public class TestDome {

    public static void main(String[] args) {
        //产生对象 实例化对象
        Person person = new Person();//person为对象的引用
        System.out.println(person.age);//默认值为0
        System.out.println(person.name);//默认值为null
        //System.out.println(person.count);//会有警告!
        //正确访问方式:
        System.out.println(Person.count);
        System.out.println(Person.COUNT);
        Person.staticTest();
        //总结:所有被static所修饰的方法或者属性,全部不依赖于对象。
        person.eat();
        person.sleep();
    }
}    

在这里插入图片描述

3.4、认识null

null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常.

class Person{
    public String name = "author";

    public void eat(){
        staticFunc();
        System.out.println(name+"正在吃饭.");
    }

    public static  void staticFunc(){
        System.out.println("static::func()");
    }
}

public class TestDome {

    public static void main(String[] args) {
        Person person = null;
        System.out.println(person.name);
    }
}    

在这里插入图片描述

四、封装 pritave

什么叫封装?

  • <<代码大全>> 开篇就在讨论一个问题: 软件开发的本质就是对程序复杂程度的管理. 如果一个软件代码复杂程度太高, 那么就无法继续维护. 如何管理复杂程度? 封装就是最基本的方法.
  • 在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者.
  • 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.
  • 这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度

4.1、如何打印对象的属性

class Person{
    public String name = "author";

    public void eat(){
        staticFunc();
        System.out.println(name+"正在吃饭.");
    }

    public static  void staticFunc(){
        System.out.println("static::func()");
    }

    public String toString(){
        return "张三";
    }
}

public class TestDome {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person);
    }
}    
  • toString 方法会在 println 的时候被自动调用.
  • 将对象转成字符串这样的操作我们称为序列化(把一个对象转换成字符串). 反序列化(把字符串转换成对象)
  • toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法

在这里插入图片描述

4.1.1、如何快速实现toString方法

在这里插入图片描述

4.2、private实现封装

  • private/ public 这两个关键字表示 “访问权限控制” .
  • 被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.
  • 被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用.
  • 换句话说, 类的使用者根本不需要知道, 也不需要关注一个类都有哪些 private 的成员. 从而让类调用者以更低的成本来使用类.

在这里插入图片描述

注意事项

  • private 不光能修饰字段, 也能修饰方法
  • 通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public,
    就需要视具体情形而定. 一般我们希 望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑设为 public.

4.3、getter和setter方法

  • 使用private修饰的属性,在类的外面是不能被访问的
  • 所以就可以使用getter和setter方法,来访问
  • getter 方法:用来访问属性
  • setter 方法:用来给属性赋值,修改
class Person{
    private String name;
    private int age;

    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 void eat(){
        staticFunc();
        System.out.println(name+"正在吃饭.");
    }

    public static  void staticFunc(){
        System.out.println("static::func()");
    }
}

public class TestDome {
    public static void main(String[] args) {
        Person person = new Person();
        //给属性赋值
        person.setAge(18);
        person.setName("张三");
        System.out.println(person.getAge());
        System.out.println(person.getName());
    }
}    
  • 当set方法的形参名字和类中的成员属性的名字一样的时候,如果不使用this, 相当于自赋值. this 表示当前实例的引用
    在这里插入图片描述

注意事项

  • getName 即为 getter 方法, 表示获取这个成员的值.
  • setName 即为 setter 方法, 表示设置这个成员的值
  • 当set方法的形参名字和类中的成员属性的名字一样的时候,如果不使用this, 相当于自赋值. this 表示当前实例的引用.
  • 不是所有的字段都一定要提供 setter / getter 方法, 而是要根据实际情况决定提供哪种方法.
  • 在 IDEA 中可以使用 alt + insert (或者 alt + F12) 快速生成 setter / getter 方法. 在 VSCode 中可以使用鼠标右键
    菜单 -> 源代码操作 中自动生成 setter / getter 方法

五、构造方法

5.1、什么是构造方法

  • 构造方法:方法名和类名相同,并且没有返回值
  • 构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作
class Person{
    public String name;
    public int age;

    public Person(){
        //这就是构造方法
    }
    public void eat(){
        System.out.println("姓名:" + name);
    }

}

5.2、基本语法

new 执行过程(对象如何产生)

  • 为对象分配内存空间
  • 调用对象的构造方法

语法规则

  • 方法名称必须与类名称相同
  • 构造方法没有返回值类型声明
  • 调用合适的构造方法,每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造,说明构造方法不止一个

注意事项

  • 如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
  • 若类中定义了构造方法,则默认的无参构造将不再生成.
  • 构造方法支持重载. 规则和普通方法的重载一致
class Person{
    public String name;
    public int age;

    public Person(){
        //没有一个参数的构造方法构造方法
        System.out.println("没有参数的构造方法构造方法");
    }
    public Person(int age){
        //带有一个参数的构造方法构造方法
        System.out.println("带有一个参数的构造方法构造方法");
    }
    public Person(int age, String name){
        //带有两个参数的构造方法构造方法
        System.out.println("带有两个参数的构造方法构造方法");
    }
    public void eat(){
        System.out.println("姓名:" + name);
    }

}

public class TestDome {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person(18);
        Person person3 = new Person(18,"张三");
    }
}

在这里插入图片描述

5.3、this关键字(面试题)

this表示当前对象引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法

this关键字的用法

1、this.data 调用当前对象的属性
2、this.func() 调用当前对象的方法
3、this() 调用对象的其他构造方法

5.3.1、this调用当前的方法

class Person{
    public String name;
    public int age;

    public Person(){
        //没有一个参数的构造方法构造方法
        System.out.println("没有参数的构造方法构造方法");
    }
    public Person(int age){
        //带有一个参数的构造方法构造方法
        //this调用属性
        this.age = age;
        System.out.println("带有一个参数的构造方法构造方法");
    }
    public Person(int age, String name){
        this.age = age;
        this.name = name;
        this.eat();
        //带有两个参数的构造方法构造方法
        System.out.println("带有两个参数的构造方法构造方法");
    }
    public void eat(){
        System.out.println("姓名:" + name);
    }
}

public class TestDome {

    public static void main(String[] args) {
        Person person = new Person(18, "张三");
    }
}    

5.3.2、this调用对象的其他的构造方法

class Person{
    public String name;
    public int age;

    public Person(){
        //没有一个参数的构造方法构造方法
        System.out.println("没有参数的构造方法构造方法");
    }
    public Person(int age){
        //带有一个参数的构造方法构造方法
        //this调用属性
        this(18,"张三");
        this.age = age;
        System.out.println("带有一个参数的构造方法构造方法");
    }
    public Person(int age, String name){
        this.age = age;
        this.name = name;
        this.eat();
        //带有两个参数的构造方法构造方法
        System.out.println("带有两个参数的构造方法构造方法");
    }
    public void eat(){
        System.out.println("姓名:" + name);
    }
}
public class TestDome {

    public static void main(String[] args) {
        Person person = new Person(18);
    }
}

在这里插入图片描述

六、认识代码块

6.1、什么是代码块

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

  1. 普通代码块
  2. 构造块/实例代码块
  3. 静态块
  4. 同步代码块(后续讲解多线程部分再谈)
  • 普通代码块:定义在方法中的代码块
  • 构造块/实例代码块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量
  • 静态块:使用static定义的代码块。一般用于初始化静态成员属性。
class Person{
    public String name;
    public int age;

    {
        System.out.println("实例代码块");
    }

    static {
        System.out.println("静态代码块");
    }
    public Person(){
        //没有一个参数的构造方法构造方法
        System.out.println("没有参数的构造方法构造方法");
    }
    public Person(int age){
        //带有一个参数的构造方法构造方法
        //this调用属性
        this.age = age;
        System.out.println("带有一个参数的构造方法构造方法");
    }
    public Person(int age, String name){
        this.age = age;
        this.name = name;
        this.eat();
        //带有两个参数的构造方法构造方法
        System.out.println("带有两个参数的构造方法构造方法");
    }
    public void eat(){
        {
            System.out.println("普通代码块");
        }
        System.out.println("姓名:" + name);
    }
}

public class TestDome {

    public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("==============");
        Person person2 = new Person();

    }
}    
  • 1、在new对象的时候,首先执行静态代码块,然后执行实例代码块,最后调用构造方法
  • 2、不管new多少个对象,静态代码块只执行1次

在这里插入图片描述

七、匿名对象

匿名只是表示没有名字的对象.

  • 没有引用的对象称为匿名对象.
  • 匿名对象只能在创建对象时使用.
  • 如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象
class PersonA{
    public String name;
    public void eat(){
        System.out.println(name + "正在吃饭");
    }
}

public class TestDome {

    public static void main(String[] args) {
        System.out.println(new PersonA().name);
        new PersonA().eat();
        System.out.println(new PersonA());
        System.out.println("================");
        // 正确写法
        PersonA persona = new PersonA();
        System.out.println(persona.name);
        persona.eat();
        System.out.println(persona);

    }
}    

在这里插入图片描述

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

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

相关文章

FT2004(D2000)开发实战之W25X10CL固件烧写

一 W25X10CL固件烧写 1.1 Windows电脑安装GZUT_EZP_XPro编程器2.0软件,安装成功后会生成如下图标 1.2 固定和安装W25X10CL芯片 W25X10CL属于典型的8PIN SPI Flash芯片,其固定和安装方法如下所示: 1.2.1 准备Flash编程器、SOP8转DIP8转换器以及Flash芯片,下图所示为Flash编…

计算ip是否在网络段(子网掩码)

比如 检查下面的ip是否在网络段内 IP 192.168.1.3 子网掩码 255.255.255.192 IP 192.168.1.3 对应的&#xff1a; 11000000.10101000.00000001.00000011 先把上面的子网掩码 255.255.255.192 转成二进制 结果应该是 11111111.11111111.11111111.11000000 这时有26个…

Vue如何实现快进后退的跑马灯组件

Vue如何实现快进后退的跑马灯组件 用vue编写一个可以快进后退的跑马灯组件 由于业务需求&#xff0c;要实现一个会可以控制速度的跑马灯&#xff0c;刚开始用js的setinterval每隔几毫秒来减取一个字符拼接到后面&#xff0c;效果不理想就放弃了。后来用animate这个api实现了。…

MyBtais的SQL映射文件(元素,查询,映射,动态SQL)

目录 1.概述 2.SQL映射文件元素 3.Mybatis框架的条件查询 3.1 单参数查询(模糊查询) 3.2 多参数查询 3.2.1 JavaBean 对象参数 3.2.2 Map 参数 3.2.3 Param 注解 参数 3.2.4 底层顺序[param1,param2] 4.Mybatis框架的结果映射 4.1 resultMap自定义映射 4.1.1 Res…

[附源码]Python计算机毕业设计Django点餐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

一、【react-redux】react-redux 基本使用

文章目录1、react-redux模型图2、放在前面的总结3、react-redux 简单使用3.1、项目结构3.2、CODE3.2.1、containers/Count/index.jsx3.2.2、App.js3.2.3、入口 index.js3.2.4、Count_Redux.jsx由于react日常开发人们习惯使用redux做状态管理 FaceBook官方就出了一个react-redux…

关于Hbase使用出现java.io.IOException: java.lang.reflect.InvocationTargetException解决

我也不知道出错原因&#xff0c;改着改着就好了&#xff0c;所以以下解决方法可以试试&#xff0c;不保证一定有用。 出现了这样的报错&#xff1a;java.io.IOException: java.lang.reflect.InvocationTargetException 往下看Cause by 百度百度摸到这篇博客 根据上述博客所总结…

【人工智能】知识表示

目录一、知识表示&#xff08;Knowledge Representation&#xff09;的基本概念二、谓词逻辑&#xff08;Predicate Logic&#xff09;表示法三、产生式&#xff08;Production Rule&#xff09;表示法四、语义网络&#xff08;Semantic Network&#xff09;表示法五、框架&…

【单目3D目标检测】MonoGround论文精读与代码解析

文章目录PrefaceAbstractContributionsProblem DefinitionGround Plane PriorIn PaperIn CodePipelineIn PapeIn CodeDepth-Align TrainingIn PaperIn CodeTwo-stage Depth InferenceIn PaperIn CodePreface Qin Z, Li X. MonoGround: Detecting Monocular 3D Objects From the…

一个牛X小编,用Python将普通视频变成动漫,这也太厉害了吧

前言 最近几个月&#xff0c;毒教材被曝光引发争议&#xff0c;那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力&#xff0c;但咱可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有python语言基本能力的程序员&#xff0c;实现短视频转动漫效果。…

springboot实现excel数据导入导出

目录 1.一些关于excel的常识 2.使用Apache POI操作excel 3.使用easyexcel操作excel 4.结合mybatis-plus批量导入excel数据到数据库 1.一些关于excel的常识 首先关于excel的文件格式&#xff0c;分为xls和xlsx&#xff0c;分别对应03版本和07以后的版本。 03版本的excel最大…

基于云边协同架构的五大应用场景革新

从概念到场景落地&#xff0c;边缘云加速革新&#xff0c;颠覆体验&#xff0c;拟造丰沛生态。边缘云的概念自明确以来已有四个多年头。 什么是边缘云&#xff1f; 边缘云&#xff0c;即把公共云的能力放在离数据发生端和消费端最近的地方&#xff0c;提升数据的处理效率&…

143.如何个性化推荐系统设计-3

143.1 算法介绍 协同过滤算法 协同过滤(Collaborative filtering, CF)算法是目前个性化推荐系统比较流行的算法之一。协同算法分为两个基本算法&#xff1a;基于用户的协同过滤&#xff08;UserCF&#xff09;和基于项目的协同过滤&#xff08;ItemCF&#xff09;。 基于属性…

m基于GA遗传优化的BP神经网络时间序列预测算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 将遗传算法&#xff08;GA&#xff09;与BP神经网络相结合&#xff0c;使用GA优化BP神经网络的主要参数。然后将影响输出响应值的多个特征因素作为GA-BP神经网络模型的输入神经元, 输出响应值作为…

[附源码]计算机毕业设计springboot绿色生鲜

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

nfs实现共享目录对于集群高可用风险,nfs客户端容易卡死

目录 背景说明 解决办法 执行步骤 数据移动 取消挂载 停nfs服务&#xff08;客户端&#xff09; 卸载nfs&#xff08;客户端&#xff09; 重启主机&#xff08;客户端&#xff09; 卸载nfs&#xff08;服务端&#xff09; 背景说明 nfs可以完成集群多个主机之间共享目…

感知算法工程师面试===目标检测===YOLO v3

引言 因为找工作的原因&#xff0c;面试中经常遇到目标检测的问题&#xff0c;在2022年的现在&#xff0c;大多是对单步目标检测算法YOLO家族系列展开一系列追问&#xff0c;比如Yolov3、Yolov4、Yolov5、Yolox算法。 另一部分就是Faster RCNN为代表的两阶段目标检测网络。 而…

[附源码]计算机毕业设计JAVA小区宠物管理系统

[附源码]计算机毕业设计JAVA小区宠物管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

blender UV基础

文章目录进入UV界面导出UV布局图拆分UV清除现有UV展开UV不同UV展开方式智能UV投射缝合边进入UV界面 1 选中一个物体&#xff0c;选择最上方UVEditing即可进入UV界面 2 注意进入UV界面后&#xff0c;舞台也会自动进入编辑模式 3 只有在编辑模式里才能操作UV 4 选择一个面来单独…

Linux学习-61-Linux系统服务管理

14 Linux系统服务管理 系统服务&#xff1a;服务是在后台运行的应用程序&#xff0c;并且可以提供一些本地系统或网络的功能。Linux 中常见的服务有那些&#xff0c;这些服务怎么分类&#xff0c;服务如何启动&#xff0c;服务如何自启动&#xff0c;服务如何查看&#xff1f;…