
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
类是抽象的,而对象是具体的。如何理解这句话呢?例如鸭嘴兽是类型,具体的鸭嘴兽A、鸭嘴兽B就是对象了。在JAVA中对象是通过new关键字声明的。再例如,《红色警戒》中美国大兵是一类兵种,点击制造后从兵营里出来的那个会开枪的家伙就是对象了。
类的定义就是一个模板,它描述的一类对象的属性与行为。类往往是抽象的、没有实体的。哺乳动物是类的概念,是抽象的,现实中没有哺乳动物这一实体,只有具体的如老虎,狮子等。编程工作中套用这一思维模式,我们将程序中的实例抽象为类,例如一个系统中的用户有张三、李四我们会把他们抽象为Person类,或者称之为一个名为Person的数据类型。
对象则是根据所属类模板创造出来的实实在在的事物。在程序中我将这个实实在在的事物称之为实例,我们为它的属性赋上特定的值,让它成为张三或者李四。在内存里来说,对象是表示的就是具体数据。
前面说的都是概念性的东西,达内长沙IT培训下面说说实际的运用过程中的理解。
从数据类型来说
以java为例,数据类型分为基本数据类型和引用数据类型。
基本数据类型就是byte,short,int,long,double,char,boolean;其它的,需要用到new关键字来赋值的都是引用数据类型。 类与对象指的便是引用数据的类型与其值(这里指的类不光是class,还包括接口、数组、枚举、注解)。而引用指的是内存地址的引用。
看下面的代码:
int a =1;
Person b=new Person();
a和b都是本身无意义的变量名。需要关注的是:a的类型是基本数据类型int值为1,而b的类型是Person属于引用类型,其引用的是new Person()这个对象。我们往往会说对象xx,比如这里的对象b。但实际上b只是对象的引用,真正的对象是后面的new Person()!
需要注意的是String也是引用数据类型,只不过因为使用率非常高,所以对于String,jvm支持其可 以像基本数据类型一样使用:String a = "abc";同等于String a = new String("abc");
总之呢,简单来说类指的的引用数据的类型,对象是具体赋的值。
为了更深入理解,达内长沙IT培训下面解释下这个引用是如何体现的。
什么是引用(从内存来说):
要深入理解什么是类,什么是对象,什么又是引用,就离不开说说java的内存使用方式。
在java中内存被大致划分为栈(stack)与堆(heap) (之所以是大致,是因为还包括其它几部分就不在这细说)。
在这里我们只说一点:java中,基本数据类型以及对象的引用都保存在栈(stack),而对象则保存在堆(heap)中,例如当如下代码:
int a=1;
Person p;
内存中的状态大致如下:
int a = 1是直接在栈中开辟空间,而对于未进行实例化的Person p因为没有有效的内存地址引用它的值是null。而当代码进行如下修改时:
int a =1 ;
Person p = new Person();
内存中的状态大致如下:
Person p=new Person();使得p的值=0x8da23也就是对象new Person();在堆中的地址。所以,到这里后就不难理解之前说的对象的引用了,所谓引用其实就是堆内存地址的引用。
总结
随着计算机技术的不断提高,现在计算机不单单是用来解决运算问题,而是被用于解决越来越贴近现实生活的复杂问题。面向对象就是这一发展进程的产物,它使得编程工作更贴近人的思维方式,从而大大提升编程效率。我们必须明白的是面向对象并不是一种编程方式,而是一种编程思维方式,这种思维方式涵盖了分析,设计,编码等。在面向对象编程中,程序的基本单元是对象,数据封装在对象中。类是对象模板,是预定义好的结构,所谓的实例化一个类,所指的就是将数据填入模板。