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.子类父类都没有编译报…...
LeetCode:40. 组合总和 II(回溯 + 剪枝 Java)
目录 40. 组合总和 II 题目描述: 实现代码与解析: 回溯 剪枝 原理思路: 40. 组合总和 II 题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target …...
周末总结(2024/01/25)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
解决日志中 `NOT NULL constraint failed` 异常的完整指南
在开发和运维过程中,日志是我们排查问题的重要工具。然而,当日志中出现类似 NOT NULL constraint failed 的异常时,往往意味着数据库约束与代码逻辑不匹配。本文将详细分析此类问题的原因,并提供完整的解决方案。 © ivwdcwso (ID: u012172506) 问题描述 在同步 AWS …...
线性规划:机器学习中的优化利器
一、线性规划的基本概念 线性规划(Linear Programming, LP)是运筹学中数学规划的一个重要分支,用于在一组线性不等式的约束条件下,找到线性目标函数的最大值或最小值。其问题可以表述为: 在一组线性约束条件 s.t.&am…...
Flutter子页面向父组件传递数据方法
在 Flutter 中,如果父组件需要调用子组件的方法,可以通过以下几种方式实现。以下是常见的几种方法: 方法 1:使用 GlobalKey 和 State 调用子组件方法 这是最直接的方式,通过 GlobalKey 获取子组件的 State,…...
乐鑫 ESP32-C6 通过 Thread 1.4 互操作性认证
乐鑫信息科技 (688018.SH) 很高兴地宣布,ESP32-C6 已经成功通过 Thread 1.4 互操作性认证。这一成就标志着乐鑫在提供先进物联网解决方案之路上又迈进了重要一步。ESP32-C6 在 Thread Group 授权实验室的严格测试中,展现了与最新 Thread 1.4 协议的无缝兼…...
机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)
朴素贝叶斯模型 贝叶斯定理: 常见类型 算法流程 优缺点 集成学习算法 基本原理 常见方法 KNN(聚类模型) 算法性质: 核心原理: 算法流程 优缺点 matlab中的运用 朴素贝叶斯模型 朴素贝叶斯模型是基于贝叶斯…...
docker安装elk6.7.1-搜集java日志
docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …...
苍穹外卖-day06
[!IMPORTANT] HttpClient 是什么?它的作用是什么?在微信登录流程中,code 是什么?它的作用是什么?微信登录的具体步骤有哪些?在微信登录流程中,token 的作用是什么?在微信登录中&…...
iic、spi以及uart
何为总线? 连接多个部件的信息传输线,是部件共享的传输介质 总线的作用? 实现数据传输,即模块之间的通信 总线如何分类? 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…...
如何高效启动并优化你的Google广告?
在现代数字营销中,Google广告(Google Ads)已经成为提升品牌曝光、吸引潜在客户和推动销售增长的重要工具。无论你是刚接触广告投放的新手,还是希望优化广告效果的资深营销人员,理解如何有效启动并管理Google广告至关重…...
【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
目录 说明举例 说明 简单来说,android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要,而是多个控件的属性值之比发挥作用,例如有2个控件,各自的android:layout_weight的值设为0.5和0.5࿰…...
低代码系统-产品架构案例介绍、简道云(七)
今天分析另外一个零代码、低代码产品-简道云,跟所有低代码产品的架构图一样,高、大、炫、美。 依然是从下至上,从左到右的顺序。 开发层 搭建中心 表单、流程、报表、用户中心,还是这些内容,自定义打印很多平台都有&am…...
RabbitMQ 分布式高可用
文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…...
使用Pytest Fixtures来提升TestCase的可读性、高效性
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 在编写单元测试时,你是否发现自己有很多重复代码? 数据库设…...
qt QUrl详解
1、概述 QUrl是Qt框架中用于处理URL(统一资源定位符)的类,它提供了构建、解析、编码、解码和处理URL的功能。QUrl支持多种协议,如HTTP、HTTPS、FTP以及文件URL等,并能处理URL的各个组成部分,如协议、主机、…...
从0到1:C++ 开启游戏开发奇幻之旅(一)
目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境(IDE) Visual Studio CLion 图形库 SDL(Simple DirectMedia Layer) SFML(Simple and Fast Multim…...
IGBT的损耗计算的学习【2025/1/24】
可以通过示波器实测IGBT电压电流波形,然后通过示波器的math功能将电压电流波形乘积后积分求损耗。 软开管:给了导通信号,但是电流并没有从此IGBT流过 IGBT(绝缘栅双极晶体管)的损耗主要分为 导通损耗 和 开关损耗 两部…...
Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…...
Oracle迁移DM数据库
Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS,将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具,点击新建工程,填写好工程信息,如图: 2.2 新建迁…...
通过 NAudio 控制电脑操作系统音量
根据您的需求,以下是通过 NAudio 获取和控制电脑操作系统音量的方法: 一、获取和控制系统音量 (一)获取系统音量和静音状态 您可以使用 NAudio.CoreAudioApi.MMDeviceEnumerator 来获取系统默认音频设备的音量和静音状态&#…...
AI刷题-最小化团建熟悉程度和
目录 问题描述 输入格式 输出格式 解题思路: 状态表示 状态转移 动态规划数组 预处理 实现: 1.初始化: 2.动态规划部分: (1)对于已分组状态的,跳过: (2&…...
Day36:统计字符串个数
在 Python 中,字符串的统计功能是处理文本数据时非常重要的一部分。我们可以使用多种方法来统计字符串中的字符、子字符串、单词以及出现次数等。Python 提供了内建的方法和函数,如 count()、len() 和正则表达式,可以帮助我们高效地进行这些统…...
数字图像处理:实验六
uu们!大家好,2025年的新年就要到来,咸鱼哥在这里祝大家在2025年每天开心快乐,天天挣大钱,自由自在,健健康康,万事如意!(要是咸鱼哥嘴笨的话,还望大家多多包涵…...
【2025年数学建模美赛C题】第1-5问F奖解题思路+高级绘图+可运行代码
基于多模型分析的奥运会奖牌预测与影响因素研究 解题思路一、问题重述二、问题分析三、模型假设与符号说明四、数据预处理五、奖牌榜预测5.1 基于LSTM长短期记忆循环神经网络的预测模型的建立5.2 模型预测结果 六、首枚奖牌预测6.1 BP神经网络的建立6.2 模型预测结果 七、各国奖…...
记一次STM32编译生成BIN文件过大的问题(基于STM32CubeIDE)
文章目录 问题描述解决方法更多拓展 问题描述 最近在一个项目中使用了 STM32H743 单片机(基于 STM32CubeIDE GCC 开发),它的内存分为了 DTCMRAM RAM_D1 RAM_D2 …等很多部分。其中 DTCM 的速度是比通常的内存要快的,缺点是不支持…...
【设计模式-行为型】备忘录模式
一、什么是备忘录模式 来到备忘录模式了,这个模式我感觉相对简单一些,就是备份,或者快照。跟前面一样为了加深理解,我们引入一个电影情结来说明啥是备忘录模式,以来加深大家对备忘录模式的认识。那么,在电影…...
使用Cline+deepseek实现VsCode自动化编程
不知道大家有没有听说过cursor这个工具,类似于AIVsCode的结合体,只要绑定chatgpt、claude等大模型API,就可以实现对话式自助编程,简单闲聊几句便可开发一个软件应用。 但cursor受限于外网,国内用户玩不了,…...
React 前端框架实战教程
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 React 是由 Facebook 开发的前端 JavaScript 库,旨在构建高效、灵活的用户界面,尤其适用于单页应用…...
输入带空格的字符串,求单词个数
输入带空格的字符串,求单词个数 __ueooe_eui_sjje__ ---->3syue__jdjd____die_ ---->3shuue__dju__kk ---->3 #include <stdio.h> #include <string.h>// 自定义函数来判断字符是否为空白字符 int isSpace(char c) {return c || c \t || …...
Kafka 日志存储 — 日志清理
Kafka 提供两种日志清理策略:日志清理(Log Delete)与日志压缩(Log Compaction)。 1 日志清理 通过broker端参数log.cleanup.policy来设置日志清理策略,默认值为“delete”。如果要采用日志压缩的清理策略,则设置为“compact”。可以同时支持…...
51单片机入门_02_C语言基础0102
C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分,本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…...
从零开始学 HTML:构建网页的基本框架与技巧
系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 文章目录 系列文章目录前言一、HTML 文档的基本框架1.1 <!DOCTYPE html>、<html>、<head>、<body> 标签解析1.1.1 <!DOCTYPE html> 标签1.1.2 <html> 标签1.1.3 &l…...
vim的特殊模式-可视化模式
可视化模式:按 v进入可视化模式 选中 y复制 d剪切/删除 可视化块模式: ctrlv 选中 y复制 d剪切/删除 示例: (vim可视化模式的进阶使用:vim可视化模式的进阶操作-CSDN博客)...
LeetCode - Google 大模型校招10题 第1天 Attention 汇总 (3题)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145368666 GroupQueryAttention(分组查询注意力机制) 和 KVCache(键值缓存) 是大语言模型中的常见架构,GroupQueryAttention 是注意力…...
【ES实战】治理项之索引模板相关治理
索引模板治理 文章目录 索引模板治理问题现象分析思路操作步骤问题程序化方案索引与索引模板增加分片数校验管理 彩蛋如何查询Flink on Yarn 模式下的Task Manager日志相关配置查询已停止的Flink任务查询未停止的Flink任务 问题现象 在集群索引新建时,索引的分片比…...
Ansible自动化运维实战--script、unarchive和shell模块(6/8)
文章目录 一、script模块1.1、功能1.2、常用参数1.3、举例 二、unarchive模块2.1、功能2.2、常用参数2.3、举例 三、shell模块3.1、功能3.2、常用参数3.3、举例 一、script模块 1.1、功能 Ansible 的 script 模块允许你在远程主机上运行本地的脚本文件,其提供了一…...
完全平方数——唯一分解定理
文章目录 一、唯一分解定理是什么?1.定义2.示例3.代码模板 二、例题1>问题描述(2021蓝桥杯省赛)输入格式输出格式样例输入 1样例输出 1样例输入 2样例输出 2评测用例规模与约定 2>解题思路3>假娃3>C嘎嘎 一、唯一分解定理是什么&…...
可见光通信代码仿真
可见光通信代码仿真。可以在matlab上进行matlab仿真。 资源文件列表 visible_light/catch.m , 119 visible_light/HLOS.m , 283 visible_light/PRXLOS.m , 129 visible_light/RO.m , 155 visible_light/untitled.fig , 134740 visible_light/visible_light_comms.m , 1620 vis…...
Sklearn 中的逻辑回归
逻辑回归的数学模型 基本模型 逻辑回归主要用于处理二分类问题。二分类问题对于模型的输出包含 0 和 1,是一个不连续的值。分类问题的结果一般不能由线性函数求出。这里就需要一个特别的函数来求解,这里引入一个新的函数 Sigmoid 函数,也成…...
spark运行流程
spark运行流程 任务提交后,先启动 Driver 程序随后 Driver 向集群管理器注册应用程序集群管理器根据此任务的配置文件分配 Executor 并启动Driver 开始执行 main 函数,Spark 查询为懒执行,当执行到 Action 算子时开始反向推 算,根…...
MapReduce,Yarn,Spark理解与执行流程
MapReduce的API理解 Mapper 如果是单词计数:hello:1, hello:1, world:1 public void map(Object key, // 首字符偏移量Text value, // 文件的一行内容Context context) // Mapper端的上下文,…...
elk 安装
创建elk网络 docker network create -d bridge elkelasticsearch 创建目录 mkdir -p /data/elasticsearch/{conf,logs,data,plugins}vim /data/elasticsearch/conf/elasticsearch.ymlcluster.name: "es-cluster" network.host: 0.0.0.0 xpack.security.enabled: tr…...
二十三种设计模式-桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,其核心思想是将抽象与实现解耦,让它们可以独立变化。桥接模式主要用于解决类的继承问题,避免由于继承而带来的类层次结构过于复杂和难以维护的问题。 1. 核心概念 桥接…...
【Validator】字段验证器struct与多层级验证,go案例
标签用法总结表 标签功能代码实例required字段必填Name string \v:“required”alphaunicode验证字段是否只包含字母和 Unicode 字符Name string \v:“alphaunicode”gte验证字段值是否大于等于指定值Age uint8 \v:“gte10”lte验证字段值是否小于等于指定值Age uint8 \v:“lt…...
第19篇:python高级编程进阶:使用Flask进行Web开发
第19篇:python高级编程进阶:使用Flask进行Web开发 内容简介 在第18篇文章中,我们介绍了Web开发的基础知识,并使用Flask框架构建了一个简单的Web应用。本篇文章将深入探讨Flask的高级功能,涵盖模板引擎(Ji…...
jEasyUI 创建复杂布局
jEasyUI 创建复杂布局 引言 jEasyUI 是一款基于 jQuery 的开源 UI 框架,它提供了一套丰富的 UI 组件,帮助开发者快速构建美观、易用的 Web 应用。在开发过程中,复杂布局的创建往往是一个挑战。本文将详细介绍如何使用 jEasyUI 创建复杂布局,帮助开发者提升工作效率。 前…...
前端【8】HTML+CSS+javascript实战项目----实现一个简单的待办事项列表 (To-Do List)
目录 一、功能需求 二、 HTML 三、CSS 四、js 1、绑定事件与初始设置 2.、绑定事项 (1)添加操作: (2)完成操作 (3)删除操作 (4)修改操作 3、完整js代码 总结…...
java爬虫工具Jsoup学习
目录 前言 一、基本使用 二、爬取豆瓣电影的案例 三、Jsoup能做什么? 四、Jsoup相关概念 五、Jsoup获取文档 六、定位选择元素 七、获取数据 八、具体案例 前言 JSoup是一个用于处理HTML的Java库,它提供了一个非常方便类似于使用DOM࿰…...