⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java入门(8).htm

📁 一本很容易入手
💻 HTM
📖 第 1 页 / 共 5 页
字号:
……
}
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  3) 使用javac编译这个类;</P>
                  <P>  4) 然后我们就可以在其它类中使用这个类。</P>
                  <P><B>  注意:</B></P>
                  <P>  当你编译使用自定义类(如Birthday)的程序(如useBirthday.java)时,这个类(Birthday.class)必须与程序(useBirthday.java)位于相同的目录中,或者在系统变量CLASSPATH定义的目录中。否则编译时将找不到这个类,以致程序无法编译成功。</P>
                  <P><B>  一些提示:</B></P>
                  <P>  当你需要同时编译几个Java文件时,你可以使用一条命令来完成。例如:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
 javac Birthday.java useBirthday.java
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  javac程序将一起编译所有这些文件。我们知道编译useBirthday.java时,需要用到Birthday.class(就是由Birthday.java编译生成的)。那么大家可能会以为,我们一定要将Birthday.java放在前面,以确保能够先编译生成Birthday.class。</P>
                  <P>  其实并不需要,Java编译器能够智能地处理,你完全可以将useBirthday.java放在Birthday.java前面。</P>
                  <P>  我们在Birthday类定义中,发现有两个与类Birthday同名的成员方法:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
 public Birthday()
 public Birthday(String y,String m,String d)
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  这种与类同名的成员方法称为构造器。每当使用new操作符创建属于这个类的对象时,就会执行构造器方法。</P>
                  <P>  一个类可以有多个构造器,在使用new操作符时,执行哪个构造器则取决于它所还的参数。如:</P>
                  <P>  1)Birthday birthday1=new Birthday();</P>
                  <P>  在这条语句中,由于调用Birthday方法时,并未有任何参数,所以将调用Birthday类的构造器Birthday()。</P>
                  <P>  2) Birthday birthday2=new Birthday("1949","10","01");</P>
                  <P>  而在这条语句中,调用Birthday方法所带的参数与Birthday(String y,String 
                  m,String d)相吻合,所以将调用Birthdya类的构造器Birthday(String y,String 
                  m,String d)。因些,将完成以下赋值工作:</P>
                  <P>  1)year=y; à year=“1949”</P>
                  <P>  2)month=m; à month=“10”</P>
                  <P>  3)day=d; à day=“01”</P>
                  <P><B>  注意:</B></P>
                  <P>  如果调用时的参数与所有构造器不吻合,将使Java编译器在编译程序时报错,使得无法编译成功。</P>
                  <P><B>  自测练习</B></P>
                  <P>  1) 如果我们定义一个名为car的类,那么存储这个类的源文件名可以是:________。</P>
                  <P>  a. car.class b.任意取名 c.class.java</P>
                  <P>  2) 一个类中,只能拥有一个构造器方法。_________</P>
                  <P>  a. 不对 b.对</P>
                  <P>  3) 一个构造器方法的方法名,___________________。</P>
                  <P>  a.与类同相同 b.可以根据需要取名 c.可以有多个不同名的构造器 </P>
                  <P>  4) 在______________________时,将调用构造器方法。</P>
                  <P>  a.定义一个属于该类的对象 b.调用new操作符</P>
                  <P>  c.打印属于该类的对象信息</P>
                  <P>  5) 当__________________时,编译使用自定义类的程序时将出错。</P>
                  <P>  a. 自定义类放在系统环境变量PATH(CLASSPATH未指定该目录)指定的目录中 </P>
                  <P>  b.与程序在同一个目录下 c.放在系统环境变量CALSSPATH指定的目录中</P>
                  <P>  6) 修改useBirthday.java程序中的语句:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
Birthday birthday1=new Birthday();
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  改为使用构造器Birthday(String y,String m,String d),使其结果相同。</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>  7) 
                  编写一个userName类,包含两个成员变量:firstname,lastname;并仿照Birthday类构建两个构造器方法,一个是带参数,一个是不带参数(将它们初始化为firstname,lastname);最后构建一个fullName方法,用来返回全名。</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P>   
                  ____________________________________________________________________</P>
                  <P><B>  练习答案</B></P>
                  <P>  1)c 
                  在Java语言中,要求存放类的文件必须与类同名,甚至连大小写都要完全一样。而car.class是编译后生成的,存放源文件应该是car.java。</P>
                  <P>  2)a 不对,在Java的类中,可以定义多个构造器方法。</P>
                  <P>  3)a 在Java语言中,要求构造器方法名与类名相同。</P>
                  <P>  4)b 调用new操作符时,才真正创建这个对象,这时调用构造器方法来构造它。这也是构造器名字的来历。</P>
                  <P>  5)a 
Java编译器会在当前目录和CLASSPATH指定的目录中寻找相应的类,而不会在PATH路径中查找。</P>
                  <P>  6) 
                  这个很简单,因为不带参数的构造器方法为其赋予了值“0000”、“00”和“00”,因此,我们可以使用带参的构造器来实现相同的工作:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
Birthday birthday2=new Birthday(“0000”,”00”,”00”); 
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  7) 
                  这里所要的新类很简单,它与我们前面的实例Birthday类十分类似,我们只需要在前面的定义中做一些修改就可以得到了。</P>
                  <P>  以下就是一个实例:</P>
                  <P>  源程序:Birthday.java</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
public class userName
{
 public String firstname;
 public String lastname;
 public userName()
 {
 firstname=”firstname”;
 lastname=”lastname”;
 }
 public userName(String first,String last)
 {
 firstname=first;
 lastname=last;
 }
 public String fullName()
 {
 String fullname=firstname+” ”+lastname;
 return fullname;
 }
}
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P><B>  8.2 说明类的特性</B></P>
                  <P><B>  8.2.1 private特性</B></P>
                  <P><B>  实例说明</B></P>
                  <P>  1.首先,我们输入以下源程序,构建一个People类:</P>
                  <P>  源程序:People.java</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
 public class People 
 {
public String name;
public String sex;
private String age;
 }
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  2.接着使用javac编译这个类:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
 c:javastudy&gt; javac People.java
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  3.接下来,我们构建一个使用People类的程序usePeople.java</P>
                  <P>  源程序:usePeople.java</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
public class usePeople 
{
 public static void main(String argv[])
 {
 People people1=new People();
 people1.name=”Kate”;
 people1.sex=”female”;
 people1.age=”23”;
 System.out.println(“Name:”+people1.name);
 System.out.println(“Sex:”+people1.sex);
 System.out.println(“Age:”+people1.age);
 }
}
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  3. 执行以下命令,编译usePeople.java:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
c:javastudy&gt; javac usePeople.java
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  这时,编译器将报告错误,编译失败,如下图所示:</P><A 
                  href="Java入门(8).files/8-3.jpg"><IMG alt=8-3 
                  src="Java入门(8).files/8-3.jpg" width=450 border=0></A> 
                  <P><B>  图8-3 编译错误输出</B></P>
                  <P><B>  传授新知</B></P>
                  <P>  在上面这个例子中,我们遇到了一个错误:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
Variable age in class People not accessible from class usePeople:
people1.age=”23”; 1 error
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  这个错误信息的中文信息就是:“在语句people1.age=”23”中有一个错误,usePeople类无权访问People类中的变量age。”</P>
                  <P>  为什么会出现这个错误呢?难道是语句写错了!但是Java编译器并未对相类似的另两条语句报错呀。</P>
                  <P>  我们一起来看一下,在People这个类的定义:</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
public String name;
public String sex;
private String age;
</CODE></PRE></TD></TR></TBODY></TABLE>
                  <P>  我们发现,没有报错的两条语句所访问的变量name与sex,在People类中定义时使用了public;而报错的这条语句所访问的变量age在定义时使用的是private。对,区别就在这里。</P>
                  <P>  英语单词public的意思是:公用的,而private的意思则是:个人的、私有的。噢!People类中的成员变量age与另两个变量name和sex不同,它是私有的。所以usePeople无权访问age这个成员变量。因此,引起了出错。</P>
                  <P>  在Java语言中,我们可以将类的某些数据、方法声明为private,这样这个数据或方法则仅能够被这个类使用,而不允许其它类使用。</P>
                  <P>  这样做有什么好处呢?这样可以实现信息隐藏。我们可以将一个类的所有变量都定义为私有的,然后构造一些公用的方法来访问和处理数据。这样就可以有效地实现数据的封装,利用程序设计。</P>
                  <P><B>  下面我们来看一个这样的例子:</B></P>
                  <P><B>  实例说明</B></P>
                  <P>  1.首先,我们输入以下源程序,构建一个新的People类:</P>
                  <P>  源程序:People.java</P>
                  <TABLE cellSpacing=0 cellPadding=5 width="100%" 
                  bgColor=#cccccc border=1>
                    <TBODY>
                    <TR>
                      <TD><PRE><CODE>
public class People 
{
 private String name;
 private String sex;
 private String age;
 public People(String n,String s,String a)
 {
name=n;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -