面向对象本身是一种思维方式。
面向过程---注重流程中的每一个步骤/动作
面向对象---看重的是对象,只要找到了对应的这个对象,就拥有了对象身上的一系列功能
面向对象优于面向过程吗?---如果处理的是一些相对简单的事物,建议使用面向过程;如果处理的是一些相对复杂的事物,建议使用面向对象
把大象装进冰箱---要找的对象是冰箱
打开冰箱门
将大象塞进冰箱
关上冰箱门
面向对象实际上是基于面向过程的
类与对象的关系
对一类对象进行概括,将这一类对象的共有特征和共有行为进行抽取,将特征抽取为了属性,将行为抽取为方法,形成了一个可以代表这一类对象的类---类是对象的概括/抽取
有了类之后,可以根据new关键字来创建于一个本类对象---对象是类的具体化
练习:定义一个类代表矩形,在这个类中定义对应的方法来计算该矩形的周长和面积
构造方法
在类中与类同名而没有返回值类型的方法----作用:创建对象。
如果一个类没有手动添加构造函数,那么JVM在编译的时候默认添加一个无参构造;如果手动指定了则不再添加。
构造方法可以进行重载。
对象的内存图
对象在内存中存储在堆内存中,并且对象中的属性在堆内存中自动的赋予默认值。对于byte/short/int->0, long -> 0L, float -> 0.0f, double ->0.0d, boolean ->false char -> ‘\u0000’, 其他的属于引用类型,如果是引用类型的话,默认值统一为null
当进行对象的赋值的时候,实际上两个对象之间传递的是地址。
this
注意:在Java中所有的非静态属性和非静态方法都是通过对象来调用的。
在定义类的过程中,没有具体的本类对象,用this代替具体对象来调用本类中的普通方法和属性。---而当创建好具体对象之后,this就代表了对应的对象---this代表了当前在活动的对象的引用
class Student {
String name;
int age;
char gender;
public void study(){
System.out.println(this.name+ “在学习~~~”);
}
}
Student s = new Student(); // 当创建好这个s对象的时候,this就代表了s
Student s2 = new Student(); // this就代表s2
s.study(); // this代表s
this语句---表示在本类中调用本类其他形式的构造函数---必须放在构造函数的第一行
构造代码块
在类中用{}包起来的代码,也称之为初始化代码块。---无论调用哪种形式的构造函数,都会先于构造函数来执行一次。---提高代码的复用性
匿名对象
没有名字的对象---指定在定义的时候使用一次---在栈内存中没有引用,可以作为参数进行传递
局部代码块
在方法中用{}包起来的代码---限制变量的使用范围,从而限制了变量的声明周期,提高内存的利用率
面向对象的特征
封装、继承、多态(、抽象)
封装
体现形式:方法,属性的私有化---将属性设置为private,通过对外的方法来获取或者设置这个属性的值,是为了限制属性的值符合实际场景。
优点:提高代码的复用性,提高代码的安全性(主要指的是数据的安全)