JavaSE之常用关键字学习

news/2024/4/27 7:38:49/文章来源:https://blog.csdn.net/qq_66345100/article/details/125831685

文章目录

  • Java常用关键字学习
    • 1、static关键字学习
        • 1.1 用法一:修饰成员变量
        • 1.2 用法二:修饰成员方法
        • 1.3 用法三:修饰代码块
        • 1.4 用法四:修饰内部类类
        • 1.5 单例设计模式
    • 2、extends关键字学习
        • 2.1 继承的特点
        • 2.2 方法重写
    • 3、this、super关键字学习
        • 3.1 this和super基本用法和注意事项
        • 3.2 一个"简单"的面试题:
    • 4、final关键字学习
        • 4.1 用法一:修饰变量
        • 4.3 用法三:修饰类
    • 5、enmu关键字学习
    • 6、abstract关键字学习
        • 6.1 用法二:修饰方法
        • 6.2 用法一:修饰类
        • 6.3 模板方法设计模式
    • 7、interface关键字学习
        • 7.1 接口的特点和用法
        • 7.2 implements关键字学习
        • 7.3 接口和多态的综合使用案例
  • 结语

Java常用关键字学习

推荐阅读:👉JavaSE基础回顾

1、static关键字学习

static在英文中是”静止的静止的静止的“,正如其英文含义,在Java中用static关键字修饰的成员变量成员方法代码块内部类,它们会被存储在一个固定大小的内存区域,就像是”静止在内存中“一样,当执行 程序时,能够快速的访问它们。

被static修饰具有的特点

  • 数据共享。属于类级别,不需要创建对象就可以直接使用,是全局作用域
  • 全局唯一。在内存中存储固定且唯一(如果修饰成员变量,变量名具有唯一性)
  • 自动初始化。当类被加载的时候,就自动加载到内存中(只会被加载一次)

使用static修饰的优点和缺点

  • 优点:
    1. 对于频繁使用的数据使用static修饰能够节约内存。原因:被static修饰的数据只加载到内存中一次,不需要再去new对象,每次new一个对象都是需要开辟一个新的内存空间的(通常用来创建工具类,工具类构造器私有化显得很专业)
    2. 能够提高程序的效率。原因:static修饰的数据在内存中的存储位置固定且唯一,能够很便捷被JVM访问
  • 缺点:
    1. 大量使用会占用内存。原因:静态变量的生存周期和所在类相同,会长时间占用内存,所以不宜大量使用
    2. 存在线程安全问题。原因:static数据能够共享(一但数据存在共享,一般都会出现线程、并发等安全问题)

1.1 用法一:修饰成员变量

static修饰成员变量静态变量既可以被对象调用(不推荐),又可以被类调用

  • 静态变量被其他类访问时,可以直接通过类名.变量类名.变量类名.变量名进行访问。原因:静态变量存储位置固定,JVM能够直接通过类名找到静态变量的存储地址

  • 而在自己所在类中,可以被直接访问。原因:当类被加载时,静态变量会自动加载到内存中,导致静态变量在类中具有全局作用域,而普通变量是只有当对象实例化后才会加载到内存中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7TaGZCqb-1655952085471)(D:/用户/ghp/Pictures/Typora/image-20220620181051076.png)]

备注:static只能用于修饰成员变量1,不能用来修饰局部变量2

static还能用于修饰集合:public static ArrayList<String> cards = new ArrayList<>();

1.2 用法二:修饰成员方法

static修饰成员方法静态方法(也叫类方法) 只能被静态方法调用

  • 静态方法只能访问static修饰的成员3。原因:没有static修饰的成员需要先实例化对象,通过对象来调用成员
  • 使用static的静态方法不能以任何方式引用this和super关键字。原因:静态方法被调用时不产生任何对象,this、super找不到引用的对象
class Student{public void say(){System.out.println("hi!我是普通方法");}public static void speak(){System.out.println("hi!我是静态方法");}public static void main(String[] args) {//调用普通方法Student s = new Student();s.say();//调用静态方法speak();// s.speak();也可以使用对象调用,但不推荐}
}

1.3 用法三:修饰代码块

static修饰代码块静态代码块

  • 类被加载,静态代码块就被执行,且只会被执行一次

静态代码块一般用于提前初始化数据,比如:斗地主牌的准备就可以放在一个专门的静态代码块中

在这里插入图片描述

备注:类中的代码块和构造器一样,一但类被实例一次就会被加载一次

1.4 用法四:修饰内部类类

用static修饰的内部类叫做静态内部类

它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已

特点

  • 静态内部类不能访问外部类的实例成员(可以使用外部类的实例对象来访问)
  • 静态内部类的静态方法能访问外部类的静态方法
  • 静态内部类能访问外部类中的静态成员变量

注意事项:Java是不能直接在类中对变量进行赋值的,只能在定义的时候赋值,或者在方法中赋值,或者在代码块中赋值

语法

public class Outer{// 静态成员内部类public static class Inner{……;}
}
//示例化对象
外部类名.内部类名 对象名 = new 外部类名.内部类构造器;

1.5 单例设计模式

设计模式:开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。

学设计模式主要是学2点
第一:这种模式用来解决什么问题。
第二:遇到这种问题了,该模式是怎么写的,他是如何解决这个问题的。

单例模式:保证系统中,应用该模式的这个类永远只有一个实例,即:一个类永远只能创建一个对象

单例模式的优点

  1. 节约内存。无论实例化多少次对象,只加载到内粗中一次
  2. 保证实例对象的唯一性(有些情况必须要一个唯一的实例对象,否则系统就会混乱,比如:任务管理器的设计就必须使用单例模式)

饿汉单例模式在用类创建对象时,对象已经提前为你创建好了(通过类名.静态变量获取对象)

  1. Step1:定义一个类,将构造器私有化
  2. Step2:定义一个静态变量存储new创建的对象
//饿汉单例模式
public class SingleInstance {//stept2:提前准备对象,该对象只加载一次,具有唯一性public static SingleInstance si = new SingleInstance();//step1:构造器私有化private SingleInstance(){System.out.println("无论你实例化多少次si对象,我都只运行一次");}
}
class test{public static void main(String[] args) {SingleInstanceDemo1 s1 = SingleInstanceDemo1.si;SingleInstanceDemo1 s2 = SingleInstanceDemo1.si;System.out.println(s1==s2);//true}
}

懒汉单例模式在真正需要该对象的时候,才去创建一个对象(延迟加载对象)(通过)

  1. Step1:定义一个类,将构造器私有化
  2. Step2:定义一个静态变量存储一个对象(一定要私有化
  3. Step3:提供一个返回单例对象的方法
//懒汉单例模式
public class SingleInstanceDemo2 {//Step2:定义一个静态变量,用来存new创建的对象。不私有化会让外界动过类点对象访问到,但是此时很有可能为nullprivate static SingleInstanceDemo2 si;//Step3:定义一个返回单例对象的方法public static SingleInstanceDemo2 getInstance(){if(si == null){si = new SingleInstanceDemo2();}return si;}//Step1:私有化构造器private SingleInstanceDemo2(){System.out.println("无论你实例化多少次,我都只会被执行一次");}}
class test2{public static void main(String[] args) {/*System.out.println(SingleInstanceDemo2.si);//如果不加private,能够访问到si,但是很可能为null。加private直接让外界访问不到,防止出bug*/SingleInstanceDemo2 si1 = SingleInstanceDemo2.getInstance();SingleInstanceDemo2 si2 = SingleInstanceDemo2.getInstance();System.out.println(si1==si2);//true}
}

两种模式的比较

  1. 相同点:都是解决一个类只能存在一个对象的问题,都需要将构造器私有化、都需要利用static关键字实现功能

  2. 不同点

    1)懒汉比饿汉节省内存。懒汉是提前实例化对象,将数据加载到内存中国,无论是否需要都占用了内存,而懒汉是用的时候才加载到内存中,能更好的节约内存

    2)饿汉比懒汉节省时间。饿汉是提前将数据加载到内存中的,随时可以访问;同时饿汉获取对象还需要进行判断

🐟与🐻不可兼得啊

推荐阅读:一文搞懂static


2、extends关键字学习

2.1 继承的特点

继承的好处:提高代码的复用性,减少代码冗余,增强类的扩展性

继承的特点

  1. 子类可以继承父类的属性和方法,但子类(派生类)无法继承父类的构造器
  2. Java是单继承模式:一个类只能继承一个直接的父类(超类、基类、根类)
  3. Java不支持多继承,但是支持多层继承
  4. Object是所有类的父类(一切皆对象)

备注:

  1. 子类无法继承父类private修饰的成员(本质上是继承了,只是继承了也不能访问)
  2. 继承的子类可以直接通过自己的实例对象使用父类static修饰的成员,但并非继承而是共享

子类访问成员遵循就近原则子类局部范围找→子类的全局范围找→父类的全局范围找→父类的父类找→……子类局部范围找\rightarrow{子类的全局范围找}\rightarrow{父类的全局范围找}\rightarrow{父类的父类找}\rightarrow{……}子类局部范围找子类的全局范围找父类的全局范围找父类的父类找……

继承后子类构造器的特点继承后的子类每次执行自己的任意一个构造器会默认优先访问执行父类的无参构造器,再执行自己

原因:子类继承了父类,需要用到父类中的数据,如果父类没有完成初始化(初始化就进入了内存),子类就无法去使用父类的数据

子类构造器都会默认存在一个super()方法

如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?
会报错。因为子类默认是调用父类无参构造器的。

经验:一般所有的类都会默认存在一个物产构造器,但一旦我们设置一个有参构造器时,就会自动消失,所以当我们开发时,给一个类加一个有参构造器时,就需要手动设置一个无参构造器,养成规范,避免出现bug

2.2 方法重写

只有当一个类继承另一个类后才能重写,即:子类重写继承了父类的方法

重写注解@Override

  1. 告诉编译器这是一个重写的方法,可以检测重写是否符合规范
  2. 提高代码的可读性,让代码更加规范(别人一看就知道你这是一个重写的方法)

重写注意事项

  1. 重写方法的名称、形参列表必须与被重写的方法一致(重写只是更改了方法的内部结构,并没有改变它的外部结构,简言:声明不变,重新实现
  2. 子类重写父类方法时,访问权限必须≥父类(不能重写父类private修饰的方法,省略权限关键字(default)<protected<public)
  3. 子类不能重写父类的静态方法(static修饰的成员并不会被继承)

3、this、super关键字学习

3.1 this和super基本用法和注意事项

this和super的用法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcW7A1dP-1655952085473)(D:/用户/ghp/Pictures/Typora/image-20220621094540055.png)]

this和super注意事项

  • this(……)、super(……)中的参数列表与待访问的构造器参数列表一致

  • this和super关键字不能共存于同一个构造器中

注意事项:

使用this访问构造器时需要注意

  1. 只能再构造方法中使用this访问构造器
  2. 在构造方法中使用this访问构造器的语句必须写在第一条
  3. 同一个类中的两个构造方法使用this相互调用(会报Receusive constructor invocation Person()错误提示信息)

使用super访问构造器时需要注意

  1. 所有类中的无参构造方法都会在第一行默认存在一个super()方法
  2. 由于1的存在,最好在每个类中都显示地定义一个无参构造方法

3.2 一个"简单"的面试题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VEfs7Gug-1655952085473)(D:/用户/ghp/Pictures/Typora/image-20220621101306936.png)]

考察的知识点

  1. new需要干啥

  2. 构造器默认存在super()方法

  3. 等号赋值的特点

  4. 方法的调用由对象的类型决定

快来看看你得到的是答案属于哪一阶段吧😄:

小白阶段(懂1):20

入门阶段(懂1,2):10,20

进阶阶段(懂1,,2,3):20,20

基础知识熟练(懂1,2,3,4):0,20【正确答案】

推荐阅读:JavaSE基础回顾的【5、继承】

上面代码的正真样子

package com.hhxy.oop;
class A {int x;//x=0public A() {super();x=10;run();}public void run() {System.out.println(x);}
}
class B extends A {int x;//x=0public B() {super();x = 20;run();}public void run() {System.out.println(x);}
}
public class Test {public static void main(String[] args) {new B();}
}

答案解析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40VzVIxd-1655952085474)(D:/用户/ghp/Pictures/Typora/image-20220621111428462.png)]

备注

  • 进行等号int x= 10 赋值时,编译器会自动将它分解成两个步骤:int x;x=0;

int x;在类被加载时就直接进行了初始化,而赋值操作是会被编译器放在构造方法中进行的,构造方法就是用来进行赋值操作的

  • 为什么构造方法第一行会什么一定会存在super();方法,原因可以参考:JavaSE基础回顾的【5、继承=>继承后子类构造器的特点】

思维拓展

  • 如果将Test类中new B();换成new A();new A().runnew B().run()又将会是一个怎样的结果呢?

总结

  1. 一个类在使用new进行实例化,就会自动调用构造方法
  2. 变量的初始化发生在类加载阶段,变量的赋值发生在构造方法的执行阶段
  3. 一个类的构造方法存在默认super();方法
  4. 方法由谁触发就由谁去执行

4、final关键字学习

finally表示”最终地“,可以修饰变量、方法、类

4.1 用法一:修饰变量

final修饰的变量被称为常量,只能被赋值一次

  • 修饰局部变量:局部变量可以先定义,后赋值(但是定义的时候不会进行初始化)
  • 修饰的引用类型的变量:变量存储的地址的值不会改变,但地址指向的对象内容是可以变的

拓展:

Java中赋值的特点:Java是不能直接在类中对变量进行赋值的,只能在定义的时候赋值,或者在方法中赋值,或者在代码块中赋值

final修饰的方法不能被重写

4.3 用法三:修饰类

final修饰的类不能被继承

作用final修饰的变量一般用来做信息的标识

拓展:常量

经验:常量通常使用public static final修饰

常量的作用和好处:可做系统的配置信息、方便程序的维护、提高程序的可读性

常量执行原理:在编译阶段,会直接讲常量进行宏替换,替换成常量所对应的真实的字面量


5、enmu关键字学习

  • 枚举类所在包:java.lang.Enmu
  • 枚举类应用的是多例模式,提前准备了多个对象
  • 枚举类是最终类,符合final修饰类的全部特点
  • 枚举类的构造器私有,不能实例化对象

语法

[修饰符] enum 类名 {object1,object2...;
}

使用Javap命令可以反编译枚举类javac生成的class文件,查看枚举类的真正构造

enum Season{
SPRING , SUMMER , AUTUMN , WINTER;
}

javap反编译后

Compiled from "Season.java"
public final class Season extends java.lang.Enum<Season> {
public static final Season SPRING = new Season();//
public static final Season SUMMER = new Season();
public static final Season AUTUMN = new Season();
public static final Season WINTER = new Season();
public static Season[] values();
public static Season valueOf(java.lang.String);
}

枚举类的作用是为了做信息的标志和信息的分类

相对于常量做信息的标识,会显得更加严谨,代码可读性更强,对于不符合规范的数据类型还会报错,枚举型是最好的信息分类技术(例如:设计一一个控制方位的按钮就可以使用枚举类)

推荐阅读:Java中enum详解


6、abstract关键字学习

abstract在英文中是”抽象的“意思,正如其名,他修饰的类、方法都是抽象的,空有其表。

注意事项:abstract关键字和final关键字是互斥关系,不能共存。(原因很简单,就不赘述了)

6.1 用法二:修饰方法

被abstract修饰的方法叫做抽象方法

  • 抽象方法只有方法名没有方法体
  • 抽象方法可以被子类重写

6.2 用法一:修饰类

被abstact修饰的类叫做抽象类

  • 抽象类不可以被实例化。原因:抽象类中的方法是抽象方法,抽象方法没有方法体,无法被调用(其实也可以结合实际理解,既然一个东西存一个实体,我们能够摸到、看到它,肯定就不抽象了)
  • 抽象类可以被继承,继承的子类必须重写父类中所有的抽象方法

注意:一定不能使用abstract修饰变量、构造方法、代码块

语法

[修饰符] abstract class 类名{[[修饰符] abstract 方法返回值类型 方法名([参数]);]
}

抽象类和抽象方法的关系抽象方法一定在抽象类中,抽象类中不一定有抽象方法,抽象类中的方法不一定是抽象方法

抽象类的作用:提高代码的复用性、可扩展性(提供一个模板)、灵活性

应用场景:

 当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。

6.3 模板方法设计模式

解决的问题:当一个系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候

模板方法实现步骤

  1. Step1:定义一个抽象类
  2. Step2:定义两种方法,模板方法 和 抽象方法,模板方法中放通用且 方法体确定 的方法,抽象方法用来写功能确定但方法体不确定的方法
  1. Step3:子类继承抽象类,重写抽象方法

备注:模板方法一定要使用final关键字修饰

原因:模板方法是给子类直接使用的,不是让子类重写的,一旦子类重写了模板方法(那模板就失去了存在的意义),则模板方法就失效了,因此,加上final后可以防止子类重写了模板方法,这样更安全、专业。

eg:当学校要求中学生和小学生都必须写一篇作文,题目是《我的爸爸》,作文的第一段和最后一段内容要一样,中间介绍各自爸爸的细节不一样。现在使用模板方法来设计:

package com.hhxy.finall;abstract class Student{//1.模板方法:写共同部分public final void write(){//作文题目《我的爸爸》System.out.println("《我的爸爸》");//第一段作文内容:System.out.println("我的爸爸爱我");//中间部分:writeMain();//谁触发就调用谁的方法,和那个面试题中run()方法一样//最后一段内容:System.out.println("我爱我的爸爸");}//2.抽象方法:写功能确定但内容不确定的部分public abstract void writeMain();}class StudentMiddle extends Student{@Overridepublic void writeMain() {System.out.println("我爸是李刚");}
}class StudentSmall extends Student{@Overridepublic void writeMain() {System.out.println("我爸是王键林");}
}public class Test {public static void main(String[] args) {StudentMiddle sm = new StudentMiddle();StudentSmall ss = new StudentSmall();sm.write();ss.write();}
}

输出如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RCMFLvBY-1655952085475)(D:/用户/ghp/Pictures/Typora/image-20220621212648221.png)]

7、interface关键字学习

7.1 接口的特点和用法

interface在英文中有”接口,交流界面“的意思,它用于定义接口。接口本质上是一种特殊的抽象类,它将抽象进行的跟彻底。

  • JDK8以前:接口中只存在抽象方法和变量 (准确来说是常量,因为接口中的会默认给里面的变量添加public static final)

  • JDK8以后:增加了 默认方法 和 静态方法,且它们都必须有方法体

原因:为了提高接口的扩展性。如果一个接口被成功应用了,后期想要对接口增加一些新的需求,就只能增加抽象方法,而抽象方法有必须要所有的实现类去实现,就会显得很麻烦,而默认方法和静态方法的出现就能很好地解决这个问题了。

  • JDK9后增加了私有方法:只能在本接口中被其他默认方法或私有方法调用

接口的特点

  1. 接口不能实例化对象
  2. 接口中的变量会默认添加public static final修饰符
  3. 接口中的方法会默认添加public static修饰符
  4. 接口是多继承模式,一个接口可以同时继承多个接口(这些接口一定不能存在规范冲突,比如:同名抽象方法的返回值类型不一样)
  5. 接口中只存在抽象方法、默认方法、静态方法、私有方法。接口中的静态方法只能通过接口名.方法名()来调用4,抽象方法和默认方法只能通过接口的实现类的实例化对象调用(默认方法可以被实现类重写5),私有方法只能在本接口中被其他默认方法或私有方法调用。

语法

[修饰符] interface 接口名[extends 父接口1,父接口2...]{[public static final] 数据类型 变量名 = 变量值;//常量[public] [abstract] 方法名([参数]);//抽象方法[public] default 方法名([参数]){}//默认方法[public] static 方法名([参数]){}//静态方法private 方法名([参数])//私有方法
}

作用:规范代码,约束实现它的类需要完成哪些功能

7.2 implements关键字学习

implements是实现接口的关键字,用于表示接口的实现类。

实现类的特点

  • 抽象类实现接口,只需要实现部分抽象方法(或者一个都不实现)
  • 普通类实现接口,需要实现接口中所有的抽象方法
  • 一个类允许同时实现多个接口
  • 继承和实现可以共存,先继承后实现(优先级:继承>实现,当一个类继承的和实现的方法同名,继承的优先)(有点像亲爸和干爹的关系,亲爸只能有一个,干爹可以有无数个i,亲爸比干爹重要)

语法

[修饰符] class 类名 [extends 父类] implements 接口1 [,接口2,接口3...]{}

7.3 接口和多态的综合使用案例

本来不打算将这段代码记录进笔记的,太简单了🐶,因为我觉得代码只需要理解看懂就OK了,但个人感觉这个案例对接口和多态的进一步理解有作用,就搬过来了。题目要求是:一台电脑又一个USB接口,鼠标和键盘要又插入和拔出USB接口的功能,同时它们插入后所实现的功能又各自不同

USB接口的定义:

package com.hhxy.demo;
/*** USB接口:用于规范* 必须具有的功能:插入、拔出*/
public interface USB {void insert();//插入方法void putOut();//拔出方法
}

键盘类的定义:

package com.hhxy.demo;
/***KeyBoard:键盘类* 需要受到接口的约束:实现接口*/
public class KeyBoard implements USB{//定义键盘的成员变量private String name;//键盘的名字//提供无参、有参构造方法public KeyBoard() {}public KeyBoard(String name) {this.name = name;}//提供成员变量的get、set方法public String getName() {return name;}public void setName(String name) {this.name = name;}//键盘实现接口中所有的抽象方法@Overridepublic void insert() {System.out.println(name+"成功链接电脑");}@Overridepublic void putOut() {System.out.println(name+"成功拔出电脑");}//键盘的独有功能:点击功能public void keyDown(){System.out.println(name+"键盘点击了Enter键!");}
}

鼠标类的定义:

package com.hhxy.demo;
/*** Mouse:鼠标* 需要受到接口的约束:实现接口*/
public class Mouse implements USB {//定义鼠标的成员变量private String name;//鼠标的名字//提供无参、有参构造方法public Mouse() {}public Mouse(String name) {this.name = name;}//提供成员变量的get、set方法public String getName() {return name;}public void setName(String name) {this.name = name;}//鼠标实现接口中所有的抽象方法@Overridepublic void insert() {System.out.println(name + "成功链接电脑");}@Overridepublic void putOut() {System.out.println(name + "成功拔出电脑");}//鼠标的独有功能:点击功能public void click() {System.out.println(name + "双击点亮小红心!");}
}

电脑类的定义:

package com.hhxy.demo;
public class Computer {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public Computer(String name) {this.name = name;}//电脑开机public void run(){System.out.println("电脑开机了");}//鼠标和电脑进行拼接public void joint(USB obj){//鼠标或者键盘想链接电脑先插入USBobj.insert();//插入后各自进行各自的功能if(obj instanceof Mouse){Mouse m = (Mouse) obj;m.click();}else{KeyBoard k = (KeyBoard) obj;k.keyDown();}//鼠标或者电脑链接电脑使用后拔出USBobj.putOut();}
}

测试类的定义:

package com.hhxy.demo;
//用于理解接口和多态
public class Test {public static void main(String[] args) {//买电脑Computer c = new Computer("拯救者");c.run();//买鼠标、键盘USB u1 = new KeyBoard("樱桃者");USB u2 = new Mouse("灵蛇");//将鼠标和键盘进行拼接c.joint(u1);c.joint(u2);}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DL505xTl-1655952085475)(D:/用户/ghp/Pictures/Typora/间隔.png)]

结语

加油努力,我最是最棒的😃 。下一个目标干JavaWeb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRsAcQB3-1655952085476)(D:/用户/ghp/Pictures/Typora/1.png)]

最后附上本文思维导图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flx7zTgB-1655952085476)(D:/用户/ghp/Pictures/Typora/Java常用关键字.png)]


  1. 成员变量是类的属性,是直接定义在类中的变量 ↩︎

  2. 局部变量成员方法中的变量,定义在方法中 ↩︎

  3. 成员就是类的组成部分,可以是类的方法、类的变量(也可以称作类的属性)、代码块 ↩︎

  4. 目的:一个类同时实现多个接口时,如果多个接口存在同名的静态方法,不会发生冲突。也可以通过实现类重写静态方法来解决冲突 ↩︎

  5. 目的:解决一个类同时实现多个接口时,多个类都存在同一个默认方法,此时会报错,实现类永远无法访问到接口中的默认方法,只能通过实现类重写解决冲突 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Comsol的花瓣形穿孔微穿孔板的吸声理论仿真

研究背景&#xff1a; 为了抑制噪声污染&#xff0c;已经开发了许多吸声材料和结构。传统的吸声材料&#xff0c;如开孔泡沫和纤维棉&#xff0c;随着时间的推移会劣化&#xff0c;因为小颗粒常常从这些多孔材料的骨架中脱落。此外&#xff0c;脱落的小颗粒可能污染建筑物内的…

立项近7年,索尼产品经理分享PS VR2开发背后的故事

备受期待的索尼PS VR2终于正式发售&#xff0c;VR爱好者们终于有机会体验到《地平线&#xff1a;山之呼唤》等PS VR2独占的VR大作。近期&#xff0c;为了解PS VR2头显诞生背后的故事&#xff0c;外媒AV Watch采访到PS VR2的开发负责人Yasuo Takahashi&#xff0c;在本次采访中&…

面试题-----JDBC单例模式(懒汉式和饿汉式)

1.单例概念 作为一种常见的设计模式&#xff0c;单例模式的设计概念是"两个私有,一个公有",即私有属性/成员变量和私有构造,以及公有方法,常用于在整个程序中仅调用一次的代码。 2.具体操作 从单例模式的描述来看,单例模式并不能用于多次频繁调用的设计中,而更适用…

剑指 Offer 55 - I. 二叉树的深度

摘要 剑指 Offer 55 - I. 二叉树的深度 一、深度优先搜索 如果我们知道了左子树和右子树的最大深度l和r&#xff0c;那么该二叉树的最大深度即为&#xff1a;max(l,r)1。 而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计…

校园学生翻墙打架识别检测系统 yolov7

校园学生翻墙打架识别检测系统通过yolov7网络模型深度学习分析技术&#xff0c;校园学生翻墙打架识别检测算法可以对&#xff1a;打架行为、倒地行为识别、人员拥挤行为、攀高翻墙违规行为等违规行为进行实时分析检测。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#x…

动手学深度学习v2—01数据操作+数据预处理

[TOC]此次用到的虚拟环境&#xff1a;pytorchmwy项目名称&#xff1a;limuAI所需框架和工具&#xff1a;pytorch&#xff0c;pandas一、创建CSV文件所需工具&#xff1a;pandas在与项目同等目录下创建一个文件夹名为data&#xff0c;其中文件名称为house_tiny.csv。代码如下&am…

随想录二刷 (双指针法) leetcode 27 26 283 844

双指针法的原理 双指针法相对于暴力解法的优点有以下几点 暴力遍历的时间复杂度会比较高双指针法利用两个指针进行遍历完成双层循环所做的事情 双指针一般有两种方法 同向指针&#xff0c;双向指针 第一题 leetcode 27 移除元素 题目描述 题目分析 采用暴力遍历可以得出结…

高效制作知识库的软件工具,这6个都很不错哦!

任何工作流程都离不开文档管理&#xff0c;因此文档管理也是企业数字化转型中的重要环节。面对复杂的业务流程、频繁的文档编辑任务和跨区域的文件共享需求&#xff0c;优秀的文档管理体系能够帮助企业实现安全的文档存储&#xff0c;高效的文档搜索&#xff0c;便捷的文档协作…

(一)Spring-Cloud源码分析之核心流程关系及springcloud与springboot包区别(新)

文章目录1. 前言2. springcloud简介3. Springcloud包简介4. Springcloud和Springboot流程关系5. Springcloud启动流程新增的功能和接口5.1 新增接口5.2 新增功能类5.2.1 spring-cloud-context包5.2.2 spring-cloud-commons包6. Springcloud实现机制带来的问题7. Springcloud和S…

深入浅出C++ ——手撕红黑树

文章目录一、红黑树的概念二、红黑树的性质三、红黑树节点的定义四、红黑树的插入操作五、红黑树的验证五、红黑树的删除六、红黑树与AVL树的比较七、红黑树的应用八、红黑树模拟实现一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存…

Typecho COS插件实现网站静态资源存储到COS,降低本地存储负载

Typecho 简介Typecho 是一个简单、强大的轻量级开源博客平台&#xff0c;用于建立个人独立博客。它具有高效的性能&#xff0c;支持多种文件格式&#xff0c;并具有对设备的响应式适配功能。Typecho 相对于其他 CMS 还有一些特殊优势&#xff1a;包括可扩展性、不同数据库之间的…

(二十五)、实现评论功能(5)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1&#xff0c;实现二级回复的入库操作 1.1 两个子组件&#xff08;comment-item和comment-frame&#xff09;与父组件reply之间的属性传值 comment-item&#xff1a; props: {item: {type: Object,default () {return {}}}},comment-frame&#xff1a; props: {commentObj: {…

儿童饰品发夹发卡出口美国办理什么认证?

亚马逊美国站上传新产品&#xff0c;很多时候都是需要类目审核的&#xff0c;后台给出要求提供认证&#xff0c;产品类目不同&#xff0c;所需要提供的认证证书是不一样&#xff0c;儿童产品需要提交的是CPC认证&#xff0c;玩具&#xff0c;母婴用品&#xff0c;儿童书包&…

PDF文件怎么转图片格式?转换有技巧

PDF文件有时为了更美观或者更直观的展现出效果&#xff0c;我们会把它转成图片格式&#xff0c;这样不论是归档总结还是存储起来都会更为高效。有没有合适的转换方法呢&#xff1f;这就来给你们罗列几种我个人用过体验还算不错的方式&#xff0c;大家可以拿来参考一下哈。1.用电…

Apifox = Postman + Swagger + Mock + JMeter

目录 可视化API设计 高效 & 零学习成本 可复用的“数据模型” 遵循 OpenAPI(Swagger) 规范 可导入 Swagger 等 20 数据格式 具体使用尝鲜 多项目管理 支持多环境切换 支持IDEA、浏览器、桌面应用 Idea插件 公共API hub库 如题&#xff1a;一款非常好用的API管理测…

Wi-Fi 7技术揭秘

引言 2022年4月7日&#xff0c;紫光股份旗下新华三集团全球首发企业级智原生Wi-Fi 7 AP新品 WA7638和WA7338。仅在同年的6月15日&#xff0c;在东京举行的第29届日本网络通信展览会&#xff08;Interop Tokyo 2022&#xff0c;简称Interop展&#xff09;中&#xff0c;WA7638就…

D1s RDC2022纪念版开发板开箱评测及点屏教程

作者new_bee 本文转自&#xff1a;https://bbs.aw-ol.com/topic/3005/ 目录 芯片介绍开发板介绍RT-Smart用户态系统编译使用感想引用 1. 芯片介绍 RISC-V架构由于其精简和开源的特性&#xff0c;得到业界的认可&#xff0c;近几年可谓相当热门。操作系统方面有RT-Thread&am…

Firebase常用功能和官方Demo简介

一、Firebase简介Firebase刚开始是一家实时后端数据库创业公司&#xff0c;它能帮助开发者很快的写出Web端和移动端的应用。自2014年10月Google收购Firebase以来&#xff0c;用户可以在更方便地使用Firebase的同时&#xff0c;结合Google的云服务。现在的Firebase算是谷歌旗下的…

模拟信号4-20mA /0-5V/0-75mV/0-100mV转RS-485/232,数据采集A/D转换模块 YL21

特点&#xff1a;● 模拟信号采集&#xff0c;隔离转换 RS-485/232输出● 采用12位AD转换器&#xff0c;测量精度优于0.1%● 通过RS-485/232接口可以程控校准模块精度● 信号输入 / 输出之间隔离耐压3000VDC ● 宽电源供电范围&#xff1a;8 ~ 32VDC● 可靠性高&#xff0c;编程…

界面控件DevExpress WinForm——轻松构建类Visual Studio UI(二)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…