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

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 方式:extends
  • 2.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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值