目录
一、对象和类
1.类
-
类是一种抽象的数据类型
-
OOP(Object Oriented Programming)面向对象编程实际是分类型思想。将过程种出现的数据泛化称为类。
-
类的组成:属性和方法
-
main方法也属于类的方法
2.类的成员变量和方法总结
-
1.定义打印学生信息的方法,然后以name、age、score作为参数
-
2.name、age、score是属于学生类的,因此可以使用参数为Student student
-
3.打印学生信息的方法属于学生的行为,放在学生类中
-
4.使用Student类,采用new Student;方式
-
5.发现new Student();不能同时为同一个对象设置多个属性值
-
6.采用引用的概念,Student s = new Student();
-
7.通过引用打点的方式,访问定义在类中的属性和方法,--->s.name = "zhangsan",s.studentInfo();
-
8.类是一个数据类型
3.创建并使用对象
-
1.不同类型组成的抽象!数据类型!---类
-
2.类的组成有属性和方法
-
3.属性是成员变量,成员变量有默认的初始值
-
4.通过new关键字实例化对象
-
5.通过Person p = new Person();中引用P打点访问定义在类中的属性和方
-
6.引用数据类型:出了八大基本类型以外,其他所有的类型都为引用数据类型,且默认值为null
-
“在java中凡是以大驼峰命名法命名的,都为类。都为引用数据类型,且默认值都为null
-
7.引用存储的是对象的地址值,多个引用可以指向同一个对象
-
8.一个引用没有任何指向时,即引用的值为null时,再通过引用访问属性和方法会产生异常--空指针异常
二、方法
1.方法的重载
-
1.方法的唯一标识(方法的签名):方法名和参数列表
-
2.一个类中不能出现两个方法签名完全相同的方法
-
3.但是可以出现方法名相同,但参数列表不同的两个方法互相构成重载
2.构造方法
-
能够创建一个具备初始属性的对象
-
给对象属性进行初始化的
-
当没有显式的定义构造方法,系统会提供一个默认的无参构造
-
当显式的写出了一个任意的构造方法,系统就不默认提供无参构造了
-
构造方法的重载,提供初始化的属性不一致
3.this关键字
区分属性和参数
-
为了增加代码的可读性,构造方法的参数名字和属性名应保持一致,
-
为了区分构造方法的参数和属性同名问题,所以使用this
-
this;指当前对象,谁调用了属性或者方法,this就指谁!!!
三、数组
-
1.引用类型数组的概念:除了基本类型的其他类型数组,都能叫做引用类型数组
-
2.数组是对象,数组的元素可以看成对象的成员变量
-
3.数组的引用存储的是数组的对象的地址值
-
4.对应引用类型数组,数组元素存储的是对象的地址,而不是对象本身“数组持有对象的引用”
-
5.person[0]\person[1]\person[2]等价于Person p =new Person()中的P,没有区别
-
6.二维数组----数组的元素为基本类型数组
四、堆、栈、方法区
1.堆
-
当一个引用值为null时,该对象没有任何引用指向,则该对象被视为废弃对象,属于被回收(GC线 程)范围。
-
成员变量的生命周期: 从对象在堆中创建,到对象从堆中被回收为止。
2.栈
-
生命周期: 栈帧被创建开始-方法执行完毕栈帧被销毁结束,局部变量也随之销毁。
-
栈帧中存储的是: 局部变量和参数等。
3.方法区
-
当类的信息加载到方法区时,类中的类方法的定义也被加载在方法区中。
-
无论创建多少对象,所有的对象是公用方法区中一个方法的定义。
-
独有一份
五、继承
1.继承
-
通过extends关键字可以实现继承
-
子类可以通过继承获取父类的属性和方法,也可以定义自己独有的属性和方法。
-
继承单一性: 一个子类只能有一个父类(1个儿子只能有一个爸爸),但一个父类可以有多个子类。
-
继承: 子类继承父类--->代码的复用性
-
1.主要作用: 子类可以通过继承获取父类的属性和方法
-
2.特性:单一继承性,一个子类只能有一个父类
1.继承的格式
格式: class Son extents Father extends:关键字
2.继承总结
-
1.在继承关系中,执行子类的构造方法时,会先执行父类的无参构造方法,如果父类没有无参构造方法就会出现编译错误
-
2.super关键字:指代父类对象 super();表示执行了父类的无参构造方法; super(参数):表示执行了父类的对应参数构造方法
-
3.在继承结构中,编译器会默认在子类的构造方法中第一行,加一个super(), 因此会在执行子类的构造方法时,先去执行父类的无参构造方法
-
4.当我们显式的写出了任意的super(),那么编译器不会再提供super()
-
5.super()必须放在构造方法的第一行
-
6.可以用super()调用父类的方法,表示父类引用
2.重写
-
子类可以重写(覆盖)父类中定义的方法,即方法名和参数列表与父类方法相同,但方法体不同
-
当子类对象重写的方法被调用时,无论引用是父类还是子类都执行重写后的方法。
3.重写与重载的区别
-
重载
- 发生在编译期
- 方法名相同,但参数列表不同
- 调用时根据方法名和参数列表去判断
-
重写
- 发生在运行期
- 前提是: 存在继承关系时,子类重写的方法与父类完全一致
- 调用时根据引用指向的对象类型去判断
六、访问修饰符
1.访问修饰符修饰成员
-
public 修饰的成员可以在任意类访问,意义:对外提供可以被调用的功能。
-
private 修饰的成员只能在本类中使用,意义 : 对内的封装,减少维护成本。
-
默认的(不写) 的成员可以在本类和同一个包中的类访问。
-
protected修饰成员 可以在本类、同一个包中的类及其他包中子类访问。
2.访问修饰符修饰类
-
类的修饰 :public 和 默认的
- 一个Java文件中只能有一个public修饰的类
- 类的修饰词只有 : final 、abstract 、 public 、默认的
-
内部类的修饰可以使用任意修饰词
七、封装
将属性私有化,提供供外部访问的公共接口set和get方法
-
私有化的目的: 对数据进行隐藏
-
set和get方法目的: 对外提供操作数据的公共 “接口“ IDE可以自动生成
八、static与final关键字
1.static
-
static修饰的成员可以直接使用类名调用;类名.属性/方法
-
static修饰的成员变量不再属于对象,而用于描述类!
-
static修饰的成员存储在方法区中,且独有一份。
-
static方法不能调用非static成员
-
static成员会在类加载期间加载
2.final
-
final修饰类不能被继承
-
final修饰变量不能被改变,当修饰的是引用对象时,引用的地址不能变,但值可以变
-
final修饰方法不能被重写
-
static final修饰的量为常量,且使用全大写,_分割的形式命名
-
编译时常量会直接替换为具体的值
-
对于public static final 三个修饰的次序是无关紧要的:public static final
九、抽象类与抽象方法
1.什么是抽象方法?
- 没有方法体的方法,称为抽象方法
-不需要实现功能,只需要给出定义的方法
2.什么是抽象类?
-由abstract修饰的类,有抽象方法的类就是抽象类
- 有抽象方法的类,一定是抽象类
- 抽象类可以有非抽象方法
-一个类没有抽象方法也可以修饰为抽象类
- 抽象类不能被实例化
3.怎么去使用抽象类?
- 通过继承关系实现定义在抽象类中的所有抽象方法
4.抽象类继承关系
-一个抽象类可以继承另一个抽象类
-子类必须实现所有继承关系中没有被实现的方法
5.为了避免矛盾,final不能和abstract同时修饰同一个类
十、接口
1.定义
Interfaces包中建立一个接口Shape
- 用interface修饰的为接口
- 接口中的方法没有方法体---->默认为public abstrace修饰
- 接口是一种特殊的抽象类,它的功能性更加“纯粹”
- 接口中的属性都为常量,默认为public static final修饰
- 接口不能实例化
2.实现
-
通过实现类采用implement关键字实现定义在接口中的方法
-
实现类实现接口时必须实现接口中定义的所有方法
-
接口与接口之间存在继承关系,同样实现类在实现时必须实现其所有关系中的方法
-
一个实现类可以实现多个接口
3.接口的继承
-
接口之间可以有继承关系,但实现类实现某一接口时,必须实现所有继承关系中的抽象方法。
-
一个类可以实现多个接口,同样也必须实现多个接口中定义的抽象方法
4.接口与抽象类的区别
1.相同点:
-
(1)都不能被实例化
-
(2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
2.不同点:
-
(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
-
(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
-
(3)接口强调特定功能的实现,而抽象类强调所属关系。
-
(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量°默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static.synchronized和native等修饰,必须以分号结尾,不带花括号。
十一、多态
1.多态的意义
-
面向对象的三大特征: 1.封装:属性私有化,提供公共的set和get方法 2.继承:子类继承父类,子类获取父类的属性和方法 3.多态:一种事物的不同表现,java多样性
-
同一种事物的不同状态
-
表现形式 --不同的引用指向同一对象 --相同引用指向不同对象
2.向上造型的前提
--具备继承关系 ------>子类对象造型成为父类类型 --具备接口的实现关系 ------>实现类对象造型成为接口类型
3.向下造型的前提
--必须实际写出继承关系 --必须显示的写出接口的继承关系 注意:向下造型是建立在向上造型的基础上的
4.instanceof关键字
判断某个引用对象是否为指定类
十二、内部类
一、内部类
当一个类定义在另一个类的内部,称为内部类,供外部类去访问
内部类(Inner)只服务于外部类,可以获取外部类的属性和方法
定义内部类对象时,一般通过外部类的构造方法或普通方法创建对象、