Java 类与对象
面向对象
面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向对象语言的一切操作都以对象为基础,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。Java作为一种面向对象语言。支持以下基本概念:多态、继承、封装、抽象、类、对象、实例、方法、重载。
面向对象程序设计(OOP)主要体现下列3个特性
- 封装
面向对象编程核心思想之一就是将数据和对数据的操作封装在一起。通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,比如类的概念。
更多参见:Java 封装。- 继承
继承体现了一种先进的编程模式。子类可以继承父类的属性和功能,即子类继承了父类所具有的数据和数据上的操作,同时又可以增添子类独有的数据和数据上的操作。
更多参见:Java 继承。- 多态
多态是面向对象编程的又一重要特征。有两种意义的多态,一是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同。另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。
更多参见:Java 多态。
类
- 类是相同或相似对象的一种抽象,是对象的一个模板,它描述一类对象的行为和状态。
- 属性(成员变量)是对象具有的特征,对象的行为通过方法(成员函数)去实现。
- 构造方法用来初始化,方法名与类名一样,没有返回值,可以重载。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
类声明
语法
class 类名 { 类体 }
- 类名每个字的首字母大写,含有大小写。例如,
MyClass
,HelloWorld
,Time
等。更多java代码规范,参见:Google Java 编程风格指南。- 类体由两个部分组成:一个是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。
- 变量定义部分所定义的变量成为类的成员变量,在方法体中定义的变量和方法的参数被成为局部变量。更多参见:Java 变量类型。
- 方法的定义包括方法的声明和方法体。更多参见:Java 方法。
注:可以在定义成员变量时对其进行初始化,但是对成员变量的操作只能放在方法中,下面的操作是不可以的:
class A { int a; a = 10; }
因为类体的内容只有成员变量的定义和方法的定义两部分组成。
创建对象
语法
类名 对象名 = new 构造方法;**
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字new来创建一个对象,为声明的对象分配内存。
- 初始化:使用new创建对象时,会调用构造方法初始化对象(没有则系统会调用默认的构造方法)。
源文件声明规则
- 一个源文件中只能有一个public类,源文件的名称应该和public类的类名保持一致。
- 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
- 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
Package
- 包主要用来对类和接口进行分类。可以避免重名带来的冲突,也便于管理。
- 有package语句的.java文件必须放在package名对应的目录之下,而生成的class文件也要放在对应的目录结构之下才能正常运作。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
- 不仅是我们这样利用包名来区分类,系统也是这样做的。
import
- import只是一种让你偷点懒少打字的方法,只是请编译器帮你打字。比如你现在要用到a.b.c文件下的类cla,一直写a.b.c.cla显然是很麻烦的,你可以在开头写上import a.b.c.cla,当程序中出现cla时,它就知道这是a.b.c.cla。或者在开头写上import a.b.c.*(只能导入一个包,不能导入多个),程序碰到不认识的类就会去a.b.c里找。import 的功能到此为止,它不像 #include 一样,会将档案内容载入进来。
- 系统自动引入java.lang包中的所有类,因此不需要显示地使用import语句引入该包的所有类。java.lang包是Java 的核心类库,它包含了运行Java程序必不可少的系统类。
- 也可以使用 import 语句引入自己的包,不过必须在 classpath 中指明包的位置。
- 显示地给出包名,就可以不使用 import ,不过 import 存在意义不就是为了不这么麻烦。
- 从 Java SE 5.0 开始,import 语句不仅可以导入类,还增加了导入静态方法和静态域的功能。静态导入的两个使用功能是算术函数和笨重的常量。如果对Math类使用静态导入,就可以采用更加自然的方式使用算术函数。如果需要使用大量带有冗长名字的常量,就应该使用静态导入。
参考链接
- 菜鸟教程:Java 对象和类
- 实验楼:Java编程语言(新版)
- Java的package和import机制
- Java核心技术 卷Ⅰ基础知识 原书第8版
- Java2实用教程 (第三版)_ 耿祥义,张跃平