-
三大思想
OOA:面向对象分析 OOD:面向对象设计 OOP:面向对象程序
-
三大特征
封装性:内容对外部不可见 继承性:继承其他功能继续发展 多态性:方法重载本身就是一个多态性的体现
-
类与对象
类:共性产物,综合特征 由方法和属性组成 属性:一个个特征 方法:一个个行为 定义格式:一个.java文件只能有一个public修饰的类,文件名称必须与public修饰的类名完全一致 class 类名称{ 属性 int age; 方法 返回值类型 方法名称(参数列表){ 方法体; return 返回值; } 调用格式:对象名.方法名(参数列表) } 对象:个性产物,个体特征 类名 对象名 = new 类名(); 内存细节 栈:一个线程一个栈区,每个栈内元素都是私有的,不能被其他线程访问,后进先出 堆:存放类的对象 方法区: 构造方法 创建对象的方法 作用:对象初始化,创建对象时,自动执行 定义格式:方法名称与类名一致,没有返回值类型声明 重载 和方法重载一致 设计规范 自定义无参构造方法 两个构造方法:无参,全属性参数 成员变量都是常量或者没有成员变量时,不提供构造方法
-
方法重载
一个类中定义的的方法方法名称相同 参数列表长度、类型、顺序不同 与返回值无关
-
匿名对象
没有引用名,只能使用一次
-
编程规范
命名风格 不能以_或$开头 严禁拼音与英文混合 类名大驼峰 方法名、参数名、局部变量小驼峰 常量全部大写,_分割 代码格式 大括号内没有内容不换行 小括号内不加空格 if\while\switch\do保留空格 二目三目运算符保留空格 四个空格缩进
-
封装
保护代码不被外部损坏,所有属性建议封装 定义格式:private 类内部调用,外部无法使用,通过setAge()设置值,getAge()获取值
-
this:
将属性赋值给当前调用对象 调用类中方法或构造方法 表示当前对象
-
static:
静态属性,静态方法,存储于方法区中 不依赖于对象的创建,随着类的加载而访问 属于类本身的属性,通过类定义 静态不能访问非静态,非静态可以访问静态
-
包:
同一个包内存放功能相似或相关的类
限定了访问权限,拥有包的访问权限才能导入
package 包名:描述文件所在的包
包的定义
多个单词,字母小写,通过.分割
导入:import/类的全名称
java.lang内不需要导入、同一个包内也不需要导入 -
权限修饰符:
-
代码块
普通代码块:执行流程中出现的代码块
构造代码块:类中的成员代码块,对象创建时执行
静态代码块:static+构造代码块,随着类的加载而执行,只执行一次
同步代码块
执行顺序:
静态代码块-构造代码块-构造方法
- main方法:程序入口
String args[]接收命令行参数
- 继承
class 子类 extends 父类 {}
只有单继承
内存分析
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313204052146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzNTI4Nw==,size_16,color_FFFFFF,t_70)
super
访问父类构造方法,放在第一行
访问父类属性
访问父类方法
不能同时调用super和this
- 重写
参数列表必须完全相同;
返回类型相同;
访问权限不能比父类方法访问权限低
父类成员方法只能被子类重写
static private 不能被重写,能再次被声明
重写重载区别
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313204103456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzNTI4Nw==,size_16,color_FFFFFF,t_70)
- final关键字
修饰属性变量,修饰之后不能再被改变
局部变量未赋值时,只能被赋值一次
成员属性必须赋值
全局常量 public static final
修饰的类,不能被继承
修饰的方法,不能被子类重写
- 抽象类
abstract class 类名{
//抽象方法
public abstract void 方法名();只声明未实现
}
@override确认是否为重写方法
抽象类不能被实例化,必须被子类继承,子类必须重写抽象类中的抽象方法
抽象类不能使用final声明
抽象类能有构造方法
必须使用public protected修饰
- 接口
一个类中的所有方法都是抽象方法,全部属性都是全局常量,就可以将其定义为一个接口
interfce 接口名称{
全局常量;
String INFO = "";
抽象方法;
void print();
}
实现
class 子类 implements 父接口1,父接口n{}
接口继承
interface C extends A,B{}
接口思想编程:接口是定义与实现的分离
降低程序耦合
易于拓展
利于程序维护
接口与抽象类的区别
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313204154679.png)
- 多态:对象的多种表现形式
体现:
对象多态性
方法重载与重写
使用
向上转型
父类 父类对象 = 子类实例
向下转型
子类 子类对象 = (子类)父类实例;
instanceof:判断是否为某一类
实例化对象 instanceof 类
object:所有类的父类
可以接受任何引用数据类型
类的源码:ctrl+点击
toString(): 建议子类重写此方法
p1 == p2;引用的内存地址是否相等
equals(): 两个对象是否相等
五个特性:
自反性
对称性
传递性
一致性
非空性
- 内部类:可以将一个类定义在另一个内部类或方法里面
成员内部类
一个类里面定义类,无条件访问外部类所有属性和方法
创建
Outer.Inner i = o.new Inner();
外部类.this.成员变量
局部内部类
一个方法或作用域内定义类,只能在方法内部调用,不能有public\protected\private\static修饰
匿名内部类
new 父类构造器(参数列表) |接口{}
继承一个接口或者类
只能访问final型局部变量:内部类单独编译
静态内部类
static 修饰类
可通过外部类.静态内部类()直接调用
静态内部类不能使用非静态变量或方法
- 包装类:存储在堆中
Integer.parseInt("100")
装箱/自动装箱:基本数据类型转换为包装类
拆箱/自动拆箱:包装类转换为 基本数据类型
字符串转换
parseInt()
parseFloat()
parseBoolean()
22.可变参数
int… nums:可变参数,可传递0-n个数字
方法内部以数组体现
只能出现在参数列表最后面
- 递归
方法内部调用方法本身
阶乘
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313204311115.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzNTI4Nw==,size_16,color_FFFFFF,t_70)