1. 面向对象特征
-
封装:隐藏对象的实现细节,对外提供公共的访问方式
- 优点:隐藏细节,提高复用性与安全性
- 权限修饰符:
private(类)、default(包)、protected(子类)、public(公共) - 对象属性私有,提供
get、set方法,提供默认构造方法
-
继承(
extends):提高了代码的复用性与维护性,增强了耦合性;Java只支持单继承;子类可继承父类的所有成员,但不能访问私有成员;构造方法不能继承 -
多态:事物的多种形态;提高了维护性和扩展性
- 前提:继承关系、方法重写、父类引用指向子类对象
- 方法重写:子父类中出现相同的方法,且返回值也相同或为子类
- 父类的私有方法不能被重写
- 子类重写方法的访问权限不能低于父类方法
- 静态方法属于类,故不算重写,但也可以用子类中的同名静态方法覆盖
- 成员变量、成员方法、静态方法在多态时编译根据父类
- 成员方法在多态时运行根据子类,称为动态绑定,其余成员根据父类
- 向上转型:父类引用指向子类对象
- 向下转型:将向上转型的对象强制转回子类类型
- 父类可作为方法参数接受子类对象,但多态时父类不能使用子类特有的属性和方法
-
类:一组相关属性和行为的集合
-
对象:某类事物的具体体现
-
成员变量:在类中方法外定义,存放在堆内存中,随对象存在,有默认初始化值
-
局部变量:在类中方法中定义,存放在堆内存中,随方法存在,没有默认初始化值
-
类成员:使用
static修饰,随类加载,优先于对象存在,被所有对象共享,可通过类名或对象名调用static方法只能访问静态成员或静态方法,且不能使用this关键字- 若类中所有方法都是静态的,则可将构造方法权限设为
private
-
构造方法:没有返回值类型,方法名与类名相同;用于对象属性的初始化,创建对象是自动调用;没有写构造方法时系统默认提供无参构造方法;接口没有构造方法
this()、super()可以调用本类或父类的构造方法,必须在构造方法的第一句- 子类中的构造方法默认都会访问父类的空参构造方法,相当于
super()
2. 代码块
- 局部代码块:位于方法中,用于限制变量的生命周期
- 构造代码块:位于类中方法外,在调用构造方法之前执行,可用于存放构造方法中的相同代码
- 静态代码块:位于类中方法外,用
static修饰,在类加载时执行,用于初始化类或加载驱动
3. final关键字
-
final修饰的类不能被继承 -
final修饰的变量为常量,只能被赋值一次;通常搭配public static final -
final修饰的方法不能被重写 -
final修饰的成员变量在构造完毕之前必须赋值,类似局部变量没有默认初始值 -
instanceof关键字:用于判断对象类型,返回true或false 用法:
object instanceof class
4. abstract关键字
- 用于修饰抽象类或抽象方法,被修饰的抽象类不能被实例化
- 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或接口
- 抽象类的子类如果不是抽象类,则必须重写抽象类的所有抽象方法
abstract不能修饰成员变量static、final、private不能与abstract共用
5. interface关键字
-
用于修饰接口,接口内的方法都是抽象方法,接口没有构造方法
注:JDK1.8的接口可以有普通方法,用
default与static修饰 -
实现接口使用
implements关键字,可同时实现多个接口,实现类默认继承自Object -
接口的成员变量默认修饰符为
public static final,故为常量 -
接口的成员方法默认修饰符为
public abstract -
接口之间可以多继承
-
一个类可以继承另一个类同时实现多个接口
6. package关键字
- 用于定义包;包名通常为域名倒写,如:
org.apache.demo package必须为第一条可执行语句,且在一个java文件中只能有一个- 编译带包名的类:
javac -d . filename.java - 运行时需要加上包名:
java org.apache.demo.ClassName - 使用不同包的类需要使用全名或先导入:
import org.apache.demo.ClassName; java.lang包里的类不用导入也可以使用
7. 内部类
- 类中定义的类称为内部类,内部类可以直接访问外部内的成员
- 内部类对象创建:
Outer.Inner obj = new Outer().new Inner(); - 静态内部类对象创建:
Outer.Inner obj = new Outer.Inner(); - 访问静态内部类的静态方法:
Outer.Inner.method(); - 内部类中访问外部类同名成员变量:
Outer.this.num; - 内部类中访问内部类同名成员变量:
this.num; - 局部内部类:在方法内定义的类,在方法外不能访问;局部内部类中访问方法的局部变量时,局部变量需要用
final修饰(JDK1.8可省略,final修饰的变量存放在常量池),用于改变局部变量的生命周期 - 匿名内部类:特殊的局部内部类
- 语法:
new ClassName(){}; - 表示实现接口或继承类,并创建子类对象
- 可重写父类的方法
- 没有类名,故不能向下转型
- 匿名内部类可当作参数传递该方法;事件监听、多线程中被广泛使用
- 语法:
- 链式编程:调用方法后还可以继续调用其它方法,则该方法返回的是一个对象