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

DAY01 面向对象回顾、继承、抽象类

学习目标

能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{}
能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员
能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报错
能够说出方法重写的概念发生在两个类之间子类出现了和父类一模一样(返回值类型,方法名,参数列表,修饰符子类大于等于父类)的方法,叫方法重写(Override)
能够说出this可以解决的问题1.this.变量名:代表本类的成员变量2.this.方法名称():代表本类的成员方法3.this(),this(参数):代表调用本类其他的构造方法
能够说出super可以解决的问题1.super.变量名:代表父类的成员变量2.super.方法名称():代表父类的成员方法3.super(),super(参数):代表调用父类的构造方法
描述抽象方法的概念没有方法体,被abstract修饰的方法
写出抽象类的格式public abstract class 类名{};
写出抽象方法的格式权限修饰符 abstract 返回值类型 方法名(参数);public abstract void aaa();public abstract int bbb();public abstract int ccc(String s);
能够说出父类抽象方法的存在意义在抽象类中定义类抽象方法,那么子类就必须重写这个抽象方法公司中所有的员工都必须工作作为模版:让子类强制重写抽象方法,不同的子类添加不同的方法体

一.面向对象回顾

1.面向对象的概念

package com.itheima.demo01Object;/*面向对象:学习的重点记住概念,根据概念写出代码面向对象:基于面向过程面向过程:当我们遇到一件事情的时候,我们自己分析事情的解决步骤,按照步骤一步一步完成,重视的是解决事情的过程面向对象:当我们遇到一件事情的时候,我们不自己完成,找一个能够帮我们完成事情的对象,调用对象的功能完成.重视的是对象现实生活中的事物:属性,行为(功能)我们可以把现实生活中的事物抽象为java中的类(类是java的基本单位)把事物的属性抽象为类中的成员变量(定义在成员位置的变量:类中,方法外)把事物的行为抽象为类中的成员方法(定义在成员位置的方法,去掉static关键字)封装:私有成员变量,对外提供公共的get/set方法构造方法:创建对象就是调用类中的构造方法定义格式:修饰符 构造方法名-类名(参数){为成员变量赋值}特点:1.没有返回值类型,不是void,是根本就没有2.没有返回值3.必须和类名相同构造方法的注意事项:1.类中没有定义构造方法,JVM会为类添加一个 默认的空参数的构造方法格式: public Student(){ }2.类中已经定义了构造方法(空参,带参),那么JVM就不会给类添加默认的构造方法了所以我们要使用空参数的构造方法,必须自己手动写出3.构造方法是可以重载(在一个类中方法名称相同,但是参数列表不同(个数,顺序,数据类型)的方法)*/
public class Student {//私有成员变量private String name;private int age;public Student() {System.out.println("Student类的空参数构造方法!");}public Student(String name, int age) {this.name = name;this.age = age;System.out.println("Student类的满参数构造方法!");}//对外提供公共的get/set方法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;}
}
package com.itheima.demo01Object;/*测试类:包含main方法的类*/
public class Demo01Student {public static void main(String[] args) {//使用Student类的空参数构造方法创建对象Student s1 = new Student();//使用set方法给成员变量赋值s1.setName("迪丽热巴");s1.setAge(18);//使用get方法,获取成员变量的值System.out.println(s1.getName()+"\t"+s1.getAge());//使用Student类的满参数构造方法创建对象Student s2 = new Student("古力娜扎",18);//使用set方法,修改成员变量的值s2.setAge(20);//使用get方法,获取成员变量的值System.out.println(s2.getName()+"\t"+s2.getAge());}
}

2.this关键字

package com.itheima.demo02this;/*this关键字:代表本类对象的引用==>根据类创建的对象哪个对象调用的方法,方法中的this就是哪个对象this关键字作用:当局部变量和成员变量重名时,使用this关键字可以区分局部变量和成员变量this.变量名==>成员变量*/
public class Person {private String name;//定义成员方法public void show(){System.out.println("this:"+this);//this:com.itheima.demo02this.Person@4554617cString name = "小强";System.out.println("name:"+name);//name:小强 变量的就近访问原则System.out.println("this.name:"+this.name);//this.name:旺财 this.变量名代表成员变量}public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
package com.itheima.demo02this;public class Demo01This {public static void main(String[] args) {//创建Person对象Person p = new Person("旺财");System.out.println("p:"+p);//p:com.itheima.demo02this.Person@4554617cp.show();}
}

3.对象的内存图

请添加图片描述

4.匿名对象

package com.itheima.demo03Object;import java.util.ArrayList;/*匿名对象:创建对象时,只有创建对象的语句,没有把对象赋值给某个变量,这个对象叫匿名对象没有名字的对象特点:只能使用一次,使用完毕会被JVM在空闲的时候进行垃圾回收好处:可以节约内存,可以提高程序的效率作用:一般可以作为方法的参数和返回值使用*/
public class Demo01Animal {public static void main(String[] args) {//创建一个有名字的对象:可以重复使用Animal a1 = new Animal("Tom");a1.eat();a1.eat();//创建一个匿名对象:只能使用一次new Animal("Jerry").eat();//如果想要在使用匿名对象,需要重新创建new Animal("熊大").eat();System.out.println("---------------------------");//调用show方法,创建Animal对象为变量a2赋值show(a1);//如果方法的参数传递的对象只使用一次,就可以使用匿名对象show(new Animal("熊二"));System.out.println("----------------------------");//调用getAnimal方法//Animal a4 = getAnimal();==> new Animal("光头强");Animal a4 = getAnimal();a4.eat();System.out.println("----------------------------");ArrayList<Animal> list = new ArrayList<>();list.add(a1);//对象只使用一次,就可以使用匿名对象list.add(new Animal("加菲猫"));}/*定义一个方法,方法的参数使用Animal类型Animal a2 = a1 = new Animal("Tom");Animal a2 = new Animal("熊二")*/public static void show(Animal a2){a2.eat();}/*定义一个方法,方法的返回值类型使用Animal方法的返回值类型是Animal,就必须在方法中创建一个Animal对象返回方法的返回值类型是int,就必须在方法中返回一个整数...*/public static Animal getAnimal(){//Animal a3 = new Animal("光头强");//return a3;//对象只使用一次,就可以使用匿名对象return new Animal("光头强");}
}
package com.itheima.demo03Object;public class Animal {private String name;public void eat(){System.out.println(name+"在吃饭!");}public Animal() {}public Animal(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

二.继承

1.继承的概念

子类继承父类,子类就会自动拥有父类非私有的成员变量和成员方法
请添加图片描述

2.继承的定义格式

package com.itheima.demo04extends;/*定义父类员工类属性:姓名,年龄方法:工作*/
public class Employee {//属性:姓名,年龄String name;int age;//方法:工作public void work(){System.out.println(name+"在呕心沥血的工作!");}
}
package com.itheima.demo04extends;/*定义讲师类:讲师是公司员工的一种,所以可以继承员工类什么时候使用继承:我是你的一种的使用(is...a)继承的格式:public class 子类 extends 父类{ }子类:Teacher父类:Employee继承的特点:子类继承父类,子类就会自动拥有父类非私有的成员变量和成员方法在子类中可以定义子类特有的成员*/
public class Teacher extends Employee{//定义子类特有的打印姓名和年龄的方法public void print(){System.out.println(name+"\t"+age);}
}
package com.itheima.demo04extends;/*定义班主任类:班主任是公司员工的一种,所以可以继承员工类*/
public class BanZhuRen extends Employee {}
package com.itheima.demo04extends;/*测试继承:测试子类继承父类之后,是否会自动拥有父类非私有的成员继承的好处:1.可以提高代码的复用性(重复使用)2.继承使类与类之间产生了关系,是多态的前提*/
public class Demo01Extends {public static void main(String[] args) {//创建子类Teacher对象Teacher t = new Teacher();//使用子类继承自父类的成员变量t.name = "老白";t.age = 18;//使用子类继承自父类的成员方法t.work();//使用子类特有的成员t.print();//定义子类BanZhuRen对象BanZhuRen bzr = new BanZhuRen();//使用子类继承自父类的成员变量bzr.name = "美女";bzr.age = 18;//使用子类继承自父类的成员方法bzr.work();}
}

3.继承的注意事项

package com.itheima.demo05extends;public class Fu {private String name;private int age;//定义一个私有的成员方法private void siFangQian(){System.out.println("父亲老王的私房钱!");}public Fu() {}public Fu(String name, int age) {this.name = name;this.age = 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;}
}
package com.itheima.demo05extends;public class Zi extends Fu {
}
package com.itheima.demo05extends;/*继承的注意事项:1.构造方法是不能继承的,构造方法是本类创建对象使用的2.父类私有成员子类是不能继承的*/
public class Demo01 {public static void main(String[] args) {Zi zi = new Zi();//私有的成员变量子类是不能继承使用//System.out.println(zi.name);//'name' has private access in 'com.itheima.demo05extends.Fu'//子类可以使用继承自父类公共的get/set方法,通过方法来操作变量zi.setName("小王");zi.setAge(10);//私有的成员方法子类是不能继承使用//zi.siFangQian();//'siFangQian()' has private access in 'com.itheima.demo05extends.Fu'}
}

4.继承后的特点—成员变量

package com.itheima.demo06Variable;public class Fu {int a = 10;
}
package com.itheima.demo06Variable;public class Zi1 extends Fu{int b = 20;
}
package com.itheima.demo06Variable;public class Zi2 extends Fu{int a = 100;int b = 200;
}
package com.itheima.demo06Variable;/*继承后的特点—成员变量1.子类有使用子类自己的成员变量2.子类没有使用子类继承自父类的成员变量3.子类和父类都没有,编译报错*/
public class Demo01Variable {public static void main(String[] args) {//创建子类对象Zi1 zi1 = new Zi1();System.out.println(zi1.a);//10 子类继承父类的System.out.println(zi1.b);//20 使用子类自己的//创建子类对象Zi2 zi2 = new Zi2();System.out.println(zi2.a);//100 使用子类自己的System.out.println(zi2.b);//200 使用子类自己的//System.out.println(zi2.c);//Cannot resolve symbol 'c' 子类和父类都没有,编译报错}
}

5.继承后的特点—成员方法

package com.itheima.demo07Method;public class Fu {public void show01(){System.out.println("Fu类的show01方法!");}
}
package com.itheima.demo07Method;public class Zi1 extends Fu{public void show02(){System.out.println("Zi1类的show02方法!");}
}
package com.itheima.demo07Method;public class Zi2 extends Fu{public void show01(){System.out.println("Zi2类的show01方法!");}public void show02(){System.out.println("Zi2类的show02方法!");}
}
package com.itheima.demo07Method;/*继承后的特点—成员方法1.子类有使用子类自己的成员方法2.子类没有使用子类继承自父类的成员方法3.子类和父类都没有,编译报错*/
public class Demo01Method {public static void main(String[] args) {//创建子类对象Zi1 zi1 = new Zi1();//使用子类继承自父类的成员方法show01zi1.show01();//使用子类自己的成员方法show02zi1.show02();//创建子类对象Zi2 zi2 = new Zi2();//使用子类自己的成员方法show01,show02zi2.show01();zi2.show02();//zi2.show03();//Cannot resolve method 'show03()'  子类和父类都没有,编译报错}
}

6.方法重写(Override)

package com.itheima.demo08Override;public class Fu {public void show01(){System.out.println("Fu类的show01方法!");}
}
package com.itheima.demo08Override;/*方法重写:发生在两个类之间,在子类中出现了和父类一模一样的方法,叫方法重写(Override)一模一样:方法名一样参数列表一样返回值类型一样修饰符一样(子类的修饰符权限大于等于父类的修饰符)注解:@Override:检查方法是否为重写的方法------------------------------------------------------------方法重载:发生在一个类中,在一个类中出现了方法名相同,但是参数列表不同的方法,叫方法重载(Overload)*/
public class Zi extends Fu{@Overridepublic void show01(){System.out.println("Zi类重写父类的show01方法!");}public void show01(int a){System.out.println("Zi类特有的show01方法!"+a);}//@Override//Method does not override method from its superclasspublic void show02(){System.out.println("Zi类的show02方法!");}
}
package com.itheima.demo08Override;public class Demo01Override {public static void main(String[] args) {//创建子类对象Zi zi = new Zi();zi.show01();//调用的是子类重写父类的show01方法}
}

7.方法重写的注意事项(了解)

package com.itheima.demo09Override;public class Fu {public void show01(){System.out.println("Fu类的show01方法");}void show02(){System.out.println("Fu类的show02方法");}public void show03(){System.out.println("Fu类的show03方法");}public void show04(){System.out.println("Fu类的show04方法");}private void show05(){System.out.println("Fu类的show05方法");}
}
package com.itheima.demo09Override;/*方法重写的注意事项:1. 方法重写是发生在子父类之间的关系。2. 子类方法重写父类方法,必须要保证权限大于等于父类权限。java中四大权限修饰符public:公共的protected:受保护的:默认的,不写就是默认的private:私有的3. 子类方法重写父类方法,返回值类型、方法名和参数列表都要和父类方法一模一样4. 私有方法不能被重写(父类的私有方法子类是不能继承)*/
public class Zi extends Fu{//2. 子类方法重写父类方法,必须要保证权限大于等于父类权限。/*void show01(){System.out.println("Fu类的show01方法");}*/public void show02(){System.out.println("Fu类的show02方法");}//3. 子类方法重写父类方法,返回值类型、方法名和参数列表都要和父类方法一模一样//@Override//Method does not override method from its superclasspublic void show03(int a){System.out.println("Zi类的show03方法");}/*public int show04(){System.out.println("Fu类的show03方法");return 1;}*///@Override//Method does not override method from its superclasspublic void show08(){System.out.println("Fu类的show03方法");}//@Override//Method does not override method from its superclass//就相当于在子类中定义了一个自己特有的私有方法,恰好名字和父类方法一样private void show05(){System.out.println("Zi类的show05方法");}
}

8.继承后的特点—构造方法

package com.itheima.demo10Constructor;public class Fu {int a = 10;public Fu() {System.out.println("Fu类的空参数构造方法!"+a);}
}
package com.itheima.demo10Constructor;public class Zi extends Fu{//int a = 1;//int b = 2;/*继承后的特点—构造方法在子类构造方法的第一行,有一个默认的super();super();作用就是调用父类的空参数构造方法子类继承父类,子类想要使用继承自父类的成员,就必须把父类加载到内存中,调用父类的构造方法创建父类对象父类进入到内存中,子类才可以使用父类的成员*/public Zi() {super();System.out.println("Zi类的空参数构造方法!"+a);}
}
package com.itheima.demo10Constructor;public class Demo01Constructor {public static void main(String[] args) {//创建子类对象Zi zi = new Zi();}
}

请添加图片描述

9.子父类的内存图解

请添加图片描述

10.使用this关键字和super关键字访问成员

package com.itheima.demo11ThisAndSuper;public class Animal {String name = "猫科动物";public void eat(){System.out.println("动物在吃饭!");}
}
package com.itheima.demo11ThisAndSuper;/*this关键字:本类对象的引用(根据Cat创建的对象)this.成员变量:本类的成员变量this.成员方法(参数):本类的成员方法super关键字:父类对象的引用(根据Animal创建的对象)super.成员变量:父类的成员变量super.成员方法(参数):父类的成员方法*/
public class Cat extends Animal {String name = "加菲猫";public void eat(){System.out.println("加菲猫在吃饭!");}public void show(){System.out.println(name);//加菲猫 变量的就近访问原则System.out.println("this.name:"+this.name);//加菲猫System.out.println("super.name:"+super.name);//猫科动物eat();//加菲猫在吃饭!this.eat();//加菲猫在吃饭!super.eat();//动物在吃饭!}
}
package com.itheima.demo11ThisAndSuper;public class Demo01ThisAndSuper {public static void main(String[] args) {//创建子类Cat对象Cat cat = new Cat();cat.show();}
}

11.this关键字:调用本类其他的构造方法

package com.itheima.demo12this;/*this关键字:可以调用本类其他的构造方法格式:this();调用空参数构造方法this(参数);调用带参数构造方法注意:1.this();|this(参数);调用构造方法必须写在构造方法中的第一行,创建对象必须优先执行2.构造方法不能相互调用(不能你调用我,我在调用你-->死循环)*/
public class Animal {private String name;private int age;public Animal() {//this("tom",10);//调用带参数构造方法System.out.println("Animal类的空参数构造方法!");}public Animal(String name, int age) {this();//调用空参数构造方法this.name = name;this.age = age;System.out.println("Animal类的带参数构造方法!");}public String getName() {//this();//Call to 'this()' must be first statement in constructor bodyreturn name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
package com.itheima.demo12this;public class Demo01This {public static void main(String[] args) {//使用空参数构造方法创建Animal对象Animal a1 = new Animal();System.out.println(a1.getName()+"\t"+a1.getAge());/*执行结果:Animal类的带参数构造方法!Animal类的空参数构造方法!tom	10*///使用带参数的构造方法创建Animal对象Animal a2 = new Animal("jerry",5);System.out.println(a2.getName()+"\t"+a2.getAge());/*执行结果:Animal类的空参数构造方法!Animal类的带参数构造方法!jerry	5*/}
}

请添加图片描述

12.super关键字:调用父类的构造方法

package com.itheima.demo13super;public class Fu {public Fu() {System.out.println("Fu类的空参数构造方法!");}public Fu(int a) {System.out.println("Fu类的带参数构造方法!"+a);}
}
package com.itheima.demo13super;/*super关键字:调用父类的构造方法格式:super();调用父类的空参数构造方法super(参数);调用父类带参数构造方法注意:1.在子类的构造方法中没有写super();有一个默认的super();用于调用父类的空参数构造方法2.super();|super(参数);必须写在子类构造方法有效代码的第一行,构造方法必须优先执行3.在子类的构造方法中this和super不能同时出现,都必须写在有效代码第一行*/
public class Zi extends Fu {public Zi() {super();//调用父类的空参数构造方法,不写默认System.out.println("Zi类的空参数构造方法!");}public Zi(int a){super(a);//调用父类的带参数构造方法System.out.println("Zi类的带参数构造方法"+a);}
}
package com.itheima.demo13super;public class Demo01Super {public static void main(String[] args) {//使用Zi类空参数构造方法创建对象Zi zi = new Zi();//使用Zi类带参数构造方法创建对象Zi zi2 = new Zi(100);}
}

请添加图片描述

13.继承的特点

请添加图片描述

三.抽象类

1.抽象类&抽象方法概述

请添加图片描述

2.抽象类&抽象方法使用

package com.itheima.demo14abstractClass;/*定义父类员工类:是根据子类共性抽取形成定义成员变量:姓名,年龄定义成员方法:工作的方法每个子类方法的方法体不同,但是方法的声明相同(public void work())只抽取方法的声明,不抽取方法体抽取出来的方法声明添加一个关键字abstract,这个方法叫抽象方法定义格式:修饰符 abstract 返回值类型 方法名(参数);public abstract void work();public abstract void work(String a);public abstract int work(String a);包含抽象方法的类,也必须被abstract修饰,叫抽象类定义格式:public abstract class 类名{}----------------------------------------------------------注意:1.抽象类是无法直接创建对象使用的a.有一些类就是为了不让别人创建对象使用,可以定义为抽象类b.抽象类中一般都包含抽象方法,抽象方法没有方法体,创建对象调用抽象方法没有意义2.需要创建子类继续抽象父类,重写抽象类中的抽象方法,创建子类对象使用------------------------------------------------------------------------好处:在抽象类中定义抽象方法,那么子类就必须重写这个抽象方法公司中所有的员工都必须工作==>定义了一个模版==>子类都必须根据模版重写抽象方法*/
public abstract class Employee {private String name;private int age;//定义抽象的工作方法public abstract void work();public Employee() {}public Employee(String name, int age) {this.name = name;this.age = 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;}
}
package com.itheima.demo14abstractClass;/*讲师类是一个员工类的一种,所以可以继承员工类讲师类已经能明确自己的工作内容了所以需要重写工作的方法,添加方法体注意:子类继承抽象类有两种处理方式 alt+回车1.子类也声明为抽象类(子类包含继承自父类的抽象方法)2.子类重写抽象方法,添加方法体*/
public class Teacher extends Employee{@Overridepublic void work() {System.out.println("正在给大家讲解java!");}
}
package com.itheima.demo14abstractClass;/*班主任类是一个员工类的一种,所以可以继承员工类班主任类已经能明确自己的工作内容了所以需要重写工作的方法,添加方法体*/
public class BanZhuRen extends Employee{@Overridepublic void work() {System.out.println("正在监督大家学习!");}
}
package com.itheima.demo14abstractClass;//抽象类是无法创建对象使用的
public abstract class JiuYeZhiDao extends Employee{
}
package com.itheima.demo14abstractClass;public class Demo01AbstractClass {public static void main(String[] args) {//Employee ee = new Employee();//'Employee' is abstract; cannot be instantiated 抽象类是无法直接创建对象使用的//创建子类对象Teacher t = new Teacher();t.work();BanZhuRen bzr = new BanZhuRen();bzr.work();//JiuYeZhiDao jyzd = new JiuYeZhiDao();//'JiuYeZhiDao' is abstract; cannot be instantiated}
}

3.模版设计模式

package com.itheima.demo15driver;/*定义开车类的模版:在父类中调用子类重写后的方法定义一些固定的内容(开门,点火,刹车,熄火)不同的内容定义为抽象方法(开车姿势不同)*/
public abstract class Driver {//定义开车的方法public void driver(){System.out.println("开门..............");System.out.println("点火..............");ziShi();System.out.println("刹车..............");System.out.println("熄火..............");}//新司机和老司机开车的姿势不同,定义为抽象方法public abstract void ziShi();
}
package com.itheima.demo15driver;//定义新司机类,是司机类的一种,所以继承司机类
public class NewDriver extends Driver{@Overridepublic void ziShi() {System.out.println("新司机开车的姿势:双手紧握方向盘!");}
}
package com.itheima.demo15driver;//定义老司机类,是司机类的一种,所以继承司机类
public class OldDriver extends Driver{@Overridepublic void ziShi() {System.out.println("老司机开车姿势:右手握方向盘左手抽烟");}
}
package com.itheima.demo15driver;public class Demo01Driver {public static void main(String[] args) {//创建新司机对象NewDriver nd = new NewDriver();nd.driver();//创建老司机对象OldDriver od = new OldDriver();od.driver();}
}

请添加图片描述

相关文章:

DAY01 面向对象回顾、继承、抽象类

学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...

127周一复盘 (165)玩法与难度思考

1.上午测试&#xff0c;小改了点东西&#xff0c; 基本等于啥也没干。 匆忙赶往车站。 从此进入春节期间&#xff0c;没有开发&#xff0c;而思考与设计。 2.火车上思考玩法与难度的问题。 目前的主流作法实际上并不完全符合不同玩家的需求&#xff0c; 对这方面还是要有自…...

【C语言常见概念详解】

目录 -----------------------------------------begin------------------------------------- 什么是C语言&#xff1a; 1. 基本数据类型 2. 变量与常量 3. 运算符与表达式 4. 控制结构 5. 函数 6. 指针 7. 数组与字符串 8. 结构体与联合体 9. 文件操作 结语 ----…...

弹性分组环——RPR技术

高频考点&#xff0c;考查20次&#xff1a; RPR与FDDI一样使用双环结构RPR环中的每一个节点都会执行SRP公平算法&#xff08;非DPT、MPLS&#xff09;传统的FDDI环&#xff0c;当源节点成功向目的结点发送一个数据帧后&#xff0c;这个数据帧由源结点从环中回收。但RPR环&#…...

定制Centos镜像

环境准备&#xff1a; 一台最小化安装的干净的系统&#xff0c;这里使用Centos7.9,一个Centos镜像&#xff0c;镜像也使用Centos7.9的。 [rootlocalhost ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# rpm -qa | wc -l 306 [rootloca…...

Java---判断素数的三种方法

我们首先先来了解一下什么是素数 素数:一个整数只能被1和自身整除 , 注意:0与1不是素数 目录 方法一:暴力法 方法二:除二法(优化) 方法三.根号法(最优法) 方法一:暴力法 最简单最暴力的方法就是根据定义&#xff0c;判断n是不是素数,让n除以2到n-1的所有数,只要遇到能除开…...

多级缓存(亿级并发解决方案)

多级缓存&#xff08;亿级流量&#xff08;并发&#xff09;的缓存方案&#xff09; 传统缓存的问题 传统缓存是请求到达tomcat后&#xff0c;先查询redis&#xff0c;如果未命中则查询数据库&#xff0c;问题如下&#xff1a; &#xff08;1&#xff09;请求要经过tomcat处…...

代理模式 - 代理模式的应用

引言 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用&#xff0c;从而可以在不改变目标对象的情况下&#xff0c;增加额外的功能或控…...

编辑器Vim基本模式和指令 --【Linux基础开发工具】

文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...

云计算如何与物联网(IoT)结合?

今天我们来聊一个既酷炫又实用的话题&#xff1a;云计算如何给物联网插上腾飞的翅膀。 智能时代的技术密码 想象一下&#xff0c;你家的冰箱会自动帮你订购即将用完的牛奶&#xff0c;工厂的机器能预测何时需要维修&#xff0c;城市的路灯会根据实时交通流量调整亮度。这些看…...

C#面试常考随笔4:int? 和 int的区别,以及int?的运用场景?

可空性 int?&#xff1a;它是int的可空类型&#xff0c;允许将null赋值给该变量。int?实际上是Nullable<int>的缩写形式&#xff0c;是一个可以为null的整数类型。例如&#xff1a;int? num2 null;或者int? num3 10;都是合法的。 内存分配与存储 int?&#xff…...

DeepSeek-R1试用

最近DeepSeek太火了&#xff0c;对配置要求不高。刚好放假&#xff0c;下载试试。发现开源大模型的生态做的挺好的&#xff0c;几分钟就能在本地部署一个大模型。 配置 NVIDIA RTX 2060 6GB&#xff08;最低要求 NVIDIA GTX 1060 6GB &#xff09; 下载Ollama Ollama是一个…...

Vue 3 30天精进之旅:Day 06 - 表单输入绑定

引言 在前几天的学习中&#xff0c;我们探讨了事件处理的基本概念及其在Vue中的应用。今天&#xff0c;我们将进一步了解Vue的表单输入绑定。这是构建用户交互式应用的核心部分&#xff0c;使得我们能够方便地处理用户输入并实时更新数据。本文将介绍如何在Vue中实现单向和双向…...

[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索

关键词&#xff1a; 从系统的角度&#xff0c;麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的&#xff1a; 都有&#xff1a;内在看不见的规律、外在显性各种现象 都是&#xff1a;输入、处理、输出 都是&#xff1a;静态、要素、组成、结构、组织…...

使用C#对指定的MYSQL数据库进行备份以及常见问题

最近在开发过程中&#xff0c;需要做个MYSQL数据库的备份&#xff0c;大致总结了一下代码&#xff0c;以及常见的坑 string bakName "database" DateTime.Now.ToString("yyyyMMddHHmmss") ".sql";//备份后的数据库文件名var bakupFilePath &q…...

探索人工智能在计算机视觉领域的创新应用与挑战

一、引言 1.1 研究背景与意义 在科技飞速发展的当下&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;已然成为引领新一轮科技革命和产业变革的重要驱动力。作为 AI 领域的关键分支&#xff0c;计算机视觉&#xff08;Computer Vision, CV&#xff0…...

Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)

概述 在现代互联网应用中&#xff0c;网络请求和响应是服务交互的核心。对于开发者和测试人员来说&#xff0c;能够准确捕获并分析这些请求&#xff0c;是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具&#xff0c;不仅可以捕获普通的HTTP请求&#xff0c;还…...

STM32 对射式红外传感器配置

这次用的是STM32F103的开发板&#xff08;这里面的exti.c文件没有how to use this driver 配置说明&#xff09; 对射式红外传感器 由一个红外发光二极管和NPN光电三极管组成&#xff0c;M3固定安装孔&#xff0c;有输出状态指示灯&#xff0c;输出高电平灯灭&#xff0c;输出…...

12 款开源OCR发 PDF 识别框架

2024 年 12 款开源文档解析框架的选型对比评测&#xff1a;PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章&#xff0c;聚焦于智能文档处理&#xff08;特别是 PDF 解析&#xff09;。无论是在模型预训练的数据收集阶段&#xff0c;还是基于 RAG…...

危机13小时:追踪一场GitHub投毒事件

事件概要 自北京时间 2024.12.4 晚间6点起&#xff0c; GitHub 上不断出现“幽灵仓库”&#xff0c;仓库中没有任何代码&#xff0c;只有诱导性的病毒文件。当天&#xff0c;他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒&#xff0c;等待不…...

CVE-2020-0796永恒之蓝2.0(漏洞复现)

目录 前言 产生原因 影响范围 漏洞复现 复现环境 复现步骤 防御措施 总结 前言 在网络安全的战场上&#xff0c;漏洞一直是攻防双方关注的焦点。CVE-2020-0796&#xff0c;这个被称为 “永恒之蓝 2.0” 的漏洞&#xff0c;一度引起了广泛的关注与担忧。它究竟是怎样的…...

游戏策划的分类

P3游戏策划分类 1.程序2.美术3.策划 程序&#xff1a;一般分为客户端程序和服务器程序 客户端程序一般负责游戏的前端画面表现 服务器程序负责游戏的后端运算 美术&#xff1a;角色原画&#xff0c;角色模型动作&#xff0c;场景原画&#xff0c;场景模型&#xff0c;UI设计&a…...

单片机基础模块学习——PCF8591芯片

一、A/D、D/A模块 A——Analog 模拟信号&#xff1a;连续变化的信号&#xff08;很多传感器原始输出的信号都为此类信号&#xff09;D——Digital 数字信号&#xff1a;只有高电平和低电平两种变化&#xff08;单片机芯片、微控制芯片所能处理的都是数字信号&#xff09; 下面…...

深入探索 HTML5 拖拽效果 API:打造流畅交互体验

在现代的 Web 开发中&#xff0c;交互性和用户体验一直是开发者关注的重点。HTML5 的拖拽效果 API (Drag and Drop API) 提供了一种非常直观的方式来让网页元素或文件能够被拖动并放置到页面的指定位置&#xff0c;极大提升了用户的交互体验。本篇文章将深入探讨如何使用 HTML5…...

【Healpix】python一种用于将球面划分为均匀区域的技术

Healpix 1、简介2、Healpix的基本原理3、Healpix的优点4、安装及使用4.1 安装healpy4.2 创建Healpix地图4.3 读取和写入Healpix数据4.4 数据插值 5、案例5.1 案例一&#xff1a;宇宙微波背景辐射&#xff08;CMB&#xff09;分析5.2 案例二&#xff1a;星系分布分析5.3 案例三&…...

Go:基于Go实现一个压测工具

文章目录 写在前面整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理 客户端模块Http客户端处理Grpc客户端处理Websocket客户端处理 连接处理模块GrpcHttp 统计数据模块统计原理实现过程 写在前面 本篇主要是基于Go来实现一个压测的工具&#xff0c;关于压测的内…...

算法-加油站问题

hello 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; function canCompleteCircuit(gas, cost) {// 加油站的总数const n gas.length;// 记录总剩余油量&#xff0c;若总剩余油量小于 0&#xff0c;说明无法绕环…...

UART ,IIC 和SPI三种总线协议

1.UART 1.1 简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;即通用异步收发器。 常见的串行、异步通信总线&#xff0c;两条数据线Tx、Rx&#xff0c;实现全双工通信&#xff0c;常用于主机与外设的通信&#xff0c;点对点。 1.2 硬件连接 交叉…...

Padas进行MongoDB数据库CRUD

在数据处理的领域,MongoDB作为一款NoSQL数据库,以其灵活的文档存储结构和高扩展性广泛应用于大规模数据处理场景。Pandas作为Python的核心数据处理库,能够高效处理结构化数据。在MongoDB中,数据以JSON格式存储,这与Pandas的DataFrame结构可以很方便地互相转换。通过这篇教…...

动手学图神经网络(6):利用图神经网络进行点云分类

利用图神经网络进行点云分类 引言 在本教程中,大家将学习使用图神经网络(Graph Neural Networks, GNN)进行点云分类的基本工具。给定一组对象或点集的数据集,将这些对象嵌入到一个特征空间中,使得它们在特定任务下能够分类。将原始点云作为神经网络的输入,让网络学习捕…...