小李的40天java历程——Day05(OOP)

mac2024-03-27  29

1 内存管理

内存由谁来进行管理:jvm分配管办理(每个java文件代码都要由jvm执行)1.1 堆 1)堆中的存储: 堆中存储所有new出来的都对象(包括成员变量——>(因为new的同时会初始化,加载构造方法,而构造方法就是为了给成员变量赋初值。))引用数组就存在于堆中,且成员变量也存在于堆中所以不是所有的基本类型,引用类型都存在于栈中 2)成员变量的生命周期: 随着对象的创建而产生于堆中,对象被回收(gc垃圾回收机制)而消失。 3)垃圾回收机制: 3.1)什么是垃圾:在java中没有引用指向的对象。3.2)垃圾回收的方式: 垃圾回收器(GC)不定时的会去堆中查看,看到垃圾就自动回收,回收的过程是透明的(不知道其如何回收),即也不是一看到就会立刻回收。如果想快点儿回收,可以调用system.gc()方法,但是也不一定立马回收,只是加快回收。 4)内存泄漏: 4.1)确定没有用的对象,还有引用指向使其没有及时回收,则会造成泄露。4.2)如何处理:对象不再使用后,及时将引用值设为null。 1.2 栈 1)栈中的存储: 用于存储正在调用中的方法的所有局部变量(包括参数)。 2)栈桢: 调用方法时,栈会分配给该方法一个对应的栈桢,栈桢中包含所有的局部变量(及参数),方法调用结束时,栈桢消失,局部变量也一起消失。 3)局部变量的生命周期: 调用方法时候存在于栈中,方法调用结束与栈桢一起消失。 1.3 局部变量与成员变量的区别: 局部变量:存于栈中————————————————成员变量:存于堆中局部变量:没有默认值,必须声明并初始化才可使用——成员变量:有默认值局部变量:位置在方法中——————————————成员变量:存在类中 1.4 方法区 存放字节码文件(.class),包括方法方法只存储一份,属性每个对象都有对应的一份。那方法如何识别是哪个对象进行调用呢?——>通过this关键字

2 继承 (是一个泛化的过程)

2.1 目的:避免代码的重复,增加了代码的重用性2.2 方式:extends2.3 规则: 父类有子类共有的属性,方法。子类有父类的所有属性,方法。单一性:一子一父亲,一父多儿子传递性:父传子,子传孙世世代代。构造方法的规范性: 写子类构造方法前必须写父类构造方法(都不写,默认有无参)。子类构造方法第一行默认有super()(必须在第一行)来调用父类无参。自己调用父类构造方法,则没有默认了。 2.4 super: 概念:指代当前对象的父类对象。什么时候用:在父类的基础上加东西时。用法: super.成员变量(?不能局部变量么?那实例变量和类变量呢?)——>访问父类的成员变量super.方法名()————————————————————————>调用父类的方法super()—————————————————————————————>调用父类的构造方法 this和super的区别? 2.5 向上造型 (is -a的关系) 概念:Father f(父类的引用)=(指向)new son();(子类的对象)规则:对象能点出什么来,看的是的引用类型(引用类型有啥点啥)。 2.6 方法重写 1) 概念: 方法的名字相同,参数列表相同,方法体不同。 2) 重写后的规则: 重写后,调用方法时,引用要看对象的类型,而不是引用类型的类型。 3) 重写需注意的规则:(一大两小两同) 一大:子类的访问权限>=父类的访问权限两小: 子类方法的返回值类型<=父类方法的返回值类型 void和基本类型——>必须相同引用类型——————>小于等于 子类方法抛出的异常<=父类方法抛出的异常 (异常的级别?) 两同: 方法的名字相同方法的参数列表相同 2.7 方法重载(overload)与方法重写的区别(override) overload:方法名相同,参数列表不同,方法体不同,遵循运行期(什么在运行期执行?)绑定,根据引用类型调用方法override:方法名相同,参数列表相同, 方法体不同,遵循编译期(什么在编译期执行?)绑定,根据对象类型调用方法

3 访问控制

3.1 包命名格式: 全部小写域名反写 . 项目名 . 项目模块名 . 类名 3.2 访问修饰符的作用范围 public:所有类protected:本类,本包,子类默认:本类,本包private:本类 3.3 package和import 本包可以直接声明使用,不同包需要导包或者(包名.类名) 3.4 封装(数据私有化,行为公开化) 不会因为别的操作的变更,而导致自己不能实行某些业务。为的是增加代码的扩展性。

4 static

4.1 成员变量:分为实例变量(int a;)和静态变量(static int a ;) 1)实例变量: 属于对象的,存在于堆中。有几个对象,就有相应的几个变量。通常通过(对象名.变量)调用 2)静态变量: 属于类的,存在于方法区中。被static修饰。只存在一个。通常通过(类名.变量)调用 4.2 什么时候用静态变量: 所有对象的某一属性的值都一样的时候,或只有一份的时候。 4.3 静态方法: 基本性质:属于类,存在于方法区,被static修饰。只存在一个,通过类名调用。特殊性质:没有隐式的this,所以静态方法中不能直接调用实例变量(实力变量必须要对象名调用)。 4.4 什么时候用静态方法: 当该方法被调用时,至于参数有关,与对象无关的时候。或用于工具方法(eg:Arrays.sort() Math.sqrt();…),工厂方法。 4.5 静态块 被static修饰属于类的,类被加载期间自动实行,由于类只被加载一次,所以静态块只执行一次什么时候使用?——>加载静态资源图片音频视频等。

5 final(不能变)

用法 修饰变量:不能被改变(1.声明的同时初始化 2.在构造方法中初始化)修饰方法:不能被重写修饰类:不能被继承,但可以继承别人。 出现的时机: 基本类库里的类:String,Math、Integer等都是final修饰的类不想类被滥用。

6 Static final(常量)

用法: 建议都常量名称都大写常量不能被修改常量必须在声明的同时初始化通过类名来调用编译时,自动替换为具体的值。 而静态变量,一般通过三部:首先加载类,其次将方法保存与方法区,最后从方法区中取出方法。
最新回复(0)