面向对象初级
- 方法重载:
方法名必须相同
,形参必须不同
(或顺序不同、或个数不同)。形参名称和返回类型无要求。 - 方法接收可变参数,可将同一个类中
多个同名同功能但参数个数不同
的方法封装成一个方法。形参类型后+...
,可以接收0-多个参数。使用可变参数时,可以当作数组来使用。 - 可变参数的实参可以是数组。可变参数的本质就是数组。
- 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数放在最后。
- 一个形参列表中只能有一个可变参数。
- 全局变量有默认值,可以不赋值,直接使用。局部变量必须赋值后才能使用,因为没有默认值。
- 属性和局部变量可以重名,访问时遵循就近原则。
- 属性生命周期较长,伴随着对象创建而创建,对象销毁而销毁。局部变量生命周期较短,伴随着代码块的执行而创建,代码块的结束而销毁。
- 全局变量/属性可以加修饰符;局部变量不可以加修饰符。
10.构造器的调用由系统完成。构造方法/构造器是类的一种特殊方法,主要作用是完成对新对象的初始化
。创建对象时,系统会自动调用该类的构造器完成对象的初始化
。 - 构造器没有返回值,也不能写void
- 构造器可以重载,一个类可以定义多个不同的构造器
- 如果没有定义构造器,系统会自动给类生成一个默认无参构造器
- javap class:可以用来反编译文件,class -> 类
- 一旦定义了自己的构造器,默认的无参构造器就被覆盖了,除非显式定义一下。
- 对象创建的流程分析:
- 方法区加载类信息,只加载一次
- 在堆中分配空间
- 完成对象初始化,先默认初始化,后显式初始化
- 构造器初始化
- 对象在堆中的地址,返回给栈中的对象名
- java虚拟机会给每个对象分配this,代表当前对象。哪个对象调用,this就指向哪个对象。
- this的使用细节
- 访问成员方法:this.方法名(成员列表)
- 访问构造器:this(参数列表) 只能在构造器中使用。
并且如果有调用构造器的语法,必须放在第一条语句
- this不能在类定义的外部使用,只能在类定义的方法中使用。
面向对象中级
- idea快捷键:自动分配变量名:通过在后面➕.var
生成构造器
查看一个类的层级关系
删除、复制行 - 使用模版快捷键
- 包的本质就是创建不同的文件夹来保存类文件。
- 包的命名规则:只能包含数字、字母、下划线和小圆点。不能以数字开头,不能是关键字或保留字。
- 包的命名规范:com.公司名.项目名.业务模块名
- java中常用的包
java.lang.*
//lang包是基本包,默认引入,不需要再引入java.util.*
//工具包,工具类java.net.*
//网络包,做网络开发java.awt.*
//java界面开发
导入包时建议使用到哪个就导入哪个,不建议全部用*全部导入 - package的作用是声明当前类所在的包,放在类的最上面。
- java提供四种访问控制修饰符
public:公开
protected:对子类和同一个包中的类公开
default:对同一个包中的类公开
private:私有,只有类内部自己访问
访问级别 | 访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | default | √ | √ | × | × |
私有 | private | √ | × | × | × |
只有默认修饰符和public才可以修饰类。
- 面向对象三大特征:封装、继承、多态
- 继承的父类叫基类、超类;子类叫派生类
- 子类必须调用父类的构造器,完成父类的初始化
- 创建子类对象时不管使用子类的哪个构造器,默认情况下都会调用父类的无参构造器;如果父类没有无参构造器,必须用super指定使用父类的哪个构造器来完成父类的初始化,否则编译无法通过。
- super使用时,必须放在构造器第一行,只能在构造器中使用
- super和this都只能放在构造器第一行,所以他们不能在同一构造器中出现
- Object类是所有类的基类
- java中是单继承机制,最多只能直接继承一个父类
- 继承不能滥用,子类和父类必须满足is-a的关系
- `继承的本质分析``:子类继承父类,当创建子类对象时,内存到底发生了什么?子类创建时会建立和父类的查找关系。