第一节

1.1 类中的成分研究

类中有且仅有五大成分:

  • 成员变量(Field:描述类和对象的属性信息)
  • 成员方法(Method:描述类或者对象的行为信息)
  • 构造器(Constructor:初始化一个类的对象并返回引用)
  • 代码块
  • 内部类

1.2 this关键字

this关键字:

  • this代表了当前对象的引用
  • this关键字可以用在实例方法和构造器中
  • this用在方法中,谁调用这个方法,this就代表谁
  • this用在构造器中,代表了构造器正在初始化的那个对象的引用

1.3 static关键字

Java是通过成员变量是否有static修饰来区分是属于类的还是属于实例对象

成员变量:

  • 静态成员变量:用static修饰的成员变量,属于类本身,直接用类名访问
  • 实例成员变量:无static修饰的成员变量,属于每个对象,必须使用类的对象来访问

成员方法:

  • 静态方法:用static修饰的成员方法,属于类本身,直接用类名访问
  • 实例方法:无static修饰的成员方法,属于实例对象,必须使用类的对象来访问

语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。

1.4 继承

子类继承了父类,子类就得到了父类的属性和行为。但是并发所有父类的属性和行为等子类都可以继承

子类不能继承的:子类不能继承父类的构造器;子类有自己的构造器(没有争议)

存在争议的观点

  • 子类是否可以继承父类的私有成员(私有成员变量,私有成员方法)

​ —子类继承了父类的私有成员,但是直接无法访问(可通过反射访问)

  • 子类是否可以继承父类的静态成员

​ —子类不能继承父类的静态成员,子类可以访问,但是静态成员属于父类,只初始化一份不属于子类

子类重写父类方法,可以通过super关键字调用到父类的方法

静态方法私有方法都不可重写

继承后构造器的特点

  • 子类的构造器(无参,有参都一样)默认一定先访问父类无参构造器,再执行子类构造器

​ 可以使用super();显示调用父类无参构造 super(arg…)调用有参构造

总结:this和super关键字使用

this代表当前对象的引用(继承中指代子类对象):

  • this.子类成员变量
  • this.子类成员方法
  • this(…):可根据参数匹配访问本类其他构造器

super代表了父类对象的引用(继承中指代了父类对象空间):

  • super.子类成员变量
  • super.子类成员方法
  • super(…):可根据参数匹配访问父类其他构造器

注意:

this(…)借用本类构造器

super(…)调用父类的构造器

this(…)和super(…)必须放在构造器的第一行,否则报错

第二节

2.1 抽象类

一个类继承了抽象类必须实现全部抽象方法,否则这个类也必须定义为抽象类

抽象类必须存在构造器,提供给子类创建对象使用

抽象类除了不可以创建对象实例之外,除此之外类有的五大成分,抽象类都具备

抽象类存在的意义

  • 抽象类就算为了被子类继承
  • 抽象类实现的是模板思想,部分实现,部分抽象(提高代码复用率),可以设计模板设计模式

2.2 接口

在JDK1.8之前接口中只能是抽象方法和常量

public abstract默认省略,public static final默认省略

常量变量名称建议字母全部大写,多个单词用“_”连接

JDK1.8开始之后接口新增三个方法(了解即可):

(1)默认方法:其实就是实例方法 —必须使用defualt修饰 默认存在public修饰

(2)静态方法:—可以直接加static修饰 默认存在public修饰

(3)私有方法:private修饰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
inteface Sport{
//只能用接口的实现类对象来调用
default void run(){
me();
}
//接口中的静态方法只能,接口的类名调用
static void inAddr(){

}
//私有方法,通常是给私有方法或者默认方法调用的
private void me(){

}
}

类与接口直接的关系:

  • 类与类是单继承关系
  • 类与接口是多实现关系
  • 接口与接口是多继承关系

2.3 代码块

类存在五大成分:成员变量,成员方法,构造器,代码块,内部类

代码块根据有无static分为实例代码块和静态代码块

  • 静态代码块(重点):

​ 格式:static{

​ }

​ —必须使用static修饰。属于类,会和类一起加载,而且自动触发执行一次,优先执行

​ —静态代码块可以用于在执行类的方法之前进行静态资源的初始化操作

  • 实例代码块(了解):

​ 格式:{ }

​ —无static修饰。属于类的每个对象,会和类的每个对象一起加载,每次创建对象实例代码块就会执行一次

​ —实例代码块可以用于初始化实例资源

2.4 final关键字

final是最终的意思,可以用于修饰类,方法,变量

(1)final修饰类:类不能被继承了。

(2)final修饰方法:方法不能被重写

abstractfinal不能同时使用,抽象方法必须重写,抽象类不能实例化,如果不可继承就没有意义

(3)final修饰变量:变量有且仅能被赋值一次

  • final修饰局部变量:让值被固定保护,防止执行的过程中被修改
1
2
3
4
5
6
7
8
9
10
class Demo{
public static void main(String[] args){
final int age = 10;
buy(0.5);
}

public static void buy(final double rate){
rate = 0.6; //报错不能修改,让值被固定保护,防止执行的过程中被修改
}
}
  • final修饰静态变量可以在哪些地方赋值:

    1.定义的时候赋值

    2.在静态代码块中赋值