📄 java入门(8).htm
字号:
sex=s;
age=a;
}
public void infoPrint()
{
System.out.println("Name:"+name);
System.out.println("Sex:"+sex);
System.out.println("Age:"+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> 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("Kate","female","23");
people1.infoPrint();
}
}
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 3. 使用javac编译后,执行以下命令运行程序:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
c:javastudy> java usePeople
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 这时,我们如愿以偿地输出了对象people1的信息:</P><A
href="Java入门(8).files/8-4.jpg"><IMG alt=8-4
src="Java入门(8).files/8-4.jpg" width=450 border=0></A>
<P><B> 图8-4 usePeople程序的输出</B></P>
<P> 在这个实例中,People将数据都封装起来,usePeople则使用People类提供的两个公用的(public)方法来设置成员变量的值,以及打印这些成员变量的值。</P>
<P><B> 8.2.2 static特性</B></P>
<P><B> 实例说明</B></P>
<P> 1.首先,我们构建一个类myBook:</P>
<P> 源程序:myBook.java</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
public class myBook
{
public String bookName;
public static String ownerName=”XuFen”;
public myBook(String bn)
{
bookName=bn;
}
public void infoPrint()
{
System.out.println("Book Name:"+bookName);
System.out.println("Owner:"+ownerName);
}
}
</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> javac myBook.java
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 3.接下来,我们构建一个使用myBook类的程序usemyBook.java</P>
<P> 源程序:usemyBook.java</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
public class usemyBook
{
public static void main(String argv[])
{
myBook mybook1=new myBook("C Progamming");
myBook mybook2=new myBook("Java Programming");
mybook1.infoPrint();
mybook2.infoPrint();
System.out.println("--------------------------------------");
mybook1.bookName="C Programming";
mybook1.ownerName=”XuFeng”;
mybook1.infoPrint();
mybook2.infoPrint();
}
}
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 3. 使用javac编译后,执行以下命令运行程序:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
c:javastudy> java usemyBook
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 程序将产生如下图所示的输出:</P><A href="Java入门(8).files/8-5.jpg"><IMG
alt=8-5 src="Java入门(8).files/8-5.jpg" width=450 border=0></A>
<P><B> 图8-5 usemyBook程序的输出</B></P>
<P><B> 传授新知</B></P>
<P> 我们一起来看一下这个程序,以及它所产生的输出:</P>
<P> 1)</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
myBook mybook1=new myBook("C Progamming");
myBook mybook2=new myBook("Java Programming");
mybook1.infoPrint();
mybook2.infoPrint();
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 在这一段程序中,我们定义了两个myBook类的对象mybook1和mybook2,并且调用它的构造器方法,将其成员变量bookName的值分别设置为“C
Progamming”和“Java Programming”。</P>
<P> 接下来,我们调用了myBook类的成员方法infoPrint打印它们的信息,程序输出了:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
Book name: C Progamming
Owner: XuFen
Book name: Java Programming
Ower: XuFen
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 我们并没有为ownerName赋值呀,为什么会输出呢?这是因为我们在myBook类的定义中就为其赋值为“XuFen”了。所有每一个myBook类的对象都有这个成员变量了。</P>
<P> 由于,我们发现了mybook1的书名与拥用者名字都错了,所以我们又重新修改,再打印出新的信息:</P>
<P> 2)</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
mybook1.bookName="C Programming";
mybook1.ownerName=”XuFeng”;
mybook1.infoPrint();
mybook2.infoPrint();
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 首先,我们修改了成员变量bookName的值,加上了少掉的字母“r”,接着修改了成员变量ownerName的值,加上了少掉的字母“g”。</P>
<P> 接着,我们再看一下输出:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
Book name: C Programming
Owner: XuFeng
Book name: Java Programming
Owner: XuFeng
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 这时,我们发现mybook1的bookName与ownerName的值就修改过来了。但我们惊奇地发现,mybook2的ownerName也从“XuFen”变成了“XuFeng”。这是怎么回事呢?我们并没有对它做过修改呀!</P>
<P> 这时因为,我们定义ownerName时,使用了一个特殊的特性说明符static:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
public static String ownerName=”XuFen”;
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 英文单词static的意思是:静态。也就是说,我们让成员变量ownerName成为静态的变量。这里静态的意思不是指它的值是不变的。而是它的存储位置是不变的。如下图所示:</P><A
href="Java入门(8).files/8-6.jpg"><IMG alt=8-6
src="Java入门(8).files/8-6.jpg" width=450 border=0></A>
<P><B> 图8-6 static变量示意图</B></P>
<P> 从上图中,我们可以很清晰地知道,myBook类的两个对象mybook1和mybook2虽然都包含自己的成员变量ownerName,但它们都是指向同一个存储位置的。所以实际上只有一个。</P>
<P> 你现在明白为什么修改了mybook1的成员变量ownerName的值,mybook2的成员变量ownerName的值也跟着改变了吗?</P>
<P><B> 一些提示:</B></P>
<P> 同样的,static也可以用来修饰方法,即静态方法,静态方法只能访问静态数据,而不能访问非静态的变量和方法,否则将引起编译器出错。</P>
<P><B> 自测练习</B></P>
<P> 1) 定义私有变量、方法的关键字是__________。</P>
<P> a.pulic b.static c.private</P>
<P> 2) 定义静态变量、方法的关键字是__________。</P>
<P> a.pulic b.static c.private</P>
<P> 3) 以下几个方法,可以被外部类访问的是___________。</P>
<P> a. pulic void infoPrint() b.void public infoPrint()</P>
<P> c.private void infoPrint() d.void private infoPrint()</P>
<P> 4) public方法不能够访问其它类的private数据。___________</P>
<P> a.对 b.不对</P>
<P> 5) 外部类不能访问静态(static)变量。___________</P>
<P> a.对 b.不对</P>
<P> 6) 外部类不能访问_________变量。</P>
<P> a.static b.private c.public</P>
<P> 7) 私有变量允许________访问。</P>
<P> a.任何类 b.特权类 c.定义这个变量的类</P>
<P> 8) 现有一个如下所示的类:</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;
}
</CODE></PRE></TD></TR></TBODY></TABLE>
<P> 请构建一个方法getName,使得其它类能够访问它的成员变量name:</P>
<P> ____________________________________________________________________</P>
<P> ____________________________________________________________________</P>
<P> ____________________________________________________________________</P>
<P><B> 练习答案</B></P>
<P> 1)c Java语言中使用关键字private定义私有变量、方法。</P>
<P> 2)b Java语言中使用关键字static定义私有变量、方法。</P>
<P> 3)a
c和d使用了private关键字,肯定不能被外部类访问,所以答案就在a和b之间。而b将void放在了public之前,不符合Java语言的语法规则。</P>
<P> 4)a private定义的数据不能够被外部类访问。</P>
<P> 5)b 静态变量是可以被外部类访问的。</P>
<P> 6)b 仅有私有变量是不能够被外部类访问的。</P>
<P> 7)c 私有变量只允许定义它的类访问,在Java中没有什么特权类。</P>
<P> 8)这个方法很简单:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
public int getName()
{
return name;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -