面向对象:
面向对象基于面向过程。面向对象是对面向过程的封装。解决问题只要找对象就行了。
比如:手机可以看成一个对象,它有发短信,接电话,打电话的功能。
特点:
1.面向对象是更符合思考习惯的一种思想
2.从过程的执行者转化成了对象的指挥者
3.使复杂问题简单化
类:用于描述事物的抽象概念 person
对象:是抽象概念具体化 xiaoming,23
对象存在的目的就是存储数据的,区别于数组,数组只能存储同一类型的数据。
构造函数:用于对象初始化。格式如下:
1.函数名和类名相同
2.没有返回值类型
3.没有具体返回值
构造函数与一般函数区别:
构造函数在对象创建时执行,只执行一次
一般函数在对象创建后,可别多次调用
构造函数可以调用一般函数,一般函数不能调用构造函数。但是构造函数之间可以相互调用,通过关键字this来解决。
构造函数私有化:
构造函数私有化可以限制创建对象,只能在本类中创建对象,其他程序因为无法初始化,不能创建对象。
在每个类中都有一个默认空参的构造函数。一旦在类中自定义了构造函数,默认的构造函数就没有了,若需调用无参构造函数,需重写一个没有参数的构造函数。
使用new关键字创建对象时,会在堆内存中开辟一段空间。
成员变量:对象中封装的变量叫成员变量
成员变量和局部变量的区别
1.源代码中定义的位置不同
成员:类中 局部:方法中
2.内存中存储的位置不同
成员:堆内存的对象中 局部:栈内存的方法中(生命周期较短,运行完释放)
3.生命周期不同
成员:随着对象的出现而出现(什么时候释放?垃圾回收吗?)
局部:随着所属区间的结束而释放
关键字this
this代表对象(哪一个对象调用this所在的函数,this就代表哪一个对象)。只要直接被对象调用的方法都持有this引用。
用于构造函数的this语句必须定义在构造函数第一行,因为初始化动作要先执行,只能用构造函数一次。
当成员变量和局部变量同名时,可以通过this关键字来区分。
关键字static
如果创建对象调用某一方法,发现该
方法并没有使用对象中的数据,该方法对于任何对象都是一样的。使用关键字static进行修饰(静态函数)。用static修饰的方法可以通过类名.方法名来调用。
同样的,还有静态变量。
特点:
1.被静态修饰的成员,可以直接利用类名调用
2.静态成员优先于对象存在
3.静态成员随着类的加载而加载,随着类的消失而消失。静态成员生命周期较长。
注意事项:
1.静态方法只能访问静态成员(因为静态方法的生命周期比较长,总不能它去访问的时候人家不存在了吧!)
2.静态方法中不能出现this或者super关键字(这些关键字都是和对象相关的)
3.主函数是静态的
静态代码块static{ }
随着类的加载而执行,而且只执行一次
作用:给类进行初始化
应用场景:类不需要创建对象。但需要初始化,就将部分代码存储到静态代码中。
静态代码块static{ }和构造代码块{ }
静态代码块先于主方法执行,只执行一次
构造代码块创建对象时被调用,优于构造函数执行。每次创建对象时都会被调用。
创建对象的流程
1.加载指定的字节码文件进内存
2.通过new关键字在对内存中开辟空间,分配首地址值
3.对对象的中的属性进行默认初始化
4.调用与之对应的构造函数,构造函数压栈
5.构造函数中执行隐式的语句super(),访问父类中的构造函数
6.对属性进行显示的初始化
7.调用类中的构造代码块
8.执行构造函数中自定义的初始代码块
9.初始化完毕,将地址赋值给指定的引用