面向对象
面向对象与面向过程
1. 面向对象以及面向过程实际上是一种思维方式,通过什么样的思维逻辑实现项目功能。
面向过程在流程中重点关注的是流程中的每一个动作/步骤,而面向对象在流程中重点关注对象。只要是找到了这个对象,就拥有了这个对象身上的一切功能。
2. 面向对象一定有优于面向过程吗?---不一定---一些相对简单的场景建议使用面向过程;一些相对复杂的事务建议使用面向对象。
3. 面向对象是基于面向过程的。
类与对象的关系
根据一类事物的共有特征和共有行为进行总结,将这一类事物的特征定义为属性,将这一类事物的行为定义为方法,就总结出来一个代表这一类事物的类。--- 类是对象的概括,在java中,也就是所写的 class{} 。而利用new关键字来创建一个对象(实例)---对象是类的具体化。
总结到类中的属性也叫作成员变量,总结到类中的方法称为成员方法。
注意: JVM会将.java文件编译为.class文件,并且每个类都会生成.class字节码文件,JVM运行的就是.class文件。
成员变量和局部变量区别:
1. 定义位置:成员变量是定义在类内;局部变量是定义在方法内
2. 作用范围:成员变量可以作用于整个类;局部变量只能作用于定义的方法内
3. 内存存储:成员变量会随着对象存到堆内存中,并且在堆内存中自动的赋予了一个默认值;局部变量在方法执行的时候到栈内存中存储,不会自动给予默认值
4. 生命周期:成员在对象被创建的时候出现,在对象被回收的时候销毁。局部变量在方法执行到对应的行的时候创建,在方法或者语句执行完成之后会立即释放
构造方法
我们在上文说过,通过new关键字对类进行实例化,其实准确的说是通过new关键字和调用类中的构造方法来创建对象。举个例子--- Random rand = new Random();这里new Random()是新创建的对象,而Random()就是Random类的构造方法。--- 每一个类中都至少一个有构造方法。如果没有手动添加,那么JVM在编译的时候添加无参构造。如果手动添加,JVM就不再添加了。
构造方法与类同名而且没有返回值类型。构造方法往往可以重载。
注意:可以在构造方法中写return吗?---可以---用于规避掉不合常理的数据
对象在内存中的存储
this关键字
this用在本类方法中调用本类中的属性或者是方法的。
this代表本类的实际对象。
注意:在java中,所有的非静态属性和非静态方法都是通过对象来调用的,所有用this指代当前调用本类方法的对象。
this语句---this(参数)---表示调用本类中其他的对应形式的构造方法---this语句必须放在构造函数的第一行
构造代码块
在类内用{}包起来的代码块---构造代码块/初始化代码块。在创建对象的时候无论调用哪个构造函数,构造代码块都会先于构造函数执行一次。
构造代码块的用途主要也是用于构建对象,但是因为每个构造都需要执行这部分的代码,所以将构造代码块抽离出来,形成构造代码块,但是需要注意代码块的执行先于构造,涉及构造中赋值之后的操作,不适用。