1.
源程序:Birthday.java
public class Birthday
{
public String year;
public String month;
public String day;
public Birthday()
{
year=”0000”;
month=”00”;
day=”00”;
}
public Birthday(String y,String m,String d)
{
year=y;
month=m;
day=d;
}
public String getBirthday()
{
String fullbirthday=month+”/”+”/”+day+”/”+year;
return fullbirthday;
}
}
源程序:useBirthday.java
public class useBirthday
{
public static void main(String argv[])
{
Birthday birthday1=new Birthday();
Birthday birthday2=new Birthday("1949","10","01");
System.out.println(birthday1.getBirthday());
System.out.println(birthday2.getBirthday());
}
}
看一下第二个程序useBirthday.java,这是个Java应用程序,main方法中共有四条语句。前两条,看上去象是定义变量:
Birthday birthday1=new Birthday();
Birthday birthday2=new Birthday("1949","10","01");
在Java语言中并没有Birthday这种变量类型。Java语言编译器在useBirtday.java程序所在目录中发现了包含Birthday类定义的Birthday类:Birthday.class。
也就是说,这两条语句定义了2个属于Birthday类的对象:birthday1和birthday2。从Birthday.java程序中,我们可以看到Birthday类包含三个字符型成员变量:
public String year;
public String month;
public String day;
我们将Birthday称为类,而将birthday1和 birthday2称为对象。类是一类事物,而对象则是一个个体。
成员变量是一个形象的术语,表示这些变量属于这个对象,属于这个类。
同时,分别使用new Birthday()和new Birthday(“1949”,”10”,”01”)为它们赋初值。
1)Birthday birthday1=new Birthday();
在这一句中,调用的是Birthday类中的Birthday()方法,我们从Birthday.java中可以看到这个方法实现:
public Birthday()
{
year=”0000”;
month=”00”;
day=”00”;
}
也就是说,它将对象birthday1的三个成员变量year,month和day分别赋予了初值“0000”,“00”和“00”。
2) Birthday birthday2=new Birthday("1949","10","01");
在这一条语句中,虽然方法名同是Birthday,但它带上了参数,所以它调用的是Birthday类中的Birthday(String y,String m,String d)方法。这个方法的实现是:
public Birthday(String y,String m,String d)
{
year=y;
month=m;
day=d;
}
也就是将其所带的参数值,分别赋值给三个成员变量。在本例中,“1949”赋值给year,“10”赋值给month,“01”赋值给day。
这个程序中另两条语句则十分相似:
System.out.println(birthday1.getBirthday());
System.out.println(birthday2.getBirthday());
很明显,这两条语句的用途是打印出birthday1和birthday2两个对象的一些信息。什么信息呢?我们可以发现这两条语句中都使用了Birthday类中的getBirthday方法。
一些提示:
大家注意观察在上面的语句是如何调用getBirthday方法的:
birthday1.getBirthday()
前面是对象名,后面是方法名,中间用“.”连接。请记住这个“.”,它经常被使用。形象的说,它就表示“的”。即birthday1的getBirthday方法。同样,我们可以使用这样在方法来访问它的成员变量:birthday1.year,即对象birthday1的成员变量year。
我们就来看一下这个方法做了什么:
public String getBirthday()
{
String fullbirthday=month+”/”+”/”+day+”/”+year;
return fullbirthday;
}
“+”在字符串操作中的用途是用来进行字符串合并的。我们通过month+”/”+”/”day+”/”+year语句,把birthday1和birthday2两个对象的三个成员变量组成了一个“月/日/年”的常用日期表示方法。
然后,getBirthday方法将这个用“月/日/年”表示法表示的生日日期返回(使用return方法)给System.out.println,这样,我们就得到了如图8-2的输出:
00/00/0000
10/01/1949
通过上面的实例与讲解,我们可以得出创建一个新类的方法:
1) 构思所需类的成员变量和成员方法;
2) 用以下格式来编写类:
类修饰符 class 类名
{
成员变量定义;
……
成员方法定义;
……
}
3) 使用javac编译这个类;
4) 然后我们就可以在其它类中使用这个类。
注意:
当你编译使用自定义类(如Birthday)的程序(如useBirthday.java)时,这个类(Birthday.class)必须与程序(useBirthday.java)位于相同的目录中,或者在系统变量CLASSPATH定义的目录中。否则编译时将找不到这个类,以致程序无法编译成功。
一些提示:
当你需要同时编译几个Java文件时,你可以使用一条命令来完成。例如:
javac Birthday.java useBirthday.java
javac程序将一起编译所有这些文件。我们知道编译useBirthday.java时,需要用到Birthday.class(就是由Birthday.java编译生成的)。那么大家可能会以为,我们一定要将Birthday.java放在前面,以确保能够先编译生成Birthday.class。
其实并不需要,Java编译器能够智能地处理,你完全可以将useBirthday.java放在Birthday.java前面。
我们在Birthday类定义中,发现有两个与类Birthday同名的成员方法:
public Birthday()
public Birthday(String y,String m,String d)
这种与类同名的成员方法称为构造器。每当使用new操作符创建属于这个类的对象时,就会执行构造器方法。
一个类可以有多个构造器,在使用new操作符时,执行哪个构造器则取决于它所还的参数。如:
1)Birthday birthday1=new Birthday();
在这条语句中,由于调用Birthday方法时,并未有任何参数,所以将调用Birthday类的构造器Birthday()。
2) Birthday birthday2=new Birthday("1949","10","01");
而在这条语句中,调用Birthday方法所带的参数与Birthday(String y,String m,String d)相吻合,所以将调用Birthdya类的构造器Birthday(String y,String m,String d)。因些,将完成以下赋值工作:
1)year=y; & year=“1949”
2)month=m;& month=“10”
3)day=d; & day=“01”
注意: 如果调用时的参数与所有构造器不吻合,将使Java编译器在编译程序时报错,使得无法编译成功。
==========================================================================
以上为本人根据LinuxAID网站的教材学习所做的笔记,欢迎大家转载,但是请注意出处,并注明作者为“暂住证”.