目录
1. 面向对象初级
1.1 面向对象思想
是计算机编程技术发展到一定程度的产物,是相对于面向过程来讲的,面向过程到面向对象是程序员思想上从执行者到指挥者的转变。
在Java中万物皆对象。
三大思想
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象程序
三大特性
封装性:所有的内容对外部不可见
继承性:将其他功能继承下来继续发展
多态性:方法的重载本身就是一种多台的体现
1.2 类与对象
类是一个共性的产物,是一个综合的特征,对象是一个个性的产物是一个个体的特征,类似于图纸与实物的概念
类必须通过对象去使用,对象的所有操作都在类中定义
格式:class 类名称{
成员属性
成员方法
}
属性和方法
属性格式:数据类型 属性名
属性定义并赋值格式:数据类型 属性名 = 初始化值
方法定义格式
权限修饰符 返回值类型 方法名(形式参数列表){
//方法体
return 返回值;
}
对象创建与使用
对象定义格式:类名称 对象名称 = new类名称()
访问类中的属性:对象.属性;
访问类中的方法:对象.方法(实际参数列表);
1.3 创建对象内存分析
栈:存取速度快,先进后出
存储的是:基本数据类型和引用数据类型的引用
堆:存放类的对象
所有类的对象new一个新对象的时候就会开辟一块新的堆内存
方法区(存放)
类信息
静态变量
常量
成员方法
常量池(用static修饰)
PC寄存器
保存的是当前正在执行JVM指令的地址
每个线程启动时,就会创建一个PC寄存器
本地方法栈
保存本地方法(native)的地址
1.4 构造方法
作用:用于初始化对象
在对象创建时自动调用,所有的java类中至少存在一个构造方法
定义格式
方法名与类名相同,没有返回值类型的声明
构造方法设计
无参构造方法建议自定义
类中都是非常量,0议定义一个全参构造方法一个无参构造方法,其余的使用到再加
类中都是常量无变量时,建议不写
1.5 方法重载
方法名称相同,参数类型或参数长度不同
与返回值无关
1.6 构造方法的重载
参数列表的长度或类型不同
1.7 匿名对象
没有对象名称的对象
只能使用一次,任何被GC当做垃圾回收
2. 面向对象进阶
2.1 private(封装)
在开发中为了避免逻辑错误,建议对属性进行封装,提供get和set方法进行取得和设置操作
2.2 this
调用类中的属性
调用类中的方法或者构造方法(在一个构造方法中调用另一个构造方法是,调用的代码,必须编写在构造方法的第一行)
表示当前对象
2.3 static(静态的)
用来修饰成员变量和成员方法
被static修饰的方法或变量不会因为对象的多次创建而产生多份数据
静态成员 在类加载时加载并初始化
在访问时:静态资源不能访问非静态资源,非静态资源可以访问静态资源
2.4 代码块
普通代码块
在执行流程中 出现的代码块
构造代码块
在类中的成员代码块,就是构造代码块,在每此对象创建时执行,执行在构造方法之前
静态代码块
用static修饰的成员代码块,在类加载时执行,程序从启动到关闭,只会执行一次的代码块
2.5 包
介绍:
把功能相似或相关的类或接口放在同一包中,方便类的查找和使用
包和文件夹一样,不同的包的类名可以相同,包可以避免名字冲突
包也限定了访问权限,拥有包的访问权限的类才能访问包中的类
通常由多个单词组成, 所有单词的字母小写, 单词与单词之间使用.隔开 ,一般命名为“com.公司名.项目名.模块名....”
import关键字用来做导包操作
2.6 main方法详解
public:表示公有的,可以被所有操作所调用
static:静态的,可以由类名直接调用
void:没有返回值的
main:系统规定好的方法名称
String[] args:字符串数组,接收参数
2.7 单例设计模式
保证一个类只有一个实例,实现方法:构造方法私有化
必须要自己创建这个实例,实现方法:在本类中维护一个本类对象(私有,静态)
必须向整个程序提供整个实例,实现方法:提供公共的访问方式(getInstance方法,静态)
3. 面向对象高级
3.1 抽象类
概念:必须使用abstract class声明,一个类可以没有抽象发布方法,但是抽象方法必须在抽象类或者接口中
抽象方法:只声明而未实现的发布方法,必须使用abstract关键字声明
原则:抽象类本身不能被实例化,也就是不能new一个抽象对象,它必须被子类继承,且被继承的子类必须重写它所有的抽象方法
抽象类必须使用public或protected修饰
3.2 接口
概念:一个类中的方法都是抽象方法属性都是全局常量,那么这个类可以定义为一个接口
格式:interface 接口名称{
全局常量;
抽象方法;
}
全局常量编写时可以省略public static final
例如可以直接写成String info = “内容”
抽象方法编写时可以省略public abstract
例如 void print()
面向对象的编程思想:定义与现实分离
优点
降低程序耦合性
易于程序的扩展
有利于程序的维护
接口继承(extends)
接口允许多继承
接口和抽象类的区别
抽象类要被子类继续,接口要被子类实现
接口只能声明抽象方法,抽象类中可以声明抽象方法也可以写非抽象方法
接口定义的变量只能是公共的静态的的常量,抽象方法的变量是普通变量
抽象类使用继承来使用,无法多继承,接口使用实现来使用,可以多实现
抽象类可以包含static方法,接口不允许(静态方法不能被子类重写)
接口不能有构造方法,抽象类可以
3.3 多态
概念:就是对象的多种表现形式
体现形式:类中的子父之分,子类就是父类的一种形态,重写和重载也是多态的一种(方法的多态)
重写:子父中方法的多态性体现
重载:一个类中方法的多态性体现
多态的使用:对象的类型转换
向上转:将子类实例变为父类实例
格式:父类 父类对象 = 子类实例
向下转:将父类实例转为子类实例
格式:子类 子类对象 = (子类)父类实例
3.4 instanceof
作用:判断某个对象是否指定类的实例
格式:实例化对象 instanceof 类 //返回boolean类型的数据
3.5 Object类
概念:是所有类的父类,如果类中没有明确继承某个具体的类则默认继承Object类 默认可以不写
Object的多态
Object可以接收任意的应用数据类型
toString
建议重写Object的toString方法,作用是返回对象的字符串表达形式
equals
相当于用来作比较,建议重写,equals比较的是两者是否是同一对象的数据
五大特性
自反性:自己和自己比较必定返回true即 x.equals(x)返回true,但x为非空
对称性:若x.equals(y)为true则y.equals(x)也必然true,xy为非空
传递性:x.equals(y)为true,y.equals(z)为true则x.equals(z)也必然是true,xyz为非空
一致性:多次调用x.equals(y)的结果始终都是一致的,前提是xy非空且未修改
非空性:x.equals(null)必然是false,x不能为null
3.6 内部类
将一个类定义在另一个类或者方法里的类
成员内部类
定义在另一个类的内部的类
可以无条件访问外部类的所有成员属性和成员方法
局部内部类
定义在一个方法或者一个作用域里面的类
它只能访问范围只能是该方法内或者该作用域内
不能有public、protected、private、static修饰
匿名内部类
没有名字的内部类
格式 new 父类构造器(参数列表)|实现接口{实体部分}
使用是必须继承一个类或者实现一个接口,只能同时继承一个或者实现一个
类中不能有构造函数
不能有任何静态成员变量或静态方法
和局部内部类一样
只能访问final型的局部变量
不能是抽象的,且必须实现继承的类或者接口的所有抽象方法
静态内部类
定义在另一个类中的内部类,且用static修饰
只能访问static的成员变量或者方法
3.7 包装类
八种包装类的两大数据类型
Number:Integer、Short、Long、Double、Float、Byte都是Number的子类表示一个数字
Object:Character、Boolean都是Object的直接子类
装箱和拆箱
装箱:将一个基本数据类型变成包装类
拆箱:将一个包装类变为基本数据类型
字符串转换
将字符串转换为指定的基本数据类型
3.8可变参数
一个方法中定义完了参数,则在调用时必须传入与其对应的参数
3.9递归
在方法的定义中调用自身
附: