【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 修改成“美女头”。
【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。
❁
☞点我前往上一讲☜
☞点我前往下一讲☜
❁ 求真相!{:10_256:}@小甲鱼 @拈花小仙 ~风介~ 发表于 2017-2-9 09:42
求真相!@小甲鱼 @拈花小仙
介介,小声点{:10_336:}。 上面“现在的头”发生了改变,可否理解为成员变量被成员函数所修改。前面16讲的成员变量隐藏,楼主讲到“则成员变量被隐藏,即这个成员变量在这个方法内暂时失效”,这句话是否妥当,我觉得成员变量是被修改了,而非失效。 dongyuguo6 发表于 2017-4-28 10:26
上面“现在的头”发生了改变,可否理解为成员变量被成员函数所修改。前面16讲的成员变量隐藏,楼主讲到“则 ...
失效意思是暂时失去了作用 零度非安全 发表于 2017-4-28 11:10
失效意思是暂时失去了作用
嗯{:5_91:} 本帖最后由 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]