java中面向对象(OOP)基础概念

本文连接:https://blog.csdn.net/MDWJJ/article/details/105820938

什么是对象
  1.软件系统中的事物个体也称为业务实体,一切皆对象
  2.每个对象包含一组数据和相关的操作方法

:将对象的公共属性和行为抽取到定义类中,可以作为模板复用创建对象
  实例化:利用类创建对象的过程称为实例化
  构造器:用于封装对象属性实例化过程,创建对象时调用
  语法:
    1.在类中声明,方法名与类名一致
    2.不能有返回值,不能使用void
    3.可以有参数,用来实例化对象
    4.使用new运算调用构造器,创建对象
    5.如果类不定义构造器,Java编译器会自动提默认供构造器;如果类定构造器,Java编译器就不会提供默认构造器
    6.构造器重载用于实现:对象有多种数据初始化方式

引用
    1.也称为引用变量,Java中除了基本类型变量其他都是引用类型变量
    2.用于操作对象的“句柄handle”
    3.应用变量中存储了对象的首地址,利用收地址间接操作内存对象
    4.简单说:引用用于操作对象
    5.Java自动维护引用的地址,对外不可见,屏蔽了平台差异(跨平台)

面向对象的3个重要概念
    1.封装:将数据以及算法尽可能隐藏到类的内部,只暴露必要的操作方法和数据
    2.继承:复用,利用父类复用子类中公共属性和方法,将子类公共属性很方法“泛化”到父类中(画图子类箭头指向父类)。泛化:将子类的公共属性和方法抽取到父类的过程称为泛化。
    3.多态:父类型变量引用的子类型个体是多种多样的,使用子类型方法的时候其功能也是多种多样的

重载
    1.在类中(包含父类)定义的方法名一样参数(个数、顺序)不同的方法
    2.一般这些的方法封装的算法(方法体)都不相同
    3.只是为了表示设计的优雅而将方法名定义为一样
    4.调用方法时候,根据方法名和参数列表 识别调用哪个方法。
如果参数不相同,Java会尝试自动转换类型

方法签名

方法名+参数类型列表 = 方法签名

this 引用
this 引用当前的这个对象
    1.this 用于区别方法(构造器)中的局部变量和实例变量
    2.当方法中局部变量和实例变量同名的时候,可以使用this.实例变量与局部变量加以区分
    3.当实例变量名和局部变量名没有冲突,可以省略this

局部变量:方法的参数是局部变量
this()用于调用当前类的其他构造器
    1.其目的是为了将构造器的逻辑进行复用
      (a) 多个构造器使用一个初始化逻辑
    2.this()只能在构造器使用
    3.this()写在构造器的第一行

继承
子类可以继承(获得)父类中的属性和方法。子类无需声明就可以获得父类中的属性和方法。
利用“泛化”实现继承! 泛化:将对象相同的属性进行抽象同一的过程称为泛化
继承语法:
    1.使用extends实现继承
    2.被继承者是父类(超类super class)中的属性和方法被子类继承
    3.继承者是子类
    4.Java是单继承语言
    5.如果没有父类,则自动继承于Object 类型

重写
  1.在子类中修改从父类中继承的方法
    在子类中定义一个与父类型具有相同“方法签名(方法名+参数类型列表)”的方法
  2.能够继承的方法才能重写

  语法:子类定义一与父类“一样”的方法
      a)方法名一样;
      b)参数一样
      c)返回值,一般都是一样的,可以是更小的类型
      d)修饰词,可以更加扩大
      e)异常,可以更加具体
      f)static修饰方法不能重写

  super.在子类中代表父类型
      1.当子类的属性或方法命名与父类冲突的时候,可以利用super.引用父类中的属性方法
      2.在重写的时候,子类与父类的方法相同,如果需要利用父类的逻辑。super.父类方法()

内部类(知识点)
  在类内部定义的类,称为内部类
  内部类的优点:可以隐藏类的定义,可以共享外部的属性、方法
  何时使用内部类:
    如果需要隐藏类的定义,或者内部类共享外部的属性或者方法时候,使用内部类。
    如果不需要如上特性,就不要使用内部类!
  提示:内部类一般只在类的内部使用,不在外部使用。
访问控制修饰符
  什么是访问控制:用于控制类、属性、方法等的可见范围。
  为啥使用访问控制:可以控制数据及方法的可见范围,保护软件组织(对象)的安全可靠
  访问控制修饰词
    1.public公有的
      a)可以修饰类:类可以在任何位置被访问
      b)可以修饰属性:属性可以在任何位置被访问
      c)可以修饰方法:方法可以在任何位置被访问
    2.protected 保护的
      a)包内可用,包外不可用(外包子类不可用)
      b)外包子类不可用
    3.默认的,不写任何修饰词
      a)默认属性和类在同包中可以访问
    4.private私有的 仅仅在类内部可见,用于修饰类内部成员
      a)修饰属性:属性 仅仅在类的内部可见
      b)修饰方法:方法 仅仅在类的内部可见
      c)修饰内部类:内部类 仅仅在内部类可见

修饰符本类同包类子类其他类
public
protected
默认
private

    使用原则
      1.竟可能封装,在不确定的时候使用private
      2.一般不使用默认的
      3.给子类使用的属性和方法,使用protected
      4.需要公开的属性和方法,使用public
static静态
  1.属于类的被全部对象共享的唯一一份资源(属于对象的属性和方法是动态的)
  2.静态属性是唯一一份属于类的属性
  3.静态方法是唯一一份属于类的方法,不能重写!
  4.静态代码块,用于初始化静态资源
静态的用途:
  1.修饰类的成员变量,称为静态变量
    a)静态变量属于类的变量,可以使用“类名.变量名”访问,在类的内部可以省略类名
    b)静态变量只有一份,可以被全体对象共享!软件中只有一份的数据应该使用static修饰
    c)静态变量在类加载期间,随着类在方法区中初始化,只有一份属于类。
  classCircle{
    static double PI;
  }
  2.修饰方法,称为静态方法
    a)静态方法是属于类的方法
    b)一般使用“类名.方法”
    c)相对于对象方法(非静态方法),静态方法可以不创建任何对象直接使用类名调用
    d)静态方法的好处是:直接使用类名就可以调用方法
    e)一般情况下当方法计算时候用到当前对象(this)的属性(数据)时候,使用非静态方法。相反方法在计算的时候没有用到当前方法的属性,则应定义为静态方法
非静态方法中,包含默认的局部变量this引用当前的对象,静态方法中没有this这个变量!!!
  3.修饰代码块,称为静态代码块:再类中使用static修饰的代码块。
    a)在加载期间按照顺序执行
    b)一般用于初始化静态资源(静态属性)
  4.修饰内部类,称为静态内部类
  静态方法只能访问静态资源:静态方法中没有this,不能使用当前对象的属性,不能使用当前的方法,也不能使用成员内部类

final
  1.final修饰变量(局部变量,方法参数,实例变量)
    a)可以初始化一次,以后不能再改变
  2.final 可以修饰方法,表示这个方法不能在子类中重写(不能被子类修改)
    a)经常为了保护类中声明的方法,避免被子类意外修改
    b)工作中很少用!!!
  3.final 可以修饰类,表示这个类不能再继承了。不能再有子类了
    a)一般用于限制子类,避免再次被扩展(修改)。String就是final类,String是极其重要的Java API,为了避免String功能被篡改,所以定义为final的类型。Java.lang包中的很多类都是final的类。
    b)工作中很少用!!!

static fianl定义常量
  static 一份,final表示不能改
  一份且不能改的数据,就是Java中的常量。
  软件中一份切不能改的数据,都定义为常量

抽象(abstract)类
  使用abstract声明的类是抽象了类,抽象类不能实例化,只能被继承。
    1.软件中作为父类使用的“半成品”类,在逻辑上不应该直接实例化
    2.Java提供了abstract关键字,实现在语法层面上限制一个类,避免实例化。
    3.软件的编写者,在团队协作时候,利用abstract限制类的实例化,可以使用合作者避免不必要的错误。
    4.何时使用:一般情况下,作为半成品的父类,建议定义为抽象类
    5.抽象类可以作为父类声明变量,只能引用子类的实例。

抽象(abstract)方法
  使用abstract关键字声明方法
    1.抽象方法不能有方法体
    2.包含抽象方法的类必须定义为抽象类
    3.子类继承抽象类的时候,必须实现(重写)父类声明的抽象方法。
  何时使用抽象方法,将子类方法泛化到父类的时候,如果每个子类具体方法体都不一样的时候,建议将方法签名(方法名+数据类型列表)抽象到父类中,定义为抽象方法。
  抽象类型可以作为父类声明变量,只能引用子类的实例
  这样就可以统一使用父类型变量管理子类型实例

多态
  父类型定义的变量引用的子类型实例是多种多样的!

接口interface
  接口:不同类别的公共行为抽象为接口
  实体类既是敌人,又是计分接口:这种现象叫多继承
    1.在软件继承关系中,部分类型拥有的公共方法,需要抽取到接口中
    2.当一个类型继承了自己的父类,同时又实现了接口,这种现象称为多继承
    3.如果软件集成结构中出现了一部分类型拥有相同方法的时候,需要使用接口进行抽象射击
  -如果全部类型都拥有的公共方法,抽取到父类中

  语法:
    1.接口中只能定义常量和抽象方法
    2.可以省略常量的修饰词(只能用public 和 默认)
    3.可以省略抽象方法的修饰词,编写简洁方便
  接口相当于全部是抽象方法的抽象类
  关于实现接口:
    1.Java中只能单继承,也就是一个类只能继承(extends)一个父类
    2.一个类可以实现对个接,口implements的后面可以实现多个接口
    3.在逻辑上表达了既是也是关系,如:石头既是飞行物也是奖励也是敌人
向上造型

匿名内部类
  匿名:没有名字。在类的内部定义,没有名字的类
  优点:
    1.书写简单
    2.具有内部类的全部功能
      a)封装类的定义
      b)与外部类共享数据和方法
    3.由于语法间简洁,使用很广泛
      a)简洁实现接口时候使用
      b)简洁继承抽象类的时候使用
      c)简洁继承类的时候使用
  使用匿名内部类
    1.必须有父类型,可以抽象类或者接口
    2.必须作为子类派生自父类
    3.子类没有类名,直接继承自父类,并且直接创建了对象
Java源文件编译后,每个生成一个class文件,内部类和匿名类都会生成独立的class文件

内存泄露和内存溢出
  Java中的内存管理
    1.所有的局部变量在栈分配
      a)每个方法一个栈帧
      b)方法中的变量在栈帧中分配
      c)方法结束以后栈帧弹出销毁,其变量也全部销毁
    2.所有的对象都在栈中分配
      a)new运算时候在栈中分配对象存储空间
      b)对象存储空间存储对象的属性
      c)当对象不被任何变量引用的时候,对象变成内存”垃圾”
      d)Java 提供垃圾回收期自动回收内存来“垃圾”
    3.内存泄露
      a)Java垃圾回收其无法回收不可使用的对象,这些对象在内存中积累,不断消耗内存
      b)内存泄露的终极表现:内存溢出
    4.解决内存泄露
      a)当对象不再使用的时候,及时释放对象的使用,使对象可以被及时回收

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值