Java程序设计类与对象的基本概念(上)

Posted BkbK-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java程序设计类与对象的基本概念(上)相关的知识,希望对你有一定的参考价值。

类与对象的基本概念(上)

在这里插入图片描述

一、面向对象的基本概念

(1)面向对象程序设计&结构化程序设计

1.结构化程序设计

  • 通常由若干个程序模块组成,每个程序模块都可以是子程序或函数
  • 数据和功能分离,代码难于维护和复用

2.面向对象程序设计

  • 基本组成单位是类
  • 程序在运行时由类生成对象,对象是面向对象程序的核心
  • 对象之间通过发送消息进行通信,互相协作完成相应功能

(2)面向对象方法的特性

1.抽象

  • 忽略问题中与当前目标无关的方面
  • 只关注与当前目标有关的方面

2.封装

封装是一种信息隐蔽技术

  • 利用抽象数据类型将数据和基于数据的操作封装在一起
  • 用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的
  • 封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象

3.继承

基于已有类产生新类的机制

  • 是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的子类(也称为派生类);
  • 在继承过程中子类继承了超类的特性,包括方法和实例变量;
  • 子类也可修改继承的方法或增加新的方法;
  • 有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量。

Java语言仅支持单继承:
• 单继承: 一个子类只有单一的直接超类。
• 多继承:一个子类可以有一个以上的直接超类。

4.多态

  • 超类及其不同子类的对象可以响应同名的消息,具体的实现方法却不同;
  • 主要通过子类对父类方法的覆盖来实现。

(3)类与对象的关系

类是对一类对象的描述, 对象是类的具体实例。

1.类的定义

  • 将属性及行为相同或相似的对象归为一类
  • 类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为
  • 在面向对象的程序设计中,每一个对象都属于某个特定的类

2.对象的定义

  • 现实世界中
    • 万物皆对象
    • 都具有各自的属性,对外界都呈现各自的行为
  • 程序中
    • 一切都是对象
    • 都具有标识 (identity), 属性和行为(方法)
    • 通过一个或多个变量来保存其状态
    • 通过方法(method) 实现他的行为

二、类与对象的创建

(1)类的声明

[public] [abstract | final] class 类名称
[extends 父类名称] 
[implements 接口名称列表]
{ 
	数据成员声明及初始化;
	方法声明及方法体;
}
  • class: 表明其后声明的是一个类。
  • extends: 如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后
  • implements: 如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后
  • public: 表明此类为公有类
  • abstract: 指明此类为抽象类
  • final: 指明此类为终结类

(2)对象的声明与创建

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new创建对象时,会调用构造方法初始化对象。
  • 对象引用声明

    声明一个引用变量时并没有生成对象,引用变量可以被赋以空值

    类名 引用变量名;
    
  • 对象的创建

    new关键字返回一个对象的引用

    new <类名>(构造函数参数)
    

三、数据成员与方法成员

(1)数据成员

表示对象的状态 ,可以是任意的数据类型(简单类型,类,口,数组等)

1.数据成员声明

[public | protected | private] 
[static][ final][transient] [volatile]
数据类型 变量名1[=变量初值], 变量名2[=变量初值],;

publicprotectedprivate 为访问控制符。
static指明这是一个静态成员变量(类变量)。
final指明变量的值不能被修改。
transient指明变量是不需要序列化的。
volatile指明变量是一个共享变量。

2.数据成员类型

一个类可以包含以下类型变量:

  • 局部变量

    在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

  • 成员变量(实例变量)

    成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

    • 没有static修饰的变量(数据成员)称为实例变量;
    • 存储所有实例都需要的属性,不同实例的属性值可能不同;
    • 可通过下面的表达式访问实例属性的值
      <实例名>.<实例变量名>
      
  • 类变量(静态变量)

    类变量也声明在类中,方法体之外,但必须声明为 static 类型。

  • static修饰。

  • 在整个类中只有一个值,为该类的所有对象共享

  • 类初始化的同时就被赋值。

  • 适用情况

    • 类中所有对象都相同的属性。
    • 经常需要共享的数据。
    • 系统中用到的一些常量值。
  • 引用格式

    <类名 | 实例名>.<类变量名>
    

(2)方法成员

1.方法的声明

[public | protected | private] 
[static][ final][abstract] [native] [synchronized]
返回类型 方法名([参数列表]) [throws exceptionList]
{
	方法体 
}
  • publicprotectedprivate 控制访问权限。
  • static指明这是一个类方法(静态方法)。
  • final指明这是一个终结方法。
  • abstract指明这是一个抽象方法。
  • native用来集成java代码和其它语言的代码。
  • synchronized用来控制多个并发线程对共享数据的访问。

返回类型

  • 方法返回值的类型,可以是任意的Java数据类型;
  • 当不需要返回值时,返回类型为void。

参数类型

  • 简单数据类型、引用类型(数组、类或接口);
  • 可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数。

方法体:

  • 方法的实现;
  • 包括局部变量的声明以及所有合法的Java语句;
  • 局部变量的作用域只在该方法内部。

throws exceptionList

  • 抛出异常列表。

2.参数传递

  • 值传递:参数类型为基本数据类型时
  • 引用传递:参数类型为对象类型或数组时

可变长参数:

static double maxArea(Circle c, Rectangle... varRec) {
	Rectangle[] rec = varRec;
	for (Rectangle r : rec) {
		//…
	} 
}
  • 可变长参数使用省略号表示,其实质是数组。
  • 对于具有可变长参数的方法,传递给可变长参数的实际参数可以是零个到多个对象。

3.实例方法和类方法

①实例方法

表示特定对象的行为, 声明时前面不加static修饰符

  • 实例方法调用

    给对象发消息,使用对象的某个行为/功能:调用对象的某个方法。

     <对象名>.<方法名>([参数列表])
    

    <对象名>为消息的接收者。

②类方法

表示类中对象的共有行为,也称为静态方法,声明时前面需加static修饰,不能被声明为抽象的。

  • 类方法的调用

    可以类名直接调用,也可用类实例调用。

     <对象名>.<方法名>([参数列表])
    
     <类名>.<方法名>([参数列表])
    

四、包

包是一组类的集合,一个包可以包含若干个类文件,还可包含若干个包

(1)包的作用

  • 将相关的源代码文件组织在一起。 (把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。)
  • 类名的空间管理,利用包来划分名字空间可以避免类名冲突。 (如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。)
  • 提供包一级的封装及存取权限。(包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。)

(2)包的命名

  • 每个包的名称必须是“独一无二”的。
  • Java中包名使用小写字母表示。

命名方式建议:

  • 将机构的Internet域名反序,作为包名的前导;
  • 若包名中有任何不可用于标识符的字符,用下划线替代;
  • 若包名中的任何部分与关键字冲突,后缀下划线;
  • 若包名中的任何部分以数字或其他不能用作标识符起始的字符开头,前缀下划线。

(3)Java编译单元

  • 一个Java源代码文件称为一个编译单元,由三部分组成:
    • 所属包的声明(省略,则属于默认包);
    • Import (引入)包的声明,用于导入外部的类;
    • 类和接口的声明。
  • 一个编译单元中只能有一个public类,该类名与文件名相同,编译
    单元中的其他类往往是public类的辅助类,经过编译,每个类都会
    产一个class文件。

(4)包的声明

  • 1.命名的包(Named Packages)
    • 其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。

    • 包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。

    • 例如: package Mypackage;

  • 2.默认包(未命名的包)
    • 如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。
    • 不含有包声明的编译单元是默认包的一部分。

注:
• 包名就是文件夹名,即目录名;
• 目录名并不一定是包名;

(5)包的引入

为了使用其它包中所提供的类,需要使用import语句引入所需要的类。
Java编译器为所有程序自动引入包java.lang。

1.import 关键字

import package1[.package2…].(classname|*);
  • package1[.package2…]表明包的层次,对应于文件目录;
  • classname指明所要引入的类名;
  • 如果要引入一个包中的所有类,可以使用星号(*)来代替类名。

2.静态引入

如果在程序中需要多次使用静态成员,则每次使用都加上类名太繁
琐。用静态引入可以解决这一问题

  • 单一引入是指引入某一个指定的静态成员,例如:

    import static java.lang.Math.PI; 
    
  • 全体引入是指引入类中所有的静态成员,例如:

    import static java.lang.Math.*;
    

以上是关于Java程序设计类与对象的基本概念(上)的主要内容,如果未能解决你的问题,请参考以下文章

Java复习类与对象的基本概念

201671010135 2016--2017--《java程序结构设计:对象与类》

java基础面向对象之类与对象

Java类与对象

一:Java之面向对象基本概念

苏浪浪 201771010120 第四周 Java基本程序设计总结