您的位置:首页 > 其它

面向对象的基本概念

2017-03-06 22:21 357 查看

一、面向对象的基本概念

编程两种思维方式:

(1)面向过程的编程方式

根本具体的操作步骤去实现程序

缺点:不通用,只指对一个程序(事情)

            不利于维护(不能适应变化)

(2)面向对象的编程方式

解决程序适应变化的能力(可维护性强)降低功能之间的相互依赖

(1)先整体,后局部

(2)先抽象,再具体

(3)能做什么,怎么做

考虑粒度的问题

如何抽象:

考虑事物的共同点(共性)

JAVA 里是:一切皆对象

二、类与对象

对象:一切具体的事物

类:同有相同特征(属性)和行为(方法)的事物集合

分类,类别

程序的组织结构就是类

(1)new关键字:表示向内存申请空间,也表示实例化一个对象,

    创建一个对象。

(2)一个对象在内存中的大小,由该对象的所有属性所占的内存

    大小的总和。引用类型变量在32位系统上占4个字节,在64位

    系统上占8个字节。加上而外的对象隐性数据所占的大小。

(2)相同的类型才可以赋值

(3)不同的引用,指向同一个对象,任何一个引用改变对象的值,

    其它引用都会反映出来。

(4)编程时要注意的问题,在确定不使用对象时,要尽早释放对象

    :引用=null

(5)当一个堆中的对象没有被任何引用变量所指向时,该对象会被

    JVM 的 GC 程序认为是垃圾对象,从而被回收。

三、封装性

面向对象的特征是什么:

封装、继承、多态、抽象

面向对象的三大特征:封装、继承、多态

封装性:

封装的概念:隐藏实现细节,提供对外访问的接口

好处:

隐藏细节

安全性

模块化

代码重用

插件化易于调试

利于维护

封装:

属性的封装,方法的封装,类的封装,组件的封装,模块化封装

系统级封装

封装缺点:

会影响执行效率

四、构造方法

是在创建对象时自动调用。

构造 方法的特点:

(1)构造方法名称与类名相同,没有返回值声明(包括 void)

(2)构造方法用于初始化数据(属性)

(3)每一个类中都会有一个默认的无参的构造方法

(4)如果类中有显示的构造方法,那么默认构造方法将无效

(5)如果有显示的构造方法,还想保留默认构造 方法,需要

        显示的写出来。

(6)构造方法可以有多个,但参数不一样,称为构造方法的重载

(7)在构造方法中调用另一个构造方法,使用this(...),该句代码

        必须在第一句。

(8)构造方法之间的调用,必须要有出口。

(9)给对象初始化数据可以使用构造方法或setter方法,通常情况

        下,两者都会保留。

(10)一个好的编程习惯是要保留默认的构造方法。

        (为了方便一些框架代码使用反射来创建对象)

(11)private Dog(){},构造方法私有化,当我们的需求是为了

        保正该类只有一个对象时。

        什么时候一个类只需要一个对象?比如,工具类

        (没有属性的类,只有行为)并且该工具

        对象被频繁使用。权衡只用一个对象与产生多个对象的内存

        使用,来确定该类是否要定义为只需要一个对象。

//操作文件

public class FileUtils{

    private FileUtils(){}

    public void save(){

        //..

    }

    public void read(){

        //...

    }

}

FileUtils fu = new FileUtils();

fu.save();

fu.read();

//FileUtils fu = new FileUtils();

fu.save();

fu.read();

//FileUtils fu = new FileUtils();

fu.save();

fu.read();

五、方法的重载(overloading)

方法的重载是发生在同一个类中,

多个方法,方法名相同,参数列表不同,返回值不能作为重载的条件

什么时候用重载?

当我们的业务类型类似,参数不一样,就可以使用重载,比如:

public void save(String path){} //把数据保存到文件中

public void save(Cat cat){}//把对象保存到数据库中

//public boolean save(Cat cat){}



六、String类

(1)String类的两种赋值方式:

1、String s1 = "小黄";

2、String s2 = new String("小黄");

直接赋值:检查字符串中的常量池(堆内存)是否存在该对象,如果存在,则直接指向

                该对象,如果不存在,就在常量池中创建并指向该对象。(最少不用创建

                对象,最多只创建一个对象)

使用new关键字:在堆内存中创建一个字符串对象,并指向该对象,然后检查常量池中

        是否存在该字符串对象,如果存在,则结束;如果不存在,就在常量池中创建一个

        字符串对象,以供其它直接赋值时使用。(最少创建一个对象,最多创建两个对象)

在 JAVA 中,我们推荐使用直接赋值的方式,有助于节省内存空间。

面试题:String s2 = new String("abc"); 创建了几个对象?

String类真正用于存储数据是使用char[]

在 String字符串相加时,是在常量池中创建对象还是在堆中创建新对象?

如果字符串的值在编译期可以被确定,那么会在常量池中创建

否则在运行期时在堆中创建对象

结论:

字符串常量相加,不会产生垃圾对象

字符串与变量相加,加的越多,垃圾对象越多

String s = "6"+ "abc" + "b" +"677" + "x";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: