public class Dog{
static String type;//狗的品种
String name;//狗的姓名
int age;//狗的年龄
public static void main(String[] a){
Dog dog=new Dog();
dog.type="藏獒";
dog.name="大黄";
dog.age=3;
System.out.println(dog.name+"是"+dog.name+",今年"+dog.age+"岁");
dog.run();
dog.bite();
}
public void run(){
System.out.println("会跑");
}
public void bite(){
System.out.println("会咬人");
}
}
今天又重温了一遍Java,对Java的面向对象思想又有了进一步的了解,当然理解还是很肤浅的。现与大家分享一下我对Java的静态、类和对象的理解。
那么面向对象的思想是如何运用到Java编程中的呢?打个比方,我想在程序里创造一只狗,那么怎么来描述这条狗,首先可以从特征和行为两个方面来描述,比如狗有品种,名字,年龄等特征,狗会跑、咬人等行为。那么用上面的代码创造一只简单的狗,这只狗“叫大黄,是藏獒,今年3岁,会跑,会咬人”。有人问现在这条狗是什么颜色,有叫的行为吗,对不起,没有。因为你在程序中只为这只狗创造了“品种”、“名字”和“年龄”3个特征和“跑”、“咬人”2个行为,再也没别的了。这个时候正是体现面向对象思维在Java程序中应用,我想让这条狗有颜色,能吃饭,那么我就可以为狗添加一个颜色的特征和吃饭的行为。所谓面向对象就是将狗看着是一个对象,用的Java语言将这个对象描述出来。换句话,对象的所有特征和行为都可以用Java语言描述出来。下面看看Java程序运行的过程是怎样的?
1.Java程序先编译生成Dog.class类文件;
2.Java程序在运行的时候首先加载类,那么这里就首先加载了Dog.class类,为type分配了内存空间。
3.运行main方法,此时创建Dog对象,为name和age分配内存空间,然后将对象的地址指向dog,同时对象也指向了品种“type”。代码dog.name="大黄",执行后将内存中name赋值为“大黄”,同理,代码“dog.age=3”执行后,将内存中age赋值为“3”。代码“dog.type="藏獒"”,将type赋值为“藏獒”。运行图如下:
4.大家可能会有一个疑问,为什么一开始就给“type”分配了内存,因为type是静态的,在编译后就分配分配,而且内存会一直存在,直到程序退出内存才会释放这个空间。
5.为什么对象指向类中的type,因为对象可以指向类,类是对象的模板,正如做月饼一样,用面粉和芯可以在模子里刻出一个月饼来,模子是圆的刻出的月饼就是圆的,模子是方的,月饼就是方的。这里的type正如模子的形状一样,决定月饼的方圆,而且唯一。
说的不好,希望大家多多指正!