【学习笔记】Java笔记1:常见关键字

294 阅读3分钟

1. abstract

  • 修饰的方法叫抽象方法,修饰的类叫抽象类

  • 只有抽象类才能定义抽象方法

  • 抽象类的非抽象子类必须重写父类的抽象方法

  • 抽象类可以有属性和非抽象方法

  • 一个类只能继承(extends)一个抽象类

    私有属性和方法也是能继承到的,但是要通过其他方法来访问,不能直接调用

2. interface

  • 一种特殊的类,比抽象类更抽象,叫做接口
  • 接口的所有方法默认是public abstract的
  • 接口的所有属性默认是public static final的
  • 接口可以定义由default修饰的方法
  • 一个类可以实现(implements)多个接口
  • 接口中允许使用default和static来修饰方法,但不能同时修饰一个方法:使用default修饰,则实现类具有该方法;使用static修饰,则实现类不具有该方法,而是用接口.方法() 来调用

3. static

3.1 相关介绍

  • static可以修饰属性、方法、代码块和内部类

  • static修饰的属性叫静态属性。所有实例对象访问该属性时,访问到的都是同一个,例子如下

    public class Person  {
        public static int number = 18;
        public static void main(String[] args) {
            Person p1 = new Person();
            Person p2 = new Person();
            System.out.println(p1.number); // 输出18
            System.out.println(p2.number); // 输出18
            // 实际上一般用Person.number来访问
        }
    }
    
  • 静态属性的加载早于对象的创建,是随着类的加载而加载的,只会加载一次,保存在方法区的静态域中

  • static修饰的方法叫静态方法。在静态方法中,无法使用this和super关键字,也无法访问非静态属性

  • 静态方法常用于工具类的编写

3.2 经典例题

public class Father {
    static {
        System.out.println("父类静态代码块");
    }
​
    public Father() {
        System.out.println("父类构造器");
    }
}
public class Son extends Father {
    static {
        System.out.println("子类静态代码块");
    }
​
    public Son() {
        System.out.println("子类构造器");
    }
}
public class Test {
    public static void main(String[] args) {
        Son son = new Son(); // 创建子类时会默认调用父类的无参构造
    }
}
输出结果是:
父类静态代码块
子类静态代码块
父类构造器
子类构造器

完整的顺序是:父静态代码块、子静态代码块、父非静态代码块、父构造函数、子非静态代码块、子构造函数

注:静态代码块只会加载一次!

4. final

  • 该关键字理解为"最终"的意思
  • final可以修饰类、方法、属性、局部变量
  • final修饰的类不能被继承,比如String、System、StringBuffer
  • final修饰的方法不能被重写
  • final修饰的属性,可以赋值的位置有:显式地初始化、代码块中、构造器中。赋值后不能被修改

5. this

  • 该关键字理解为当前对象的
  • 可以调用属性、方法、构造器
  • 在类的方法中,使用"this.属性"和"this.方法"来调用当前对象的属性和方法,但一般省略this关键字。在一些特殊情况下,形参名和属性名相同时,要用this来区分,比如set方法
  • 使用this(形参列表...) 可以调用其他指定构造器
  • 在构造器中调用其他构造器,this()只能放在第一行

6. super

  • 该关键字理解为父类的
  • super可以调用属性、方法、构造器
  • 在子类的方法中,可以用过"super.属性"和"super.方法"显式调用父类的属性和方法
  • 可以在子类构造器中,可以显式使用super(形参列表...) 调用父类的指定构造器,也要放在第一行。如果不写也会默认调用super()
  • new一个子类只是创建了一个对象,虽然创建子类时会调用父类的构造器,但始终只创建过一个对象

7. 访问权限

publicprotected缺省private
当前类
同一个包
不同包的子类
同一个工程

(注:修饰类时只能是public或缺省)