- 论坛徽章:
- 0
|
JFT_zhao 发表于 2013-01-02 22:38 ![]()
/*********************************************************************
程序名称:杨辉三角以菱形对 ...
估计你对java的OO思想还欠缺了解,class之所以叫做类,是因为这是一种抽象,比如说人类,鸟类,鱼类。我们定义一个类比如人类,class person.人类具有什么特征:比如姓名name,年龄age,身高height.人类具有哪些行为:如吃饭,睡觉,唱歌。这样我定义一个类型.
public class Person{
private String name;//姓名
private int age;//年龄
private int height;//身高
public Person(String name,int age,int height){
this.name = name;
this.age = age;
this.height = height;
}
public void eat(){
System.out.println("i am eating");
}
public void sleep(){
System.out.println("i am sleeping");
}
public void sing(){
System.out.println("i am singing");
}
public static void main(String[] args){
Person xiaoming=new Peson("xiaoming",11,130);
xiaoming.eat();
xiaoming.sleep();
}
}
当你想让一个人去睡觉或者吃饭,你不可能让这一类人(即class)同时吃饭,你必须指定一个人吃饭,比如说小明.这就需要对Person进行实例化(Person xiaoming=new Peson()),产生小明这个对象。实例化的过程其实就是从抽象的人类到具体的某个人。操作小明这个对象进行吃饭(xiaoming.eat()),睡觉(xiaoming.sleep)的行为。假若把这群人类限定到一个小的范围内,比如Person类是一个班上所有人员的定义,建立这个班上的所有人员对象Person.
在上面的main 方法中加入
Person daxiong=new Person("daxiong",11,111);
Person xiaohong=new Person("xiaohong",10,120);
假若上面3个人属于一个班级,教师节快到了,他们都想给英语老师(只有一个英语老师)送礼物,那怎么知道英语老师收到了多少礼物?
我们定义一个变量presentNum,假若Person类中加入如下定义
private int presentNum=0;
public void givePresent(){
++presentNum;
System.out.println("teacher has got "+presentNum+"presents");
}
调用
xiaoming.givePresent();
daxiong.givePresent();
xiaohong.givePresent();
会出现所有打印都是:("teacher has got 1 presents"),因为presentNum为成员变量是每个实例化对象的专属特征,即xiaoming,daxong,xiaohong的各自特征,这个定义按照正确的理解含义不是英语老师收到多少礼物,而是每个人自己送了多少份礼物.就像执行xiaoming.givePresent();xiaoming.givePresent()在这两次次执行之后打印输出会变成teacher has got 2 presents一样,xiaoming送了2份礼物
那该如何实现呢?
把presentNum定义为static:(static指由此类无论有多少个对象(即实例),这个变量只有一个,这类似c语言的全局变量,而非static变量有多少实例就有多少个变量)
private static int presentNum=0;
那givePresent必须为static吗?
我们由面向对象来思考。givePresent()送礼物这个动作是类方法(static方法)还是成员方法(非static方法)。也就是说送礼物是抽象的类的动作(抽象的类并不是说这个类是抽象类,是指相对具体某个人而言)还是具体的一个人执行的动作。显而易见,是某个人的动作。
所以执行完成xiaoming.givePresent();
daxiong.givePresent();
xiaohong.givePresent();
会发现teacher has got 3 presents,
这才是我们真正想要的。
静态变量和成员变量初始化的顺序是不一样的
真正要理解透彻,最好去看java编程思想,要理解透彻,至少要看5-6遍,并且期间要多谢代码 |
|