面向对象的基本概念

一、面向对象的基本概念

编程两种思维方式:

(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";







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值