鱼C论坛

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

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

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

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

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

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

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

☟



上一讲我们讲的是

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

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

☠

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


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

如下:
对象.变量;
☠

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


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

体现封装


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

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

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
/*
 *枚举类型
 */
 
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);
    }
    
}
运行效果如下:

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-12-23 10:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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