💡涉及的知识点速通
- 🛫 关于关键字你都知道什么?
- 🪂 this和super关键字
- 🪂 instanceof关键字
- 🪂 static关键字
- 🪂 final关键字
- 🛫 权限修饰符的作用范围知多少?
各位小伙伴们大家好,欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏,在这个系列专栏中我将记录浅学这本书所得收获,鉴于 看到就是学到、学到就是赚到 精神,这波简直就是血赚
🛫 关于关键字你都知道什么?
🪂 this和super关键字
属性和方法的调用
this.属性或方法名调用当前对象中的属性或方法,如果本类中没有超类中有的话就调用超类中的,都没有的话就报错。super.属性或方法名只访问超类中的属性或方法,即使超类没有子类中有的话也会报错构造器的调用:
构造器的调用讲究比较大,首先构造器的调用使用的是this(参数列表)或者super(参数列表)。当子类继承超类并使用构造器进行初始化的时候,子类每一个构造器的第一行会有一行默认的隐式语句super();调用超类的无参构造器,且超类的无参构造器会先于子类构造器执行 前面说过如果超类中只定义了一个有参构造器的话,就不会提供超类的默认无参构造器,如果此时子类再定义构造器的话构造器会默认调用超类的无参构造器,这就会产生报错。解决方案就是超类定义无参构造器,或者在子类的构造器中显式使用Super(参数列表)调用超类的有参构造器this(参数列表)调用的是本类的构造器,super(参数列表)调用的是超类的构造器
🪂 instanceof关键字
a instanceof A用来判断某个实例变量a是否属于A这个类的类型,如果是的话就返回true否则返回false。instanceof 关键字的使用场景就是,在进行向下转型之前判断一下左边的对象是不是右边的子类,如果是的话才能进行类型强转,否则会出现ClassCastException异常。值得注意的是,如果 a instanceof A 返回true的话,A的父类放在右边也会返回true,但是A的子类放在右边不一定返回true。
🪂 static关键字
静态变量
使用static修饰的变量又称为是静态变量或者类变量,静态变量的特点是通过该类创建的所有对象共享一个变量,一个对象修改静态变量的值会造成其他所有对象对该静态变量的引用值发生改变;而不使用static修饰的实例变量的特征是,每个对象之间的变量修改互不影响。
静态方法
静态非静态之间的相互调用: 使用static修饰的方法又称为是静态方法,静态方法和静态变量的使用有很大的相似之处,值得注意的是,静态方法中无法调用该类的非静态方法和属性,而非静态方法可以调用静态和非静态的方法和属性。 静态方法内部无法使用的关键字: 值得注意的是,静态方法内部无法使用this和super关键字,因为this和super都是对对象属性或方法的引用,static是随着类的加载而加载,也就是说static的加载是在对象之前的,static加载的时候还没有对象的存在,所以说此时调用会产生逻辑错误导致报错 静态方法无法被重写覆盖: 此外比较重要的就是,static修饰的方法不能被重写覆盖,也就是说子类和超类中满足重写条件的static方法不会导致重写覆盖,使用多态调用的还是超类中的方法,与此同时private修饰的方法封装在超类中也无法被重写 静态方法调用: 还有就是,我们都知道static修饰的方法可以使用类名直接调用,但是并不是所有的静态属性都可以直接使用类名进行调用,因为如果静态属性被private修饰的话就无法使用类名调用,所以说“静态属性可以直接用类名调用”这句话是不正确的,应该是“非私有的静态属性可以直接用类名调用”
🪂 final关键字
修饰类:使用final修饰的类无法被其他类所继承,也就说该类不能拥有子类,比如String、System等类
修饰方法:使用final修饰的方法无法被重写
修饰变量:使用final修饰的“变量”的值无法修改,也就是一个常量,常量的初始化方式可以是显示初始化,代码块初始化,构造器初始化
修饰局部变量:可以在方法体中使用final修饰一个局部“变量”,或者方法的参数使用final修饰,无论是哪一种,该局部“变量”的值都无法进行修改
🛫 权限修饰符的作用范围知多少?
Java中一共定义了四种权限修饰符,它们按照作用范围从小到大依次是:private、缺省(default)、protected、public,其中缺省的意思就是在不使用权限修饰符的情况下就默认使用该修饰符。这四种权限修饰符可用来修饰属性、方法、构造器、内部类等结构,但是类只能使用缺省和public修饰
这里我以属性的调用为例,方法的效果与之相同,接下来就使用代码测试上图结论方便大家的理解。首先是属性定义的本类内部属性定义所在类的所在package下的所有类中属性定义所在类的不同package有继承关系的子类属性定义所在类的不同package的普通类