类是对象的模板,既然说对象是模拟现实生活中的灵活扩展性,那么这些都仅仅只是虚拟的东西。我们怎样才能把这虚拟的东西给实现出来?比如设计月饼我们需要把要求都想好,这些要求仅仅只是你大脑里的想法,要想把月饼样式实现出来,我们就得去刻想好样式的一个模板,然后用模板把月饼做出来。
我们要把构造好的想法抽到程序里面去那么也需要一个模板把他给实现出来,这个模板就是类,类就是对象的模板。如图6.41所示:
图6.41
变量申请在类里面就是属性,比如你在超市里面叫顾客,你在公司里面叫总经理。所以变量在类里面就升级成了属性,但这也仅仅只是一个名称叫法而已。
万事万物为对象,拿到什么就能说出他里面有什么,比如笔,笔他的属性有颜色,有类型,有粗细。功能有能够写字,能够画画,写代码等。比如键盘,键盘属性有颜色,有类型,有重量,功能有可以敲代码,可以玩游戏。
现实生活中的东西都可以把他的属性和行为描述出来,衣服属性有面料,尺寸等,行为有能够穿,能够取暖等这就是行为。万事万物为对象,那么他都可以说出他的行为和属性,行为我们用方法描述,属性我们用变量去描述,所以这就是一个类,描述了对象里面该拥有的一些东西。
类是把我们大脑里面想的东西形成了代码,那么代码又如何把他形成对象呢?那么就需要new出一个对象,如图6.42所示:
图6.42
什么是new?new就是新建的意思,就是将这个Computer类新造一个对象,造对象的过程需要经过内存进行分配存储。
new对象紧紧只是new Computer();这一句有用,前面的跟new对象完全没有一点的关系,new对象真正的就是new Computer。前面的意思是我声明了一个变量,变量的名称叫c,准备等待new好的对象交给变量c。
对象new的时候他会在内存里进行分配一些存储的数据,分配完会再把对象拿出来交给这个变量,这个变量就指向了这片对象内存,这个变量就相当于内存的操作者,就相当于这个对象的代表。new对象的过程如图6.43所示:
图6.43
首先他询问Dog类是否加载,加载好之后那么就开始分配内存先给name分配一个内存地址,然后给age分配内存地址,分配好这些存储大小之后,就nwe出来一个对象,这个对象指向了这些属性。new对象就是将属性的内容分配到内存里面去,分配完毕之后在把内存交给了我们的变量d,变量d就指向了内存的地址。他每new一次重新分配一次,new几次就分配多少个,new就是新生成,new就是新建。如图例题6.44所示:
图6.44
我们把对象new好了之后他就开始分配属性占用内存,首先name和age的内存设置好之后归对象的拥有,对象里面包含了name和age然后再把对象的地址交给变量d,变量d就拿到了这个对象的地址,变量d跟new对象没有任何关系只是用来接收对象的地址。
对象里面的内容如何去访问和调用?这是一个Cat类,里面有name、age这2个属性,还有一个show方法。首先Cat c = new Cat(); 然后又 Cat c1 = new Cat(); 一共new了两个对象。创建了2只猫,那么他在内存里地址是如何分配的?如图6.45所示:
图6.45
Cat c=new Cat();在new对象的时候,他首先实例化里面的属性,所以就为name、age各分配了一个空间。我们分配了2个属性的存储空间,这2个存储空间交给对象管理,然后把这个对象交给了变量c ,c就指向了这个对象的地址。
我们又new了一个对象,又在内存里面开辟了2个属性name、age这2个属性属于新new出来的对象地址,然后又声明了一个变量叫c1,c1指向了这个新new出来的对象地址。我们要访问这个对象那就需要拿着变量c1.属性名[点是访问的意思]比如要访问这个对象的name属性那么就需要[c.name]如图6.46所示:
图6.46
这个点在Java里面是属性和方法的访问符,所以拿着c.一下就是访问了此对象的属性。点在包名里面还可以用作为分割符。
无论你一个类new多少遍,每个对象所new出来的时候,他里面的属性都是独一一份的,不可混搭在一起,他的属性是各自自己的。
那么方法放哪呢?方法他不需要分配内存,因为方法在用的时候才会执行,不用的时候就不会执行,所以方法是不需要分配的。
对象之间的赋值问题,如果new了2个对象每个对象都有一个name属性c.name=”笔记本”; c1.name=”台式机” c=c1; 打印c.name的结果为:台式机。如图6.47所示:
图6.47
为什么会打印台式机?c1等于c就相当于把c1的对象的指向交给了c,以前c的指向断掉重新指向c1的对象。所以c现在的对象就是c1的对象,所以c.name现在对象的name就是台式机。
类里面的成员问题:万事万物为对象,把现实生活中的所有东西都看作为对象去做。既然说万事万物为对象那么类也是一个对象,因为类是由一个米字和大子组成,类是对象的模版那他就是模版对象。就好比做月饼,月饼要用磨子去做,那么磨子也是一个对象,他是磨子对象。所以类是来造就对象的,是对象的一个模版,我们要对象里面的一个东西,就要去类里面去声明对象才会拥有。
类他也是一个对象,对象拥有自己的属性和行为方法的,那么类也应该拥有他自己的属性和方法。类的属性和方法分为2类:属性分为静态属性和实例属性,静态属性也叫类属性,实例属性也叫对象属性。方法分为静态方法和实例方法,静态方法也叫类方法,实例方法也叫对象方法。
对象有2个名称,可以说是对象也可以说是实例都是一回事。类里面称之为静态,所以在申请的时候就有2个部分一个是静态成员和实例成员。静态成员就是类成员,类的方法和属性就是模版的方法和属性。
对象可以有千千万万个,但是在Java里模版只能有一个对象。模版的方法叫做静态方法和静态属性,给对象设计的方法可以叫做实例方法也可以叫做实例属性。
类创建的叫做实例等于new对象有2种说法,new叫实例化就是将类实例化成对象,所以在类创建的可以说是实例也可以叫对象。
为什么类只能有一个对象,因为类是一个模版,模版不可能有多个,如果有多个就乱了,所以类只能有一个对象。静态是类的声明,因为类他也是一个对象,就会有属性和方法,但是他的属性和方法叫做静态。静态只有一份,因为类的对象只有一个而且还会给对象进行公开使用。
模版所造就出去的对象可以说是他的孩子,模板为母亲,一个模版可以造就千千万万个对象出来,每个对象都可以享用模版里面的功能,因为在分配的时候都给了权限。
静态属性和静态方法都需要加个static关键字这就是静态的属性与方法。实例的就是去掉static就是实例的属性和方法了。如图6.48所示:
图6.48
加了static就是类的属性和类的方法,区别就是对象都可以访问静态的属性和静态的方法如图6.49.所示:
图6.49
Test t1 = new Test();首先加载对象Test的内存,里面有一个type属性,这是属于Test类的属性。然后开始分配name和age的存储空间给了对象,这个对象同时又指向了type属性,为什么又执行了他?因为Test是模版,模版里面一些静态的东西都可以使用,所以就直接指向了type属性。也就是等于对象里面有一个type属性,同时拿类的时候,类也有type属性,他们都有type属性。然后又new Test(); Test又开始创建内存,分配了name和age的内存。有分配了一个对象,这个对象指向了name和age同时又指向了type。然后声明了2个变量,c1和c2。c1指向了这个对象,c2指向了那个对象。
图6.49中的打印结果是钢材,因为静态一份对象可以公用静态的对象,访问静态的成员,但是静态的成员是不可以访问对象的任何成员的。所以访问的都是同一份。
第一静态成员类被开始的第一次会被加载。第二静态成员可以被对象访问,但是访问的都是同一份。第三我们new千千万万个对象时候,他直接会对静态的成员自动产生引用的关系。如图6.490所示:
图6.490
技术分享:www.kaige123.com