1.堆区 存储 数组、字符串对象( 一般由程序员分配释放, 若程序员不释放)
2.栈区 存储函数参数以及函数内部声明的变量
3.静态区
4.代码区 所有代码的区域( 存放函数体的二进制代码)
1:特点--使用new关键字分配堆区,生命期直到被回收,引用计数为0,引用计数为0就是这块内存不被其他变量引用了
A a = new A() //a本身在栈区,a存储内存的位置在堆区
2.特点--随着函数的调用而产生,随着函数的调用结束而消亡
3.特点--生命期和应用程序生命期相同,静态成员保存值得地方
4.特点--代码区存储编译后的指令
数组:一块连续的空间
函数重载:统一作用域内,函数名相同,参数列表不同
(底层)--名称编码,对于CPU来说,函数名=参数类型列表惊行编码----节约了命名资源,尽可能不使用函数重载
传参:对于基本类型来说是复制
对于引用数据类型来说是传递地址
1.面向对象的部分,一般,高级
2.异常
3.集合
4.工具,包括字符串,时间,随机数,数学
1.--封装、继承、多态
封装:
构造方法,可以重载
默认构造方法,不带参数的构造方法
如果写了默认构造方法,编译器不会生成,如果没有默认的构造函数,编译器会生成
如果写了多个构造方法,一定提供一个默认的构造方法
思考:一个类被实例化后,内存中有哪些内容
任何程序执行时先找函数地址,运行过程汇中对变量寻址。
java中,对象也是一个变量,内存中只有非静态数据成员
继承: extends
对基类非静态数据成员的copy
对于基类的代码实质是调用
如果派生类的代码是对基类代码的改写,override,那么 在代码区会存储改写后的代码,------静态方法不能被继承
在继承的过程中,
class Cdrived extends CBase{}
在实例化派生类对象时,首先实例化基类对象。对构造方法连锁调用
结论:在派生类中汉以后基类子对象
派生是一种中间状态。两个层次,浅层次基于对象的编程,
深层次面向对象的编程-----需要了解认知类之间的联系
类间关系:1.继承关系--表示子类是一个父类
2.聚合关系 3.组合关系 4.类内 5.局部内部
多态:
具有同一接口,但是展现不用功能,称之为多态
动态多态--方法改写为基础,使用基类类型的变量指向类对象,然后再调用被改写的方法时,以实际指向的对象来确定使用哪个类实现的方法
静态多态--函数重载就是一种静态多态,在编译时决定调用哪个方法