【吉林大学Java程序设计】第3章:类与对象

面向对象程序设计概要

与C++面向对象思想相同。

面向过程与面向对象的区别:
在这里插入图片描述

面向对象设计的优点:
➢易维护:采用面向对象思想设计的结构,**可读性高**,由于**继承**的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
➢质量高:在设计时,可**重用**现有的、在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
➢效率高:根据设计的需要对现实世界的事物进行**抽象**,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
➢易扩展:由于**继承、封装、多态**的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

面向对象的三大特性:封装性、继承性、多态性

类、对象、消息的概念:
在这里插入图片描述
类(对象)之间的关系:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.Java类与对象基础

  • 类是组成Java程序的基本要素,既是组织程序代码的基本单位,也是面向对象程序设计的主体。
  • Java运行时系统通过自动垃圾回收机制周期性地清除无用对象,释放内存。
  • 其他同C++

2.Java类与对象扩展

2.1 构造方法(有时候又叫“构造器”)

相当于C++的构造函数
完成的是对象初始化的工作

2.2 垃圾回收机制

  • 垃圾回收机制GC(Garbage Collection)是Java语言的核心技术之一。
  • GC通过确定对象是否被活动对象引用来确定是否收集该对象。
  • 垃圾收集的一个潜在的缺点是它的开销影响程序性能。
  • 终结处理方法finalize()(Java 9已经弃用)
    • 在垃圾收集器将对象从内存中清除出去之前做必要
      的清理工作,是在垃圾收集器删除对象之前对这个
      对象调用的。
    • 不是C++中的析构函数,不能将作为通用的清理方
      法。
    • finalize与Java垃圾回收器的区别:不仅仅做内存
      回收,还有其他处理,如擦去屏幕上的画的图片。

2.3 static关键字

  • 用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化。
  • 用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static中不能访问非static的成员。
  • 用static声明的成员变量为类变量,不用static声明的成员变量为实例变量
    • 存储区别:类变量由多个对象实例共享一个内存区,共享同一个值;实例变量各自有各自的内存区,对于不同的对象实例而言,其对应的变量成员有不同的值。
    • 访问区别:类变量既可以通过对象实例名访问,也可以通过类名直接访问;实例变量必须在生成对象实例后通过对象实例名来访问。
  • 用static声明的方法为类方法,不用static声明的方法成员为实例方法
    • 在类方法不再是针对某个对象的调用,所以不能访问非静态成员。可以不生成类对象而直接通过类名访问类方法。

2.4 成员初始化次序

如下例:

  • public类(主类)为StaticInitialization,先初始化其静态成员,即先初始化Table t2
  • 到Table中仍然是先初始化静态成员,因此先后初始化1,b2,然后执行Table(),其中又有f(1)
  • 然后初始化Cupboard t3,其中又是先初始化其静态成员,Bowl b4,Bowl b5,接着初始化其非静态成员Bowl b3,然后执行Cupboard(),其中又有f(2)
  • public类的成员变量都初始化完了,开始执行main里的语句
  • Cupboard的静态成员已经初始化过了,此时只需初始化非静态成员Bowl b3,然后执行Cupboard(),f(2)
  • 之后同理
    在这里插入图片描述
    在这里插入图片描述

3.包:库单元

3.1 命名空间

  • Java引入了包(package)的机制,以提供类的多重命名空间,同时也负责类名空间管理。把因不同目的和不同工作而开发的类放在不同的包中,即使在出现相同的类名的时候,也可以很好地管理。包可以有一定的层次,对应着外存上的目录结构。
  • 为了区别于各种平台Java中采用了“.”来分隔目录,与域名地址不同的是,Java将主类从左侧写起。
  • Java中提供了大量的包(类库),如java.util、java.lang、java.swing,也可以建立自己的包。
    在这里插入图片描述

在这里插入图片描述

3.2 package

  • package语句放在Java源程序文件的第一行,指明该文件中定义的类存放到哪个包中,因此显然package语句只能有一条。程序中没有package语句,此时类将存放到默认包中。
  • 描述包的字符都用小写,内容要与文件系统中的内容对应。

3.3 import

  • import语句的作用是引入所需的,以供在程序中使用类库中现有的类。
  • import语句在程序中放在package语句之后,类定义之前。一个Java源程序中可以有多条import语句。
  • 要用java.util中的其他类(可以使用*表示所有的类)import java.util.*
  • 可能多个包中有相同的类名,所以要指明,以避免冲突
    在这里插入图片描述

4.Java标准类库

Java 有一系列功能强大的类库,功能相关的可重用类被组织成包。可重用类的继承层次和包的组织呈树型结构。我们在进行编程时要首先考虑如何充分利用已有可重用类来构造自己的新类。因此,了解和掌握Java可重用类是学习Java 程序设计的重要内容。

常用库:

  • java.lang包:提供了Java程序设计中最基础的类。如常用的String 类、Object 类等。
  • java.util包:包括许多具有特定功能的类,如Arrays,Date,Calendar 和Stack 等。
  • java.io包:主要包含与输入输出相关的类,这些类提供了对不同的输入和输出设备读写数据的支持。
  • javax.swing包:提供了创建图形用户界面元素的类。该包中包含定义窗口、对话框、按钮、复选框、列表、菜单、滚动条及文本域的类。
  • java.net包:包含与网络操作相关的类,如URL、InetAddress 和Socket 等。

4.1 java.lang包和java.util包

  • java.lang 包由解释程序自动加载,不需在程序中显式地使用语句import java.lang.*。
    • 提供常用的类、接口、一般异常、系统等编程语言的核心内容
      在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.2 java.lang.Object类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 java.lang.System类

在这里插入图片描述
在这里插入图片描述

4.4 java.lang.Math类

在这里插入图片描述
在这里插入图片描述

4.5 基本数据类型的封装类型

Java中一切都是对象,基本数据类型也被封装成对应的类

(1)Integer类

在这里插入图片描述

(2)Float类

在这里插入图片描述
在这里插入图片描述

(3)Character类

在这里插入图片描述

(4)Boolean类

在这里插入图片描述

4.6 String类与StringBuilder类、StringBuffer类

(1)String类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)StringBuilder类、StringBuffer类

在这里插入图片描述
区别如下图:

  • String类执行s1=s1+s2实际上是在堆中创建了一块新空间,存放"helloworld",然后s1引用了新空间
  • StringBuilder类执行s1.append(s2)是直接改变了原空间存储的内容
    在这里插入图片描述
    在这里插入图片描述
  • 对于经常修改的字符串,StringBuilder的运算时间远远好于String

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值