您的位置:首页 > 编程语言 > Java开发

Java面向对象编程 (Java 类的基本构成)

2014-02-05 17:35 323 查看
1: Java 类的定义形式

一个完整的 Java 类通常由下面六个部分组成:

包定义语句

import 语句

类定义{

成员变量

构造方法

成员方法

}

其中:只有类定义和“{}”是不可或缺的,其余部分都可以根据需要来定义。

类=属性+行为

访问修饰符

Java 语言允许对类中定义的各种属性和方法进行访问控制,即规定不同的保护等级来限

制对它们的使用。为什么要这样做?Java 语言引入类似访问控制机制的目的在于实现信息

的封装和隐藏。Java 语言为对类中的属性和方法进行有效地访问控制,将它们分为四个等级:

private, 无修饰符, protected, public,具体规则如下:



变量和方法可以处于四个访问级别中的一个:公共,受保护,无修饰符或私有。类可以

在公共或无修饰级别。

变量、方法或类有缺省(无修饰符)访问性,如果它没有显式受保护修饰符作为它的声

明的一部分的话。这种访问性意味着,访问可以来自任何方法,当然这些方法只能在作为对

象的同一个包中的成员类当中。

以修饰符 protected 标记的变量或方法实际上比以缺省访问控制标记的更易访问。一个

protected 方法或变量可以从同一个包中的类当中的任何方法进行访问,也可以是从任何子

类中的任何方法进行访问。当它适合于一个类的子类但不是不相关的类时,就可以使用这种

受保护访问来访问成员。

类定义

Java 程序的基本单位是类,你建立类之后,就可用它来建立许多你需要的对象。Java

把每一个可执行的成分都变成类。

类的定义形式如下:

<权限修饰符> [一般修饰符] class <类名> {

[<属性定义>]

[<构造方法定义>]

[<方法定义>]

}

这里,类名要是合法的标识符。在类定义的开始与结束处必须使用花括号。你也许想建

立一个矩形类,那么可以用如下代码:

public class Rectangle{

......//矩形具体的属性和方法

}

构造方法

什么是构造方法

类有一个特殊的成员方法叫作构造方法,它的作用是创建对象并初始化成员变量。在创

建对象时,会自动调用类的构造方法。

构造方法定义规则

Java 中的构造方法必须与该类具有相同的名字,并且没有方法的返回类型(包括没有

void)。另外,构造方法一般都应用 public 类型来说明,这样才能在程序任意的位置创建类

的实例--对象。

示例

下面是一个 Rectangle 类的构造方法,它带有两个参数,分别表示矩形的长和宽:

public class Rectangle{

public Rectangle(int w,int h) {

width=w;

height=h;

}

}

说明

每个类至少有一个构造方法。如果不写一个构造方法,Java 编程语言将提供一个默认的,

该构造方法没有参数,而且方法体为空。

注意:如果一个类中已经定义了构造方法则系统不再提供默认的构造方法。

属性

属性是什么


简单点说,属性就是对象所具有的静态属性。

定义规则

Java 类中属性的声明采用如下格式:

访问修饰符 修饰符 类型 属性名称=初始值;

访问修饰符:可以使用 四种不同的访问修饰符中的一种,包括 public(公共的)、

protected(受保护的),无修饰符和 private(私有的)。public 访问修饰符表示属性可以

从任何其它代码调用。private 表示属性只可以由该类中的其它方法来调用。protected 将

在以后的课程中讨论。

修饰符:是对属性特性的描述,例如后面会学习到的:static、final 等等。

类型:属性的数据类型,可以是任意的类型。

属性名称:任何合法标识符

初始值:赋值给属性的初始值。如果不设置,那么会自动进行初始化,基本类型使用缺

省值,对象类型自动初始化为 null。

说明

属性有时候也被称为成员变量、实例变量、域,它们经常被互换使用。

方法

方法是什么


方法就是对象所具有的动态功能。

定义规则

Java 类中方法的声明采用以下格式:

访问修饰符 修饰符 返回值类型 方法名称 (参数列表) throws 异常列表 {方法体}

访问修饰符:可以使用 四种不同的访问修饰符中的一种,包括 public(公共的)、

protected(受保护的),无修饰符和 private(私有的)。public 访问修饰符表示方法可以

从任何其它代码调用。private 表示方法只可以由该类中的其它方法来调用。protected 将

在以后的课程中讨论。

修饰符:是对方法特性的描述,例如后面会学习到的:static、final、abstract、

synchronized 等等。

返回值类型:表示方法返回值的类型。如果方法不返回任何值,它必须声明为 void(空)。

Java 技术对返回值是很严格的,例如,如果声明某方法返回一个 int 值,那么方法必须从

所有可能的返回路径中返回一个 int 值(只能在等待返回该 int 值的上下文中被调用。)

方法名称:可以是任何合法标识符,并带有用已经使用的名称为基础的某些限制条件。

参数列表:允许将参数值传递到方法中。列举的元素由逗号分开,而每一个元素包含一

个类型和一个标识符。在下面的方法中只有一个形式参数,用 int 类型和标识符 days 来声

明:public void test(int days){}

throws 异常列表:子句导致一个运行时错误(异常)被报告到调用的方法中,以便以

合适的方式处理它。异常在后面的课程中介绍。

花括号内是方法体,即方法的具体语句序列。

示例

比如现在有一个“车”的类——Car,“车”具有一些基本的属性,比如四个轮子,一个

方向盘,车的品牌等等。当然,车也具有自己的功能,也就是方法,比如车能够“开动”—

—run。要想车子能够开动,需要给车子添加汽油,也就是说,需要为 run 方法传递一些参

数“油”进去。车子跑起来过后,我们需要知道当前车辆运行的速度,就需要 run 方法具有返回值“当前的速度”。

package cn.javass.javatest;

public class Car {// 车这个类

private String make;// 一个车的品牌

private int tyre;// 一个车具有轮胎的个数

private int wheel;// 一个车具有方向盘的个数

public Car() {

// 初始化属性

make = "BMW";// 车的品牌是宝马

tyre = 4;// 一个车具有4个轮胎

wheel = 1;// 一个车具有一个方向盘

}

/**

* 车这个对象所具有的功能,能够开动

* @param oil 为车辆加汽油的数量

* @return 车辆当前运行的速度

*/

public double run(int oil) {

// 进行具体的功能处理

return 200.0;

}

}

形参和实参

形参:
就是形式参数的意思。是在定义方法名的时候使用的参数,用来标识方法接收的

参数类型,在调用该方法时传入。

实参:就是实际参数的意思。是在调用方法时传递给该方法的实际参数。

比如:上面的例子中“int oil”就是个形式参数,这里只是表示需要加入汽油,这个方

法才能正常运行,但具体加入多少,要到真正使用的时候,也就是调用这个方法的时候才具

体确定,加入调用的时候传入“80”,这就是个实际参数。

形参和实参有如下基本规则:

(1):形参和实参的类型必须要一致,或者要符合隐含转换规则

(2):形参类型不是引用类型时,在调用该方法时,是按值传递的。在该方法运行时,

形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的值复制一份,在该

方法运行结束的时候形参被释放,而实参内容不会改变。

(3):形参类型是引用类型时,在调用该方法时,是按引用传递的。运行时,传给方法

的是实参的地址,在方法体内部使用的也是实参的地址,即使用的就是实参本身对应的内存

空间。所以在函数体内部可以改变实参的值。

如何使用一个 Java 类

1:new 关键字

假如定义了一个表示日期的类,有三个整数变量;日、月和年的意义即由这些整数变量

给出。如下所示:

class MyDate 

int day;

int month;

int year;



名称 MyDate 按照大小写的有关约定处理,而不是由语意要求来定。

那么怎么来使用这个类呢:在你可以使用变量之前,实际内存必须被分配。这个工作是

通过使用关键字 new 来实现的。如下所示:

在一个方法体中,声明

MyDate today;

today = new MyDate();

第一个语句(声明)仅为引用分配了足够的空间,而第二个语句则通过调用对象的构造方

法为构成 MyDate 的三个整数分配了空间。对象的赋值使变量 today 重新正确地引用新的对

象。这两个操作被完成后,MyDate 对象的内容则可通过 today 进行访问。

关键字 new 意味着内存的分配和初始化,new 调用的方法就是类的构造方法。

使用一个语句同时为引用 today 和由引用 today 所指的对象分配空间也是可能的。

MyDate today = new MyDate();

如何使用对象中的属性和方法

要调用对象中的属性和方法,使用“.”操作符。

例如:

today.day = 26;

today.month = 7;

today.year = 2008;

this 关键字

关键字 this 是用来指向当前对象或类实例的,功能说明如下:

点取成员

this.day 指的是调用当前对象的 day 字段,示例如下:

public class MyDate {

private int day, month, year;

public void tomorrow() {

this.day = this.day + 1;

//其他代码

}

}

Java 编程语言自动将所有实例变量和方法引用与 this 关键字联系在一起,因此,使用

关键字在某些情况下是多余的。下面的代码与前面的代码是等同的。

public class MyDate {

private int day, month, year;

public void tomorrow() {

day = day + 1; // 在 day 前面没有使用 this

//其他代码

}

}

区分同名变量

也有关键字 this 使用不多余的情况。如,需要在某些完全分离的类中调用一个方法,并

将当前对象的一个引用作为参数传递时。例如:

Birthday bDay = new Birthday (this);

还有一种情况,就是在类属性上定义的变量和方法内部定义的变量相同的时候,到底是

调用谁呢?例如:

public class Test{

int i = 2;

public void t(){

int i = 3; //跟属性的变量名称是相同的

System.out.println(“实例变量 i=”+ this.i);

System.out.println(“方法内部的变量 i=”+ i);

}

}

也就是说:“this.变量”调用的是当前属性的变量值,直接使用变量名称调用的是相

对距离最近的变量的值。

作为方法名来初始化对象

也就是相当于调用本类的其它构造方法,它必须作为构造方法的第一句。示例如下:

public class Test {

public Test(){

this(3);//在这里调用本类的另外的构造方法

}

public Test(int a){

}

public static void main(String[] args) {

Test t = new Test();

}

}

set和get方法:

有GET和SET是为了封装private的数据,这样做是面向对象设计的思想。向外提供接口,而不让外面直接调用自己的成员。提供对属性值进行有效性验证的方法,防止随意改动属性的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: