目录
多态:一种是编译时多态,即重载;另外一种是运行时多态,即覆盖。
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
final关键字:修饰程序中的多种元素,包括类、方法、属性和局部变量
面向对象基础
构造方法:能够初始化对象属性的特殊方法
特点:
- 方法名与类相同
- 不含返回值类型声明,void也不允许存在,否则退化为一般方法
- 不能在方法中用return语句返回一个值
- 默认情况下,将所有的属性的值初始化为默认值
- 如果程序员在开发过程中未提供任何构造器,那么系统将提供一个默认的无参构造器。
- 一般访问权限为public
- 只有在实例化对象时才使用
与普通方法的区别:
- 作用不同 构造方法是为了创建一个类的实例。这个过程只可以在创建一个对象的时候用到。普通方法的作用是为了完成一段业务功能。
- 修饰符不同 和普通方法一样,构造方法可以有任何访问的修饰:public,protected,private或者没有修饰。不同于普通方法的是,构造方法不能有以下非访问性质的修饰:abstract,final, native,static或者synchronized。
- 返回值不同 返回类型也是非常重要的。普通方法能返回任何类型的值或者无返回值(void),构造方法没有返回值,也不需要void。
- 命名不同 构造方法使用和类相同的名字,而普通方法则不同。按照习惯,普通方法通常用小写字母开始,而构造方法通常用大写字母开始。构造方法通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作
内存模型
栈stack:栈的存取速度比堆快,效率高。在栈内保存基本数据类型的局部变量和对象的引用值。
堆heap:堆可以保存那些对空间要求较大的变量。如对象的属性和数组的元素。没有任何引用指向该对象,对象就变成垃圾失效。
匿名对象:不定义对象的句柄,而直接调用这个对象的方法
特点:只进行一次方法调用,然后被立即回收机制删除。
变量的作用域
局部变量:定义在方法体中的变量;或是方法的形参。只在方法调用的过程中有效,方法调用结束后失效。无初始值。
实例变量:即类的属性,也是类内的全局变量,在类的整个生命周期中都有效。有初始值。
静态变量:在类中声明为static 的属性,在类被载入时创建,只要类存在,static变量就存在。有初始值。
默认值:boolean -false、char -'/u0000'(null)、byte -(byte)0、short -(short)0、
int -0、long -0L、float -0.0f、double -0.0d
this关键字
- this关键字代表对象自身的引用,它是一个引用,指向调用该方法的当前对象。(当方法中的参数与某个实例变量有相同的名字时,这时局部变量(参数)优先(就近原则),实例变量被隐藏)。
- 构造方法的this指向同一个类中不同参数列表的另外一个构造方法。参数,决定了调用哪个构造方法。
- 必须放在第一行
- 不能与super同时出现
super关键字
- super([参数列表])的作用是调用父类的构造方法
- 只能出现在子类的构造方法中,且必须是第一行
- 其中的参数,决定了调用父类哪个构造方法。
- 不能与this同时出现
super:关键字super的作用是指向父类的引用。
this:关键字this的作用是指向本类的引用。
面向对象特性
继承
1.规则:每个类只能有一个直接父类;一个父类可以有多个子类。
2.语法:public class 子类 extends 父类 {
//子类类体
}
3.特点:
- 子类可以得到父类的属性和方法
- 子类可以添加新的属性和方法
- 虽然子类继承了父类所有的资源,但是其访问时会受到访问修饰符的限制;
- 子类可以重新定义父类的属性和方法
4.子类实例化过程:子类实例化时先实例化其父类,然后实例化子类。要先调用父类的构造方法,父类构造方法运行完毕,才调用子类的构造方法。如果子类的构造方法中没有调用父类的构造方法,则编译器会默认在子类的构造方法中的第一句加上super( )来调用父类的默认无参构造方法。
包的概念
- 包的作用:
- 类似于文件夹,一个包中包括多个类,和其它子包。
- 有助于避免类的命名冲突,一个类的全名= 包名.类名
- 包允许在更广的范围内保护类、数据和方法
- 包可以是类、接口和子包的集合
- 包的规则:
- 在java中位于包中的类,在文件系统中的存放位置,必须有与包名层次相对应的
-
目录结构;
- package语句作为java源文件的第一条语句;
- 每个源文件只能声明一个包;
- 如果没有package语句,则默认为无名包。
- 常用包
- java.lang:Java编程语言的基本类库
- java.awt:提供了创建用户界面以及绘制和管理图形、图像的类
- javax.swing: 提供了一系列轻量级的用户界面组件,是目前Java用户界面常用的包
- java.awt.event:图形用户界面事件处理包
- java.sql:提供了访问和处理来自于Java标准数据源(通常是一个关系型数据库)数据的类
- java.io:提供了通过数据流、对象序列以及文件系统实现的系统输入、输出
- java.util:包括集合类、时间处理模式、日期时间工具等各类常用工具包
- java.net:提供了用于实现网络通讯应用的所有类
封装:使用访问权限修饰符对类的成员进行控制
- 优点
- 让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
- 便于修改,增强代码的可维护性
- 可进行数据检查
- 访问权限修饰符:public(公开)> protected(受保护的,同包、子类) > default(默认,同包)> private(私有,同类)
- 覆盖:子类将从父类中继承下来的方法重新实现,叫做覆盖(Overriding)或重写(rewrite)。
- 特点:
- 在子父类之间
- 相同的方法名
- 相同的参数列表(参数数量、参数类型、参数顺序都要相同)
- 相同的返回值类型,否则是语法错误
- 子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限 ,否则是语法错误
- 特点:
引用数据类型转换
- 上塑造行:向上转型(Upcasting)是指子类转换为父类,自动转换
- 前提:具有继承关系或实现关系
- 特点:
- 损失了子类新扩展的属性和方法,仅可以使用从父类中继承的属性和方法
-
当父类引用指向子类对象时,是最终的指向类型而不是声明类型决定了调用谁的成员方法(必须是子类覆盖的方法)
-
例如:
父类和子类均有一个成员变量i最后拿到的是父类的i
父类和子类均有一个say方法,最后执行的是子类的方法(say方法重写)
- 下塑造型:向下转型(Downcasting)是将父类对象显式的转换成子类类型,强制转换
- 前提:曾经向上转换过(否则类造型异常:ClassCastException)
- 特点:对象不允许经过上溯造型而直接下溯造型
- 前提:曾经向上转换过(否则类造型异常:ClassCastException)
- instanceof运算符:用来判断一个类是否实现了某个接口和一个实例对象是否属于一个类,返回值类型都是布尔类型
多态:一种是编译时多态,即重载;另外一种是运行时多态,即覆盖。
- 必要条件
- 有继承,或者实现
- 要有重写
- 父类引用指向子类对象
静态
- static关键字:可以修饰属性、代码块、方法;只能修饰类变量,不能修饰局部变量
- 静态变量:static修饰的变量,也称为类变量。
- 特点:
- 类创建时载入,类存在,静态变量就存在
- 两种访问形式:直接访问——类名.属性;实例化后访问:对象名.属性
- 特点:
- 静态方法:static修饰的方法,也称为类方法。
- 特点:
- 静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员
- 两种访问形式:直接访问:类名.方法名;实例化后访问:对象名.方法名
- 静态方法中不能使用this、super关键字
- 静态方法不能被非静态方法覆盖,static不能修饰构造方法
- 特点:
- 静态代码块:一个类中由static关键字修饰的,不包含在任何方法体中的代码块,当类被载入时,静态代码块被执行,且只被执行一次,用来进行类属性的初始化
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
- 特点:
- 某个类只能有一个实例
- 它必须自行创建这个实例
- 必须自行向整个系统提供这个实例
- 要求:
- 拥有一个私有构造方法
- 提供一个自身静态私有的成员变量
- 提供一个公有的静态方法
final关键字:修饰程序中的多种元素,包括类、方法、属性和局部变量
- 作用:
- final修饰类:使用final修饰的类不能被继承。
- final修饰变量:使用final修饰的变量(属性和局部变量)不能被重新赋值,在声明时赋值,或在构造方法中赋值,系统不会对final属性默认的赋初始值。
- final修饰方法:使用final修饰的方法不能在子类中被覆盖,即不能修改。
- 规范:
- 多个实例共享该常量,没有必要每个对象保存一份;
- 其次,设置为final类型,赋值以后不能再改变;
- 最后注意遵守常量命名规范,所有字母大写、单词之间用下划线。
抽象类:不能够直接实例化的类
- 特点:
- 修饰抽象类的修饰符有public和默认修饰符两种;
- 抽象类中可以有抽象方法,也可以有非抽象的方法;
- 抽象方法是无方法体的方法。
- 定义抽象类时,要在关键字class的前面添加abstract。
- 注意
- 抽象类不能被实例化;
- 其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;
- 抽象方法不能为static;
- 在下列情况下,一个类必须声明为抽象类:
- 当一个类的一个或多个方法是抽象方法时;
- 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
- 当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;
接口:描述类对外提供功能规范的、能够多继承的、特殊的抽象类
- 特点:
- 修饰接口的修饰符只有public和默认修饰符两种;
- 2.接口可以是多继承,接口只能继承接口,不能继承类;
- 3.属性必须是常量(有初值),方法必须是抽象的(无方法体)。