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

1: Java 类的定义形式
一个完整的 Java 类通常由下面六个部分组成:
包定义语句
import 语句
类定义{
成员变量
构造方法
成员方法
}
其中:只有类定义和“{}”是不可或缺的,其余部分都可以根据需要来定义。

类=属性+行为

访问修饰符

Java 语言允许对类中定义的各种属性和方法进行访问控制,即规定不同的保护等级来限
制对它们的使用。为什么要这样做?Java 语言引入类似访问控制机制的目的在于实现信息
的封装和隐藏。Java 语言为对类中的属性和方法进行有效地访问控制,将它们分为四个等级:
private, 无修饰符, protected, public,具体规则如下:

Java面向对象编程 (Java 类的基本构成)_第1张图片

变量和方法可以处于四个访问级别中的一个:公共,受保护,无修饰符或私有。类可以
在公共或无修饰级别。
变量、方法或类有缺省(无修饰符)访问性,如果它没有显式受保护修饰符作为它的声
明的一部分的话。这种访问性意味着,访问可以来自任何方法,当然这些方法只能在作为对
象的同一个包中的成员类当中。
以修饰符 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的数据,这样做是面向对象设计的思想。向外提供接口,而不让外面直接调用自己的成员。提供对属性值进行有效性验证的方法,防止随意改动属性的值

你可能感兴趣的:(java)