面向对象是一种技术的开发模式,但是最早的时候所使用的模式是面向过程
1):面向过程:指的是针对于某一个问题单独提出解决方案以及代码开发;
2):面向对象:以一种组件化的形式进行代码设计,这样开发出的代码有一个最大的好处就是可以重用;
在面向对象程序中有几大特性:
1):封装性:保护内部的定义结构安全性;
2):继承性:在已有的程序结构上继续扩充新的功能;
3):多态性:指的是在某一个概念范围内的满足。
OOA(面向对象分析)OOD(面向对象设计)OOP(面向对象编程)
面向对象就是一种组件化的设计思想。
类与对象是整个面向对象之中最为基础的组成单元,如果需要给出划分定义的话;类就是共性的集合,对象就是某一个性的产物;
类与对象的关系:
所有的类实际上都是用来描述出对象的结构,例如:每一个人的姓名、身高、年龄等等一系列的因素;某一类的共性的集合对象,除了具备以上的特性(属性)之外,实际上还包括许多的行为(功能),所有根据此类所产生出的对象都具备相同的行为,对象所能够操作的行为都是由类来决定的,超出了类定义范畴操作是不能够使用的;
类实际上是对象操作的模板,但是类不能够直接使用,必须通过实例对象来使用。
类是不能够直接使用的,对象是可以直接使用的;对象是通过类产生的。
声明并实例化对象:类名称 对象名称 = new 类名称();
分布完成:
-声明对象:类名称 对象名称 = null;
-实例化对象:对象名称 = new 类名称、();
new -->为了开辟空间
当一个对象实例化之后那么就可以按照如下方式利用对象来操作类的结构:
对象 . 属性:表示要操作类中的属性内容;
对象 . 方法():表示要调用类的方法
属性内容为空那么内容是对应数据类型的默认值String = null double默认为0.0
如果想进行内存分析,可以首先给出两块内存空间的概念:
-堆内存:保存每一个对象的属性内容,堆内存需要用关键字new才能开辟
-栈内存:保存的是一块堆内存的地址。但是为了分析方便,可以简单的理解栈内存保存的是对象名字
只要看见了关键字new 都表示要开辟新的堆内存空间
开辟了堆内存的对象称为实例化对象;倘若现在使用了没有实例化的对象,则运行错误NullPointerException(空指向异常)
引用数据的初步分析:最关键的是在于关键字new,每一次使用关键字new都一定会开辟新的堆内存空间,所以如果你的代码里声明两个对象,并使用了关键字new为我们两个对象分别进行对象的实例化操作,那么一定是各占各的堆内存空间,不会相互影响
任何一个对象修改了堆内存中的数据后,那么都会影响到其他对象
一个堆内存可以同时被多个栈内存所指向,但是反过来,一块栈内存只能够保存一块堆内存空间的地址
在引用数据类型关系里面,一块没有任何栈内存指向的堆内存空间就将成为垃圾,所有的垃圾会不定期的被垃圾收集器(GC)进行回收,回收之后会释放掉其所占的空间
代码开发中尽量减少垃圾空间的产生
总结:
1、类描述的是公共特征,类必须通过对象才可以使用;
2、声明对象指的是为开辟堆内存的对象,如果直接使用此对象会出现空指向异常
对象可以通过关键字new来进行堆内存空间的开辟,有了堆内存引用的对象才称为实例化对象;
3、堆内存保存的是对象中所有属性的内容,而栈内存保存的是堆内存的地址数值
4、垃圾空间指的是没有任何栈内存指向的堆内存空间,会被GC不定期进行回收
5、熟练掌握内存图的分析方法
封装性:
所有在类中定义的属性都要求使用private声明,如果属性需要被外部所使用,那么按照要求定义相应的setter、getter方法以String title为例。
setter方法主要是设置内容,public void setTitle(String t)有参;
getter方法主要是取得属性内容:public String getTitle().无参。
对于数据的验证部分,在标准开发之中应该是由其他辅助代码完成的,而在实际开发之中,setter往往只是简单的设置数据,getter简单的取得数据而已。
总结:
-封装性就是保证类内部的定义被外部不可见,但是本次所讲解的封装,所有面向对象中封装的最小概念;
-所有属性都必须使用private封装,封装后如果想使用就必须使用setter、getter方法。
构造方法:
①类名称 ②对象名称 = ③new ④类名称();
①类名称:规定对象的类型,即:对象可以使用那些属性与那些方法,都是由类定义的;
②对象名称:如果要想使用对象,需要有一个名字,这是一个唯一的标记;
③new:开辟新的堆内存空间,如果没有此语句,对象无法实例化;
④类名称():调用了一个和类名称一样的方法,这就是构造方法。
所有的构造方法实际上一直被我们调用。但是我们从来没有去定义一个构造方法,之所以能够使用是因为在整个java类之中,为了保证程序可以正常的执行,那么即使用户没有定义任何的构造方法也会在程序编译后自动的为类里面增加一个没有参数,方法名称与类名称相同,没有返回值的构造方法。
构造方法的定义原则:方法名称与类名称相同,没有返回值声明。
所有的构造方法都在对象使用关键字new实例化的时候被默认调用
构造方法与普通方法的最大区别:
构造方法是在实例化新对象(new)的时候只调用一次。
普通方法是在实例化对象产生之后可以随意调用多次
如果类中已经明确定义了一个构造,默认的构造将不再自动生成。
在实例化对象的同时将所需要的类属性传递到对象的构造方法里
在实际的工作之中构造方法的核心作用:在类对象实例化的时候设置属性的初始化内容。构造方法是为属性初始化准备的
如果一个类之中已经明确的定义了一个构造方法的话,那么不会再自动生成默认的构造方法,即一个类之中至少保留有一个构造方法;
在进行构造方法重载的时候有一点代码编写的要求:请按照参数的个数进行升序或降序排列
在对象实例化的过程中,一定会经历类的加载、内存的分配、默认值得设置、构造方法。
匿名对象:
那么既然有了构造方法的概念,实际上就可以依照此方式使用匿名对象。真是的对象信息都保存在了堆内存空间之中,那么如果没有栈指向的对象就成为匿名对象
如果觉得匿名对象麻烦,就都用有名的吧!
但是匿名对象由于没有其他对象对其进行引用,所以只能使用一次,一次之后该对象空间就将成为垃圾,等待回收
总结:
构造方法的定义要求:方法名称与类名称相同,无返回值声明
构造方法是在类对象使用关键字new实例化的时候被默认调用的,不管你代码如何改变,只要是有了关键字new就一定需要我们的构造方法;
一个类之中至少会保留有一个构造方法,如果没有明确定义构造方法,那么会自动生成一个无参的什么都不做的构造方法;
构造方法的核心功能是在类对象实例化的时候为类中的属性初始化
构造方法重载时只要求考虑参数的类型及个数即可
匿名对象只能使用一次
网友评论