Java 基础随记
- Java中的this
this是指当前对象自己。在写一个方法的时候,如果想在方法内部获得对当前对象的引用就可以用this。this表示对“调用方法的那个对象”的引用。也就是说this指的是方法所属的类的对象的引用。
- 调用当前对象中的成员变量或方法:
this.当前对象中的成员变量或方法
- 调用当前对象的构造方法:
this(参数)
- 内部类
内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;
内部类的方法可以直接访问外部类的所有数据,包括私有的数据。
-
例子:
//外部类HelloWorld public class HelloWorld { // 内部类Inner,类Inner在类HelloWorld的内部 public class Inner { // 内部类的方法 public void show() { System.out.println("welcome to imooc!"); } } public static void main(String[] args) { // 创建外部类对象 HelloWorld hello = new HelloWorld(); // 创建内部类对象 Inner i = hello.new Inner(); // 调用内部类对象的方法 i.show(); } }
- Java 中的静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是:
静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
-
代码:
//外部类 public class HelloWorld { // 外部类中的静态变量score private static int score = 84; private int scoree = 23; // 创建静态内部类 public static class SInner { // 内部类中的变量score int score = 91; public void show() { // 只能访问score,不能访问scoree System.out.println("访问外部类中的score:" + HelloWorld.score ); System.out.println("访问内部类中的score:" + score); } } // 测试静态内部类 public static void main(String[] args) { // 直接创建内部类的对象 SInner si = new SInner(); // 调用show方法 si.show(); } }
继承
- 父类的private方法是无法被子类访问或覆盖的
- 创建一个子类对象时,程序内部执行顺序为:
- 父类属性初始化
- 父类构造方法(
super();
) - 子类属性初始化
- 子类构造方法
- super
- 子类的构造过程必须调用父类的构造方法
- 子类的构造方法中如果没有显示调用父类构造方法,则默认调用无参构造
- 显示调用父类构造方法必须在第一行
- 如果没有显示调用,而父类又没有无参构造方法,编译时则报错
Java中的final和static
- final
- 声明 final 字段有助于优化器作出更好的优化决定,因为如果编译器知道字段的值不会更改,那么它能安全地在寄存器中高速缓存该值。
- final 字段还通过让编译器强制该字段为只读来提供额外的安全级别。
- final可以修饰变量、方法及类;
- 当定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值,相当于一个常量,初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中,不能不赋值;
- 当修饰一个方法时,该方法在子类中将不能被重写;
- 当修饰一个类时,该类不能被继承。
- static
静态成员或类成员:它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。
静态方法或类方法:
-
静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
-
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
-
静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。
-
Java 中的 static 使用之静态初始化块
- 例子:
- 结果:
- 结论:
- 程序运行时,静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。
- 静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
- instanceof语句
- A instanceof B
- 用于判断对象A是不是B类型,进而判断是否可以装化。
- 抽象类abstract
- 应用场景:
- 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法
- 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类做为子类的模板,从而避免子类设计的随意性
- 作用:限制规定子类必须实现某些方法,但不关注实现细节
- 使用规则:
- abstract定义抽象类
- abstract定义抽象方法,只有声明,不需要实现
- 包含抽象方法的类是抽象类
- 抽象类中可以包含普通的方法,也可以没有抽象方法
- 抽象类不能直接创建,可以定义引用变量抽象方法没有方法体以分号结束
- 代码例子:
-
父类:
-
则子类为:(自动添加父类中的方法)
- 由例子可知可用于写模板