Java—OOP、构造方法、this关键字

Java—OOP、构造方法、this关键字

  • 面向对象编程

    • 如何描述现实世界事物
      • 属性 该事物的描述信息(事物身上的名词)
      • 行为 该事物能够做什么(事物身上的动词)
    • Java中最基本的单位是类,Java中用class描述事物也是如此
      • 成员变量(字段)事物的属性
      • 成员方法 事物的行为
    • 定义类其实就是定义类的成员(成员变量和成员方法)
      • 成员变量 和以前定义局部变量是一样的,只不过位置发生了改变。在类中,方法外。
      • 成员方法 和以前定义方法是一样的,只不过把static去掉。
  • 面向对象的优点

    • 便于程序模拟现实世界中的实体
      • 用“类”封装建模实体对象的状态和行为
    • 隐藏细节
      • 对象的行为和状态被封装在类中,外界通过公开的接口——调用类的方法来获得状态信息,不需要关注内部细节如何实现的
    • 可重用
      • 可以通过类模板,创建多个对象实列,重用类的定义代码
  • - Java对象的内存管理机制

    • 使用new创建对象,在堆内存分配的对象空间,初始化
    • 在方法栈中定义局部变量,持有堆内存中对象的引用
    • 方法执行完返回,栈内存自动释放,局部变量销毁
    • 如果堆内存中对象没有变量引用它,成为垃圾,由垃圾回收器回收,释放所有占堆内存。

- Java对象的内存管理机制

  • Java垃圾回收器
    • Java运行时系统有一个垃圾回收栈程负责清楚不再使用的对象,俗称垃圾回收器
    • 垃圾回收器定期扫描内存,对于被使用的对象加上标记,按可能的路径扫描结束后清除未加标记的对象
    • 被回收的对象是:
      • 不再被任何变量引用的对象
      • 引用变量自动放弃
      • 人为将引用变量置为null

OOP三大特性

  • 封装

  • 继承

  • 多态

  • package

    • 包(package)
      • 打包的意义:
        • 标准Java库是由一系列包组成,包括Java.lang,Java.util,Java.net等等。标准Java包就是层次型结构,就如同硬盘上嵌套的子目录一样,我们可以使用嵌套层次结构来组织包。
        • Java的包是为了更好地规划代码,防止命名冲突和混乱。所以Java出现了打包机制。
        • 当把类组织起来放进一个包内时,也就给它们包访问的成员赋予了相互访问的权限,您“拥有”了该包内的程序代码。“只有您拥有的程序代码才可以访问您所有的其他程序代码”。
        • 包访问权限为把类剧集在一个包中这一做法提供了意义和理由。
      • package—声明包:
        • package com.hwua.ch09;
        • public class Teacher{
          • private String name; //教员的姓名
          • private int age;//教员的年龄
          • /**
            • 包访问权限
          • *@returm自我介绍的内容
          • */
          • String introduction(){
            • retum"大家好我是“+name+”,今年“+age+“岁”;
          • }
        • }
        • 包名由小写单词组成
        • Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,编程规范要求程序员在自己定义包的名称之前加上唯一前缀
        • 由于互联网上的域名称是不会重复的,所以一般推荐采用公司在互联网上的域名倒置作为包的唯一前缀。
      • 一个类可以使用用一个包中的所有类(不包括private),以及其他包中的所有公开类
      • 我们可以通过两种方式访问其他包中的公开类
        • 简单在每个类前面加上完整的包名,例如:
          • java.util.Date today = new java.util.Date();
        • 更简洁通用的方式是:使用 import 语句来导包
          • import语句提供了引用其他包中类的快捷方式,可以免去使用完整包名的累赘
            • import java.util.Date;
            • …Date today = new Date();
          • 可以 import 特定类,也可以导入整个包。通过在源代码文件的顶部(在打包语句后)使用import导入语句来实现
  • 封装

    • 封装概念
      • 将东西包装在一起,然后以新的完整的形式展现出来
      • 信息隐藏,隐藏对象的实现细节,不让外部直接访问到
        • 将方法和字段包装进类中,加上具体实现的隐藏(访问修饰符),共同被称作封装,其结果是一个同时带有特征和行为的数据类型
        • 定义类,定义其属性,方法的过程称为封装类
      • 信息隐藏
        • 信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因
        • 信息隐藏的原因包括:
          • 对模块的任何实现细节所作的更改不会影响使用该模块的代码
          • 防止用户意外修改数据
          • 使模块易于使用和维护
          • 在这里插入图片描述
          • 在这里插入图片描述
      • 字段封装的实现
        • 修改字段的可见性来限制对字段的访问
        • 为每个字段创建一对繁殖(setter)方法和取值(getter)方法,用于公开对这些字段的访问接口
        • 在setter和getter方法中,根据需要加入对字段操作的限制
        • public class Teacher{
          • private String name; //教员的姓名
          • private int age;//教员的年龄
          • public int getAge(){
            • returm age;
          • }
          • public void setAge(int age){
            • if (age<22){
              • System.out.println("错误!最小年龄应为22岁!”);
              • this.age = 22; //如果不符合年龄要求,则赋予默认值
              • }else{
                • this.age = age;
              • }
            • }
          • }
      • 封装方法的目的
        • 隐藏方法实现细节(方法体),像外部提供公开接口(方法头),以安全调用
        • 简化调用。方便修改维护
        • 根据需要,可以私有化方法以供类内部使用
          • public class Teacher{
            • private int year; //出生年份
            • //判断出生年份是否是闰年
            • public boolean ist earpYear(){
              • if ((year%40&&year%100!=0)||year%4000){
                • retum true;
                • }else{
                  • retum false;
                • }
            • }
          • }
        • 封装,把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
        • 变量:使用private修饰,这是封装变量
        • 方法:也是一种封装,封装了多条代码
        • 类:也是一种封装,封装了变量和方法
  • 成员变量AS局部变量

    • 定义位置不同
      • 定义在类中的变量是成员变量
      • 定义在方法中的变量是局部变量
    • 在内存中的位置不同
      • 成员变量存储的堆内存的对象中
      • 局部变量存储在栈内存的方法中
    • 声明周期不同
      • 成员变量随着对象的出现而出现在堆中,随着对象的消失而消失
      • 局部变量随着方法的运行而出现在栈中,随着方法的单栈而消失
    • 初始化情况不同
      • 成员变量有默认的初始化值
      • 局部变量没有默认的初始化值
  • 成员变量AS静态变量

    • 成员变量和静态变量的区别
      • 调用方式不同
        • 静态变量也称为类变量,可以直接通过类名调用,也可以通过对象名调用,静态变量是属于类的
        • 成员变量也称为实际变量,只能通过对象名调用,成员变量属于对象
      • 生命周期不同
        • 静态变量随着类的加载而加载,随着类的消失而消失,生命周期长
        • 成员变量随着对象的创建而存在,随着对象的消失而消失
      • 对象的相关性不同
        • 静态变量是所有对象所共享的数据
        • 成员变量是某个对象所特有的数据
  • this关键字

    • this可以看做是一个变量,他的值是当前对象的引用
    • 使用this可以处理方法中的成员变量和形参同名的问题
    • 当在方法内需要用到该方法的对象时,就可以用this
  • 构造方法

    • 类的构造方法概念和作用
      • 构造方法负责对象初始化工作,为对象的属性赋值合适的初始值
      • 创建对象时,其类的构造方法确保:在用户操作对象之前,系统保证初始化的进行
    • 构造方法的语法规则
      • 构造方法名与类相同
      • 没有返回类型
      • 方法实现主要为字段赋初值
    • 构造方法的调用
      • 构造方法的调用很特别:new操作符(返回新建实列的引用)
    • 注意:java系统保证每个类都有构造方法
    • 类一定有构造方法
      • 如果你没有构造方法,则编译会添加一个默认的构造方法,形式是无参的构造方法
      • 如果你添加了构造方法,在编译时不会再添加默认的构造方法
    • 注意
      • 方法名必须是与类名相同
      • 不要生名返回类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值