面向对象高级第一天

static关键字

是静态的意思,可以修饰成员变量,也可以修饰成员方法

成员变量的分类

  1. 静态成员变量

    • 有static修饰,属于类,与类一起加载,内存中只有一份,可以被共享访问。

    • 什么时候用呢?如果信息要被共享,只需要一份就用静态成员变量,比如:系统在线人数。

    • 访问规则:

      建议用类名访问:类名.静态成员变量

      同一个类中,访问静态成员可以省略类名不写。

      理论上也可以这样访问:对象名.静态成员变量(不推荐)

  1. 实例成员变量

    • 无static修饰,属于对象,每个对象中都存在一份实例成员变量。比如:name age

    • 什么时候用呢?比如:name age,每个对象中都有这些信息,而且信息还不同时,定义成实例成员变量。

    • 访问规则:

只能用:对象名.实例成员变量。

成员方法的分类

  1. 静态成员方法

    • 有static修饰,属于类,与类一起加载,可以被共享访问。

    • 什么时候用呢?如果是做一个通用功能,可以用静态成员方法。

    • 访问规则:

      建议用类名访问:类名.静态方法
      注意:同一个类中,访问静态成员可以省略类名不写。
      理论上也可以这样访问:对象名.静态成员方法(不推荐)
    • 静态成员方法的应用:工具类

      是什么? 工具类中都是静态方法,为了完成一个共用功能
      好处:一次编写,处处可调,提高代码的复用性,提高开发的效率。
      注意:建议把工具类的构造器私有化,因为工具类无需对外创建对象,它的方法都是静态方法,直接用类名访问即可。
  2. 实例成员方法

    • 无static修饰,属于对象,必须用对象触发访问。

    • 什么时候用呢?如果这个方法属于对象,而且要直接访问对象的实例成员,则声明成实例方法。

    • 访问规则:

      只能用:对象名.实例成员方法。

static的应用知识

代码块

  • 是什么? 类的5大成分(成员变量、成员方法、构造器、代码块、内部类)之一

  • 分类

    1. 静态代码块:(重点了解一下)

      格式:static {}
      特点:属于类,与类一起优先加载,自动触发执行一次。
      作用:可以用于在程序启动时,进行静态资源的初始化操作
    2. 实例代码块(几乎不用):

      格式:{}
      特点:属于对象的,每次调用构造器构建对象前都会执行一次,再执行构造器。
      作用:可以用于初始化实例资源

单例设计模式

  • 单例是一种设计模式,是为了解决某个问题

  • 单例能解决的问题:保证一个类对外只能产生一个对象。

  • 重点在于如何实现单例:

    1. 饿汉单例

    • 特点:拿对象时,对象已经存在

    • 实现步骤:

      /**
      * 饿汉单例设计模式
      */
      public class SingleInstance {
         // 1.定义一个类,将构造器私有
         private SingleInstance() {}

         // 2.对外提供一个静态对象
         // 饿汉单例是在获取对象前,就已经准备好了一个对象
         // 这个对象只能通过类名访问,所以定义成static的
         public static SingleInstance instance = new SingleInstance();
      }
    1. 懒汉单例

    • 特点:要拿对象的时候,才开始创建一个对象。

    • 实现步骤:

      /**
      * 懒汉单例设计模式
      */
      public class SingleInstance2 {
         // 2.定义一个静态的成员变量负责存储一个对象,只加载一次,只有一份。
         // 专业的做法是:这里私有化,这样可以避免给别人挖坑
         private static SingleInstance2 instance2;

         // 1.将构造器私有化
         private SingleInstance2() {}

         // 3.对外提供一个静态的获取对象的方法
         public static SingleInstance2 getInstance2() {
             if (instance2 == null) {
                 // 第一次来拿对象 :此时需要创建对象。
                 instance2 = new SingleInstance2();
            }
             return instance2;
        }
      }

面向对象的三大特征之二:继承

继承概述、使用继承的好处

  • 什么是继承? Java允许一个类通过extends与另一个类建立父子关系,这就是继承。

  • 继承的格式:

    • 子类 extends 父类

  • 继承的特点:

    • 子类继承父类后,就可以得到父类的属性和行为。

  • 继承的核心优点:

    • 提高代码的复用性,多个子类的相同代码可以放在父类中,增强了类的扩展性。

继承的设计规范、内存运行原理

  • 设计规范:子类共用属性和行为放在父类,子类独有属性和行为放在子类自己那里。

  • 内存原理:

    子类对象实际上是由子父类这两张设计图共同创建出来的。

继承的特点

  1. Java是单继承模式:一个类只能继承一个直接父类。

  2. Java不支持多继承、但是支持多层继承。

  3. Java中所有的类都是Object类的子类。

继承后:方法重写

  • 概念:子类重写了一个声明与父类一样的方法,覆盖父类的方法。子类认为父类的该方法不好用,以后用自己重写的方法。

  • 重写方法建议加上一个重写校验注解:@Override

    • 作用:要求必须是正确重写的才不报错

    • 作用2:可读性好

  • 重写的要求:

    1. 重写方法的名称和形参列表必须与父类被重写方法的名称和形参列表一致(重点)

    2. 私有方法不能重写

    3. 静态方法不能重写

    4. 重写方法的权限 >= 被重写方法的访问权限。

  • 在重写的方法中如果想要访问父类的方法怎么办呢?

    • super.方法名();

继承后:成员变量、成员方法的访问特点

  1. 就近原则

  2. this.子类自己的成员变量

  3. 在子类方法中访问父类成员怎么办? super.父类成员变量/父类成员方法

继承后:子类构造器的特点

  • 特点:子类的全部构造器默认都会先访问父类的无参数构造器,再执行自己的构造器

  • 为什么呢? 先有爸爸才有儿子。 先调用父类的构造器初始化父类的数据,再调用自己的构造器初始化自己的数据。

  • 代码层面:默认子类构造器的第一行都有一个super(), 访问父类的无参数构造器,写不写都有

继承后:子类构造器访问父类有参构造器

  • 调用父类有参数构造器,初始化继承自父类的数据。

  • super(....) 根据参数调用父类构造器

this、super使用总结

  • this访问子类当前对象的成员。

  • super:在子类方法中指定访问父类的成员。

  • this(...) : 访问本类兄弟构造器

  • super(...):在本类构造器中指定访问父类的构造器

  • 注意事项:super(...) 必须放在第一行,this(...) 也必须在第一行。因此2者不能共存一个构造器中。

Java面向对象进阶第一天的更多相关文章

  1. Java 面向对象编程——第一章 初识Java

      第一章    初识Java 1.  什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...

  2. Java面向对象编程 第一章 面向对象开发方法概述

    一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...

  3. Java面向对象进阶篇(包装类,不可变类)

    一. Java 8的包装类 Java中的8种基本数据类型不支持面向对象的变成机制,也不具备对象的特性:没有成员变量,方法可以调用.为此,Java为这8 种基本数据类型分别提供了对应的 包装类(Byte ...

  4. Java面向对象进阶篇(抽象类和接口)

    一.抽象类 在某些情况下,父类知道其子类应该包含哪些方法,但是无法确定这些子类如何实现这些方法.这种有方法签名但是没有具体实现细节的方法就是抽象方法.有抽象方法的类只能被定义成抽象类,抽象方法和抽象类 ...

  5. ☕Java 面向对象进阶内容

    目录 == 和 equals 方法 封装 多态 抽象类和抽象方法 抽象方法 抽象类 抽象类的使用要点 接口 接口使用 内部类 String 字符串常量拼接时的优化 String Pool String ...

  6. Java面向对象进阶篇(内部类)

    一. 概念 大部分时候,类被定义成一个独立的程序单元.有时候把一个类放在另一个类内部定义,这个类被称为内部类,包含内部类的类也被称为外部类. 内部类的主要作用: 内部类提供良好的封装,可以把内部类隐藏 ...

  7. Java面向对象编程 -2

    成员属性封装 在类之中的组成就是属性和方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而对于属性需要较高的安全性,所以往往需要对其进行保护 这个时候就需要采用封装性对属性进行保护. 在 ...

  8. 王燕 201771010126《面向对象程序设计(java)》第一周学习总结

    王燕 201771010126<面向对象程序设计(java)>第一周学习总结 王燕 201771010126<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部 ...

  9. 马凯军201771010116《面向对象程序设计(java)》第一周学习总结

    马凯军201771010116<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...

  10. 周强201771010141《面向对象程序设计(java)》第一周学习总结

    周强201771010141<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com ...

随机推荐

  1. Zabbix与乐维监控对比分析(一)——架构、性能篇

    近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头:而作为后起的新锐IT监控平台--乐维监控,则不断吸收Zabbix,Prometheus等优秀开源平台的优点 ...

  2. 单一接口优化过程全记录(主要涉及Redis)

    接口优化过程记录 问题背景 某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis 步骤1:链路追踪,确定业务耗时点 接口里通过链路追踪以及日志查询发现主要是 ...

  3. 基于pyecharts的中医药知识图谱可视化

    基于pyecharts的中医药知识图谱可视化 关键词: pyecharts:可视化:中医药知识图谱 摘要: 数据可视化是一种直观展示数据结果和变化情况的方法,可视化有助于知识发现与应用.Neo4j数据 ...

  4. QT如何设置模态窗口、qss中的image丢失、进程自杀、任务日志、命令行中文乱码

    1.设置模态窗口 对窗口设定属性如下: this->setWindowModality(Qt::WindowModal); 注意模态窗口只对父窗口生效,在建立窗口的时候要注意,如果不是指针也可以 ...

  5. SQL语句查询关键字

    SQL语句查询关键字前戏 SQL语句中关键字的执行顺序和编写顺序并不是一致的,可能会错乱 eg: select id,name from userinfo;我们先写的select再写的from,但是执 ...

  6. JavaScript:操作符:正负号和自增自减及其隐式转换数据类型

    正负号 正号即加号,负号即减号,运算结果同数学意义一样: 对非数字类型进行正负号运算,会隐式转换为数字,再进行运算: 一些特殊的非数字,转换情况同算术运算符: 自增自减 自增即为++,自减即为--. ...

  7. [数据与分析可视化] D3入门教程2-在d3中构建形状

    d3.js入门教程2-在 d3.js中构建形状 文章目录 d3.js入门教程2-在 d3.js中构建形状 形状的添加 圆形的添加 矩形的添加 线段的添加 文本的添加 折线的添加 区域的添加 圆弧的添加 ...

  8. TiDB 底层存储结构 LSM 树原理介绍

    作者:京东物流 刘家存 随着数据量的增大,传统关系型数据库越来越不能满足对于海量数据存储的需求.对于分布式关系型数据库,我们了解其底层存储结构是非常重要的.本文将介绍下分布式关系型数据库 TiDB 所 ...

  9. C# lock 、 Monitor Wait、Pulse和PulseAll 的区别和用法(转载)

    1.Monitor.Wait方法当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有对对象的独占使用.Wait()就是交出锁的使用权,使线程 ...

  10. STM32 的学习方法

    前言 学习知识要掌握有效的学习方法,学习技术也是一样,本篇分享关于我学习 STM32 后总结的学习方法. 推荐的学习方法 系统学习 在网上购买一款开发板,使用开发板+开发板配套视频教程+开发板配套源码 ...