声明类

Java中的语法和C一样,语句都是以分号结束,区分大小写。

在Java技术中采用下列方法声明类:

<modifier>  class  <name>{

<attribute_declaration>

<constructor_declaration>

<method_declaration>

}

说明:

<modifier>:暂时只用"public",含义为:可以被所有其它类访问。或者不加public, 在修饰类的访问权限的时候,只有两种:1,就是加上public,表示所有类都可以访问。 2,就是什么也不写,表示本包访问权限,在讲到包的含义时再理解。

<name>:任何合法的标识符。它代表所声明类的名称。

Java中的标识符(类名,变量名,方法名)是由字母,数字,下划线(_),美圆符($)组成,数字不能用于标识符的开始。其中长度不受限制,不能使用java中的关键字,并且是区分大小写的。比如:class,void等关键字。Java中的关键字都是由小写的字母组成的,所以在我们并不知道java中有那些关键字的情况下,在定义标识符的时候,只要不全是小写的字母,就不会和java中的关键字相冲突。

<attribute_declaration>:声明属性。也就是说用变量表示事物的状态。

<constructor_declaration>:声明构造函数。也叫构造方法,也叫构造器。是用来实例化该类的实例(对象)的。

<method_declaration>:声明方法。来说明事物能够做的事情,也就是行为。

注意:属性,方法,构造函数在类中的顺序没有固定的约束。一般习惯性地先声明属性,后声明方法(习惯性地把构造方法写普通方法的前面)。

所以Person这个类的初始版本应该是:

public  class Person{

}

声明属性

<modifier>  <type>  <name>  [ = <default_value> ];

说明:

<name>:任何合法的标识符。它代表所声明属性的名称。

<modifier>:暂时只用“public”和“private”,其中private含义为:仅能被所属类中的方法访问,这称作封装。

<type>:可以是任何原始类型(基本类型)或其它类(引用类型)。

[=<default_value>]是给属性初始化为给定的值。如果没有的话初始化为默认的值。(基本类型的初始化相应的值:比如:int,short,byte,long,char(Unicode码值)初始化为0,float,double初始化为0.0,boolean初始化为false,所有的引用类型都初始化为null)。

注意:Java语言与其它语言不同,在JAVA中声明属性和初始化属性值必须一句完成。不能分开写:先声明,再另起一行初始化。

例如:

private int a ;

a=5;   //错误

private int b=6;//声明一个属性 b,并初始化为6;

在类里面除了声明语句之外,是不能直接写其它执行语句的。 a=5 是赋值语句。如果要执行语句应放在语句块(方法块,初始化块等)里执行。

据此,我们的Person类成为如下样子

public  class Person{

private double weight;

}

声明构造器

<modifier> <class_name>  (<parameter>) {

<statement>

}

说明:

<class_name>:是类名,构造器的名字和类名必须一样。

<modifier>:可以是public,指明可以被任何其它代码访问。private,指明仅能被同一个类中的其它代码访问。

<parameter>:向构造器传递参数,可以没有参数。传递多个参数时,参数之间用逗号分开。每个参数由参数类型和标识符组成,这和声明属性的方式很类似,但是不能向参数赋初始值。 

注意:构造器必须没有返回类型,并且构造方法的名字和类名必须一样。当一个类里面如果没有声明构造方法,那么虚拟机将自动给该类一个默认的构造器(不带参数的构造器)。如果在该类里面,定义了带参数的构造方法,那么虚拟机将不再为该类提供默认的构造方法,也就是该类不能按缺省方式构建了。

我们的类此时变成:

public class Person {

private double weight;



// 该类的默认的构造器

public Person() {

}



// 带参数的构造器

public Person(double d_weight) {

weight = d_weight; // 实例化对象时,给weight属性赋初始值

}

}

声明成员方法

<modifier> <return_type> <name> ( <parameter> ){

<statement>

}



<name>:任何合法的标识符。

<modifier>:可以是public,指明可以被任何其它代码访问,private:指明仅能被同一个类中的其它代码访问。

< return_type>:指明方法返回值的类型。假如方法不返回值,应被声明为void。

<parameter>:向方法传递参数。传递多个参数时,参数之间用逗号分开。每个参数由参数类型和标识符组成。 

注意:方法必须有返回类型,返回类型为void和没有返回类型是不一样的。除了返回类型void外,有其它返回类型的方法块里必须有return语句。

我们的类此时变成(Person.java)

public class Person {

private double weight;



// 该类的默认的构造器

public Person() {

}



// 带参数的构造器

public Person(double d_weight) {

weight = d_weight; // 实例化对象时,给weight属性赋初始值

}



public void eat(double temp) { // 吃饭的方法

weight = weight + temp; // 吃多少,体重就增加多少

}



public double getWeight() {// 得到人的体重属性

return weight; //返回weight属性

}

}



private封装

在类里面声明属性的时候,一般把属性的访问权限定义成private,封装的要求。这样只能在类里面访问该属性,在类的外面是没有访问的权限的,也就是说对于该类的实例(对象),是不能够直接访问该对象的属性的。这样就会保护对象状态不会非法改变。

比如,人的体重是不能直接修改的,通过吃饭可以增加人的体重,如果该人很瘦,是不能直接把20斤牛肉放到该人身上,就算增加该人的体重的。同样的道理,如果该人很胖,也不能够从该人身上割下20斤肉,而让体重下降20斤。

所以我们在以上的类中声明weight属性为private

public 公共访问

在类里面声明方法的时候,一般把该方法定义成public访问权限。在程序运行的时候,就是通过对象和对象之间的交互来实现的。为了保证对象都能够执行功能(方法),应该把方法的访问权限定义成public。

我们对方法getWeight()的处理就是这样。

下面是测试Person的PersonApp.java

public class PersonApp {

public static void main(String[] args) {

// p1是声明的变量,类型是Person类型的,并且引用了Person类的一个对象,且使用默认的构造器构造对象

Person p1 = new Person();

// p2 同p1,使用带参数的构造器

Person p2 = new Person(120);



// p1所引用的对象(简称p1对象),吃了2.5斤

p1.eat(2.5);

// p2 对象 吃了4.3斤

p2.eat(4.3);



// 打印出p1的体重

System.out.println("p1的体重为:" + p1.getWeight());

// 打印出p2的体重

System.out.println("p2的体重为:" + p2.getWeight());

编译和运行的过程如下图:

更多Java视频教程

posted @ 2012-02-29 15:31  JAVA教程  阅读(674)  评论(0编辑  收藏  举报