零度非安全 发表于 2017-2-7 16:45:01

【Java 教程(原创)】020.对象(中)

本帖最后由 零度非安全 于 2017-2-8 16:49 编辑

点击图片穿越到 索引帖,听说有惊喜!











上一讲我们讲的是

对象的创建和对象的内存模型
这一次我们来谈谈如何使用对象

对象操作自己的变量(对象的属性)

对象在创建之后,就有了自己的变量,即对象的实体。通过使用运算符“ . ”,对象可以实现对自己的变量访问,访问格式

如下:
对象.变量;

对象调用类中的方法(对象的功能)

对象在创建之后,可以使用运算符“ . ”调用创建它的类中的方法,从而产生一定的行为功能,调用格式如下:
对象.方法;

体现封装

当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量。在讲类时讲过:类中的方法可以操作成员变量。当

对象调用方法时,方法中出现的成员变量就是分配给该对象的变量。





当对象调用方法时,方法中出现的局部变量被分配内存空间。方法执行完毕,局部变量即刻释放内存。需要注意的

是,局部变量在声明时如果没有初始化,就没有默认值,因此在使用局部变量之前,要事先为其赋值。



----------- 华丽的分割线 ----------

在下面这个例子当中,一共有 3 个 Java 源文件,即 PersonName.java、FishcPeople.java 和 MainRun.java。其中,

PersonName.java 负责定义枚举类型(枚举在前面已经见过哦 ^_^),所定义的枚举类型 PersonName 负责给出人物名

字;FishcPeople.java 中 的 FishcPeople 类负责创建对象;MainRun.java 是含有主类的应用程序。

对于初学的鱼油,首先需要掌握在主类的 main 方法中使用类来创建对象,并让创建的对象产生行为。在下面这个例子中,

在主类的 main 方法中使用 FishcPeople 类创建了两个对象 xiaoJiaYu 和 nianHuaXiaoXian,并各自产生了行为。

PersonName.java
/*
*枚举类型
*/

public enum PersonName{
    非安全,不二如是,小甲鱼,拈花小仙
}
FishcPeople.java
/*
* 负责创建对象的类
*/
public class FishcPeople{
   
    PersonName name;
    float height,weight;
    String head;
   
    void speak(String s){
      if(name == PersonName.小甲鱼){
            head = "美男头";
      }
      else if(name == PersonName.拈花小仙){
            head = "美女头";
      }
      System.out.println(s);
    }

}
MainRun.java
/*
* 应用程序的主类
*/

public class MainRun{
   
    public static void main(String[] args){
      FishcPeople xiaoJiaYu,nianHuaXiaoXian;               //声明对象
      xiaoJiaYu = new FishcPeople();                         //为对象分配内存,使用默认的构造方法
      nianHuaXiaoXian = new FishcPeople();
      xiaoJiaYu.name = PersonName.小甲鱼;                     //对象xiaoJiaYu给自己的变量赋值
      xiaoJiaYu.height = 1.75f;
      xiaoJiaYu.weight = 70f;
      xiaoJiaYu.head = "大头";
      nianHuaXiaoXian.name = PersonName.拈花小仙;             //对象nianHuaXiaoXian给自己的变量赋值
      nianHuaXiaoXian.height = 1.66f;
      nianHuaXiaoXian.weight = 55f;
      nianHuaXiaoXian.head = "小头";
      System.out.println(xiaoJiaYu.name + "的身高:" + xiaoJiaYu.height);
      System.out.println(xiaoJiaYu.name + "的体重:" + xiaoJiaYu.weight);
      System.out.println(xiaoJiaYu.name + "的头:" + xiaoJiaYu.head);
      System.out.println(nianHuaXiaoXian.name + "的身高:" + nianHuaXiaoXian.height);
      System.out.println(nianHuaXiaoXian.name + "的体重:" + nianHuaXiaoXian.weight);
      System.out.println(nianHuaXiaoXian.name + "的头:" + nianHuaXiaoXian.head);
      xiaoJiaYu.speak(xiaoJiaYu.name + ":小仙吃冰淇淋");   //对象调用方法
      System.out.println(xiaoJiaYu.name + "现在的头:" + xiaoJiaYu.head);
      nianHuaXiaoXian.speak(nianHuaXiaoXian.name + ":我重" +
                              nianHuaXiaoXian.weight +
                              "公斤,伦家用小拳拳打你");      //对象调用方法
      System.out.println(nianHuaXiaoXian.name + "现在的头:" + nianHuaXiaoXian.head);
    }
   
}
运行效果如下:







当对象调用该方法时,方法中出现的成员变量就是该对象的成员变量。在上例中,当对象 xiaoJiaYu 调用方法

speak 之后,就将自己的 head 修改成“美男头”;同样,当对象 nianHuaXiaoXian 调用方法 speak 之后,

也就将自己的 head 修改成“美女头”。



【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。



☞点我前往上一讲☜
☞点我前往下一讲☜

~风介~ 发表于 2017-2-9 09:42:02

求真相!{:10_256:}@小甲鱼 @拈花小仙

零度非安全 发表于 2017-2-9 11:54:03

~风介~ 发表于 2017-2-9 09:42
求真相!@小甲鱼 @拈花小仙

介介,小声点{:10_336:}。

dongyuguo6 发表于 2017-4-28 10:26:01

上面“现在的头”发生了改变,可否理解为成员变量被成员函数所修改。前面16讲的成员变量隐藏,楼主讲到“则成员变量被隐藏,即这个成员变量在这个方法内暂时失效”,这句话是否妥当,我觉得成员变量是被修改了,而非失效。

零度非安全 发表于 2017-4-28 11:10:56

dongyuguo6 发表于 2017-4-28 10:26
上面“现在的头”发生了改变,可否理解为成员变量被成员函数所修改。前面16讲的成员变量隐藏,楼主讲到“则 ...

失效意思是暂时失去了作用

dongyuguo6 发表于 2017-4-28 11:23:00

零度非安全 发表于 2017-4-28 11:10
失效意思是暂时失去了作用

嗯{:5_91:}

yulin3192 发表于 2018-5-7 09:53:57

本帖最后由 yulin3192 于 2018-5-7 10:09 编辑

F:\java>javac leyou.java
leyou.java:8: 错误: 找不到符号
                FishcPeople xiaoJiaYu,nianHuaXiaoXian;   //声明对象
                ^
符号:   类 FishcPeople
位置: 类 leyou
leyou.java:9: 错误: 找不到符号
                xiaoJiaYu = new FishcPeople();         //为对象分配内存,使用默认的构造方法
                              ^
符号:   类 FishcPeople
位置: 类 leyou
leyou.java:10: 错误: 找不到符号
                nianHuaXiaoXian = new FishcPeople();
                                    ^
符号:   类 FishcPeople
位置: 类 leyou
leyou.java:11: 错误: 找不到符号
                xiaoJiaYu.name = PersonName.小甲鱼;      //对象xiaoJiaYu给自己的变量赋值
                                 ^
符号:   变量 PersonName
位置: 类 leyou
leyou.java:15: 错误: 找不到符号
                nianHuaXiaoXian.name = PersonName.拈花小仙;
                                       ^
符号:   变量 PersonName
位置: 类 leyou
5 个错误
我在win10系统上运行出错

PersonName.java 文件
/*
*枚举类型
*/

public enum PersonName{
        非安全,不二如是,小甲鱼,拈花小仙
}

FishcPeople.java 文件

/*
*负责创建对象的类
*/

public class FishcPeople{
        PersonName name;
        float height,weight;
        String head;

        void speak(String s){
                if(name == PersonName.小甲鱼){
                        head = "美男头";
                }
                else if(name == PersonName.拈花小仙){
                        head = "美女头";
                }
                System.out.println(s);
        }
}

leyou.java 文件



/*
*应用程序的主类
*/



public class leyou{
       
        public static void main(String[] args){
                FishcPeople xiaoJiaYu,nianHuaXiaoXian;   //声明对象
                xiaoJiaYu = new FishcPeople();         //为对象分配内存,使用默认的构造方法
                nianHuaXiaoXian = new FishcPeople();
                xiaoJiaYu.name = PersonName.小甲鱼;      //对象xiaoJiaYu给自己的变量赋值
                xiaoJiaYu.height = 1.75f;
                xiaoJiaYu.weight = 70f;
                xiaoJiaYu.head = "大头";
                nianHuaXiaoXian.name = PersonName.拈花小仙;
                nianHuaXiaoXian.height = 1.66f;
                nianHuaXiaoXian.weight = 55f;
                nianHuaXiaoXian.head = "小头";
                System.out.println(xiaoJiaYu.name + "的身高:" + xiaoJiaYu.height);
                System.out.println(xiaoJiaYu.name + "的体重:" + xiaoJiaYu.weight);
                System.out.println(xiaoJiaYu.name + "的头:" + xiaoJiaYu.head);
                System.out.println(nianHuaXiaoXian.name + "的身高:" + nianHuaXiaoXian.heright);
                System.out.println(nianHuaXiaoXian.name + "的体重:" + nianHuaXiaoXian.weight);
                System.out.println(nianHuaXiaoXian.name + "的头:" + nianHuaXiaoXian.head);
                xiaoJiaYu.speak(xiaoJiaYu.name + ":小仙吃冰激凌");
                System.out.println(xiaoJiaYu.name + "现在的头:" + xiaoJiaYu.head);
                nianHuaXiaoXian.speak(nianHuaXiaoXian.name + ":我重" +
                                        nianHuaXiaoXian.weight +
                                        "公斤,伦家用小拳拳打你");
                System.out.println(nianHuaXiaoXian.name + "现在的头:" + nianHuaXiaoXian.head);
               
               
               
               
               
               
                       
        }
}




环境变量配置也没问题
页: [1]
查看完整版本: 【Java 教程(原创)】020.对象(中)