史记-学习JAVA
凤凰博报 由你开始
http://java.blog.ifeng.com
发表 管理 分类 简介 头像 功能 音乐 友情链接 模板 个性域名

2006-02-22 08:59:00 编辑 删除

归档在 JAVA知识 | 浏览 394 次 | 评论 0 条

 Java 创建新类二、说明类的特性

 <1> private特性

  实例说明

  1.首先,我们输入以下源程序,构建一个People类:

  源程序:People.java


 public class People
 {
public String name;
public String sex;
private String age;
 }

 

  2.接着使用javac编译这个类:


 c:javastudy> javac People.java

 

  3.接下来,我们构建一个使用People类的程序usePeople.java

  源程序:usePeople.java


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);
 }
}

 

  3. 执行以下命令,编译usePeople.java:


c:javastudy> javac usePeople.java

   这时,编译器将报告错误,编译失败,遇到了一个错误:
Variable age in class People not accessible from class usePeople:
people1.age=”23”; 1 error

     原因在于People这个类的定义:

public String name;
public String sex;
private String age;

 

  可以发现,没有报错的两条语句所访问的变量name与sex,在People类中定义时使用了public;而报错的这条语句所访问的变量age在定义时使用的是private。对,区别就在这里。

  英语单词public的意思是:公用的,而private的意思则是:个人的、私有的。噢!People类中的成员变量age与另两个变量name和sex不同,它是私有的。所以usePeople无权访问age这个成员变量。因此,引起了出错。

  在Java语言中,可以将类的某些数据、方法声明为private,这样这个数据或方法则仅能够被这个类使用,而不允许其它类使用。

  这样做有什么好处呢?这样可以实现信息隐藏。我们可以将一个类的所有变量都定义为私有的,然后构造一些公用的方法来访问和处理数据。这样就可以有效地实现数据的封装,利用程序设计。

  
  实例说明

  1.首先,我们输入以下源程序,构建一个新的People类:

  源程序:People.java


public class People
{
 private String name;
 private String sex;
 private String age;
 public People(String n,String s,String a)
 {
name=n;
sex=s;
age=a;
 }
 public void infoPrint()
 {
System.out.println("Name:"+name);
System.out.println("Sex:"+sex);
System.out.println("Age:"+age);
 }
}

 

  2.接着使用javac编译这个类:


 c:javastudy> javac People.java

 

  3.接下来,我们构建一个使用People类的程序usePeople.java

  源程序:usePeople.java


public class usePeople
{
 public static void main(String argv[])
 {
 People people1=new People("Kate","female","23");
 people1.infoPrint();
 }
}

 

  3. 使用javac编译后,执行以下命令运行程序:


c:javastudy> java usePeople

 
  在这个实例中,People将数据都封装起来,usePeople则使用People类提供的两个公用的(public)方法来设置成员变量的值,以及打印这些成员变量的值。

  <2> static特性

  实例说明

  1.首先,我们构建一个类myBook:

  源程序:myBook.java


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);
 }
}

 

  2.接着使用javac编译这个类:


c:javastudy> javac myBook.java

 

  3.接下来,构建一个使用myBook类的程序usemyBook.java

  源程序:usemyBook.java


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();
 }
}

 

  4. 使用javac编译后,执行以下命令运行程序:


c:javastudy> java usemyBook

    看一下这个程序,以及它所产生的输出:

  1)
myBook mybook1=new myBook("C Progamming");
myBook mybook2=new myBook("Java Programming");
mybook1.infoPrint();
mybook2.infoPrint();

  在这一段程序中,我们定义了两个myBook类的对象mybook1和mybook2,并且调用它的构造器方法,将其成员变量bookName的值分别设置为“C Progamming”和“Java Programming”。

  接下来,调用myBook类的成员方法infoPrint打印它们的信息,程序输出了:

Book name: C Progamming
Owner: XuFen
Book name: Java Programming
Ower: XuFen

   我们并没有为ownerName赋值呀,为什么会输出呢?这是因为我们在myBook类的定义中就为其赋值为“XuFen”了。所有每一个myBook类的对象都有这个成员变量了。
  由于,我们发现了mybook1的书名与拥用者名字都错了,所以我们又重新修改,再打印出新的信息:

  2)
mybook1.bookName="C Programming";
mybook1.ownerName=”XuFeng”;
mybook1.infoPrint();
mybook2.infoPrint();

  首先,我们修改了成员变量bookName的值,加上了少掉的字母“r”,接着修改了成员变量ownerName的值,加上了少掉的字母“g”。
  接着,再看一下输出:

Book name: C Programming
Owner: XuFeng
Book name: Java Programming
Owner: XuFeng

  这时,我们发现mybook1的bookName与ownerName的值就修改过来了。但我们惊奇地发现,mybook2的ownerName也从“XuFen”变成了“XuFeng”。这是怎么回事呢?我们并没有对它做过修改呀!

  这时因为,我们定义ownerName时,使用了一个特殊的特性说明符static:

public static String ownerName=”XuFen”;
  英文单词static的意思是:静态。也就是说,我们让成员变量ownerName成为静态的变量。这里静态的意思不是指它的值是不变的。而是它的存储位置是不变的。
  从上图中,我们可以很清晰地知道,myBook类的两个对象mybook1和mybook2虽然都包含自己的成员变量ownerName,但它们都是指向同一个存储位置的。所以实际上只有一个。
  同样的,static也可以用来修饰方法,即静态方法,静态方法只能访问静态数据,而不能访问非静态的变量和方法,否则将引起编译器出错。

0
上一篇 << Java 创建新类一、 定义并使用一…      下一篇 >> Java 创建新类三、 创建子类
  • 暂时还有没评论。
您还没有登录,请登录以后再发表评论。

关于博主

Java

  凝思历史与真相,让我们更清楚的认知这个世界以及我们自己; 共同学习JAVA 本站网址www.xuejava.cn

博文相关