1.面向对象的三大特性:封装,多态,继承
2.类和对象
对象:内存空间的一块储存区域
类:一种引用数据类型对具有相同特征和行为的多个对象的抽象描述(构建对象的模版,对象的数据结构由类决定)
2.1类的定义:
类名的每个首字母大写;
类的成员变量第二个单词的首字母大写;
类的成员方法第二个单词的首字母大写。
class Person{
int personAge = 0;
}
2.2引用的定义
使用引用数据类型(数组和类)的变量为引用型变量,且引用变量主要用于记录对象在堆区中的内存地址信息。
2.3成员变量的初始值
基本数据类型存在初始默认值:0;0.0;false
引用数据类型则为:null
2.4成员方法
方法的调用会在栈中分配对应的空间(栈帧),储存的方法的参数,局部变量等。调用完毕则栈帧清除。
实参和形参:实际参数列表用于对形式参数列表进行初始化操作
可变长参数:(参数类型 参数名1................)
方法传参过程:形参与实参均分配空间,将实参内容赋值给形参(基本数据类型传递值,引用数据类型则传递地址),方法结束后相关变量(形参)空间释放。
参数传递重点:
基本数据类型作为参数传递时,形参的改变不影响实参的内容(两个变量有独立的空间)
引用数据类型作为参数传递时,形参的改变影响实参的内容(两个变量指向同一块内存空间)
3.构造方法
class Person{
Person(){}
}
方法名与类名相同且无返回值
3.1方法重载:一个方法有多重实现方式
方法名称和返回值相同但参数列表不同
3.2 this 关键字:当前类型的引用变量,既可以调用成员变量和方法也可以作为方法的返回值。
4.封装
私有化成员变量(private);公有化get set方法(进行合理值判断);构造方法调用set方法进行判断
5.static关键字
将成员变量或方法由对象层级提升为类层级,被所有对象共享。
静态成员方法不能访问非静态成员。
6.构造块和静态代码块
构造块:类中{} 随着对象的创建而执行
静态代码块 类中 static{} 随着类的加载而执行(与创建对象无关)
7.单例设计模式:一个类对外只提供一个对象
饿汉式:核心思想为将singleton对象的创建在该类中创建且只创建了仅一个。
<1.私有化构造方法使得不能随意在该类之外能创建该对象
<2.使用 private static 修饰 该类类型的引用并将该引用指向该类类型的对象,使得static修饰由成员级提升到类级且创建的对象为共用的同一个(地址相同)。
<3.使用公有化get方法将对象返回出去,使用public static 修饰。public修饰表示外部可以调用 static修饰表示可通过类名进行调用该方法。
class Singleton{
private Singleton{};
private static Sington sin = new Singleton();
pubilc static Sington get(){ return sin;}
}
调用:Sington sin1 = Sington.get();无论调用多少次都是同一个
8.继承
概念:将多个类之间的相同特征和行为提取出来组成的公共类,多个类吸收公共类的特征并编写自己独有的特征行为。提升了代码的复用性扩展性和可维护性是多态的前提。
关键字:extends
特点:不能继承父类的构造方法和私有方法,但可通过父类的公有方法获得父类的私有成员变量。子类构造对象时会自动调用父类的无参构造来初始化父类的成员变量。
9.方法的重写
子类重写从父类继承来的方法:方法名,参数列表,返回值类型相同,访问权限不能变小,抛出异常不能更大。
10.子类父类的构造块和静态代码块
父类的静态代码块—>子类的静态代码块 —> 父类的构造块 —> 父类构造方法 —> 子类的构造块 —>子类构造方法
11访问控制符
12.final关键字
修饰类,成员方法,成员变量
类(不能被继承)
成员方法(可以被继承不能被重写),
成员变量(必须初始化且不能改变)
13 多态
父类引用指向子类对象(为了避免不同子类之间的差异性带来的通用编程的不同效果)
父类类型 引用变量名 = new 子类类型();
特点:
独有方法:只能调用父类的(可通过强转调用子类的)
静态方法:编译运行都是父类
非静态方法:编译阶段调用父类,运行阶段调用子类
14 抽象类
不能实例化 意义在于被继承 存在抽象方法 被abstract修饰的类
抽象方法:不能具体实现 被abstract修饰
继承抽象类后必须重写抽象方法
15 接口
比抽象类还抽象
关键字:interface
类与类:extends 单继承
类与接口:implements 多实现
接口与接口:extends 多继承
16 接口和抽象类的区别(笔试考点)
定义:抽象类为 abstract class 接口为 interface
实现接口为 implements 继承抽象类为 extends
抽象类为单继承而接口为多实现
抽象类可以有构造方法接口不能
抽象类可以有成员变量但接口只能有常量
抽象类可以有成员方法而接口只能有抽象方法
抽象类中的增加方法子类不用重写 接口增加方法实现类必须重写
Java8开始接口允许出现非抽象方法(default修饰)和静态方法
Java9开始接口允许出现私有方法。
17.内部类:当一个类的定义出现在另外一个类的类体中时
普通内部类,静态内部类,方法内部类,匿名内部类(重)
17.1当接口/类类型引用作为方法的形参时,可采用匿名内部类语法格式得到该引用。
接口 引用变量名 = new 接口 (){方法的重写};
18.枚举
enum关键字修饰(取代常量 public static final) 一种引用数据类型
19.注解
一种引用数据类型,代码中的特殊标记,可以在编译,类加载以及运行时执行指定的处理。