鱼C论坛

 找回密码
 立即注册
查看: 5683|回复: 6

[系列教程] 【Java 教程(原创)】020.对象(中)

[复制链接]
发表于 2017-2-7 16:45:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

☟



上一讲我们讲的是

对象的创建和对象的内存模型

这一次我们来谈谈如何使用对象

☠

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


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

如下:
  1. 对象.变量;
复制代码

☠

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


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

☠

体现封装


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

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

notice.png

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

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


----------- 华丽的 new.gif 分割线 ----------


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

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

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

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

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

PersonName.java
  1. /*
  2. *枚举类型
  3. */

  4. public enum PersonName{
  5.     非安全,不二如是,小甲鱼,拈花小仙
  6. }
复制代码

FishcPeople.java
  1. /*
  2. * 负责创建对象的类
  3. */
  4. public class FishcPeople{
  5.    
  6.     PersonName name;
  7.     float height,weight;
  8.     String head;
  9.    
  10.     void speak(String s){
  11.         if(name == PersonName.小甲鱼){
  12.             head = "美男头";
  13.         }
  14.         else if(name == PersonName.拈花小仙){
  15.             head = "美女头";
  16.         }
  17.         System.out.println(s);
  18.     }

  19. }
复制代码

MainRun.java
  1. /*
  2. * 应用程序的主类
  3. */

  4. public class MainRun{
  5.    
  6.     public static void main(String[] args){
  7.         FishcPeople xiaoJiaYu,nianHuaXiaoXian;                 //声明对象
  8.         xiaoJiaYu = new FishcPeople();                         //为对象分配内存,使用默认的构造方法
  9.         nianHuaXiaoXian = new FishcPeople();
  10.         xiaoJiaYu.name = PersonName.小甲鱼;                     //对象xiaoJiaYu给自己的变量赋值
  11.         xiaoJiaYu.height = 1.75f;
  12.         xiaoJiaYu.weight = 70f;
  13.         xiaoJiaYu.head = "大头";
  14.         nianHuaXiaoXian.name = PersonName.拈花小仙;             //对象nianHuaXiaoXian给自己的变量赋值
  15.         nianHuaXiaoXian.height = 1.66f;
  16.         nianHuaXiaoXian.weight = 55f;
  17.         nianHuaXiaoXian.head = "小头";
  18.         System.out.println(xiaoJiaYu.name + "的身高:" + xiaoJiaYu.height);
  19.         System.out.println(xiaoJiaYu.name + "的体重:" + xiaoJiaYu.weight);
  20.         System.out.println(xiaoJiaYu.name + "的  头:" + xiaoJiaYu.head);
  21.         System.out.println(nianHuaXiaoXian.name + "的身高:" + nianHuaXiaoXian.height);
  22.         System.out.println(nianHuaXiaoXian.name + "的体重:" + nianHuaXiaoXian.weight);
  23.         System.out.println(nianHuaXiaoXian.name + "的  头:" + nianHuaXiaoXian.head);
  24.         xiaoJiaYu.speak(xiaoJiaYu.name + ":小仙吃冰淇淋");     //对象调用方法
  25.         System.out.println(xiaoJiaYu.name + "现在的头:" + xiaoJiaYu.head);
  26.         nianHuaXiaoXian.speak(nianHuaXiaoXian.name + ":我重" +
  27.                               nianHuaXiaoXian.weight +
  28.                               "公斤,伦家用小拳拳打你");        //对象调用方法
  29.         System.out.println(nianHuaXiaoXian.name + "现在的头:" + nianHuaXiaoXian.head);
  30.     }
  31.    
  32. }
复制代码

运行效果如下:

020.png

explain.png

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

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

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


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


❁



❁

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +8 收起 理由
微末非末 + 5 + 5 + 3 感谢楼主无私奉献!
~风介~ + 5 + 5 + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 09:42:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 11:54:03 | 显示全部楼层
~风介~ 发表于 2017-2-9 09:42
求真相!@小甲鱼 @拈花小仙

介介,小声点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-28 10:26:01 | 显示全部楼层
上面“现在的头”发生了改变,可否理解为成员变量被成员函数所修改。前面16讲的成员变量隐藏,楼主讲到“则成员变量被隐藏,即这个成员变量在这个方法内暂时失效”,这句话是否妥当,我觉得成员变量是被修改了,而非失效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

失效意思是暂时失去了作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-28 11:23:00 | 显示全部楼层
零度非安全 发表于 2017-4-28 11:10
失效意思是暂时失去了作用

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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);
               
               
               
               
               
               
                       
        }
}




环境变量配置也没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表