面向对象思想
- 概述:面向对象是java语言编程使用的一种解决问题的编程套路,是一个编程思路
- 面向过程和面向对象区别:
面向过程:注重解决问题的基本步骤,强调解决问题的过程;比如:碰到一个问题,要考虑每一步怎么去完成。
面向对象:注重解决问题的主体,强调找一个主体去完成;比如:碰到一个问题,不需 要考具体的步骤,考虑如何找到一个主体 - 面向过程和面向对象的具体关系:
面向对象是更高一层的编程思想;面向对象是基于面向过程的,需要先有面向过程,才 能有对象去使用 - 使用面向对象思想好处:
(1)可以减少代码的冗余量
(2)可以降低代码解决问题的难度
(3)由执行者变为了指挥者 - 特征:
封装、继承、多态
类和对象
类的定义
- 一个类型都无非是从两点来进行定义和表示:
属性:表示当前类型的一些概述和介绍
在java语言中,都是通过一个个变量来定义
定义属性变量和之前不一样,需要在类中方法外定义(成员变量)
行为:表示当前类型的一些功能,可以做哪些事情
在java语言中,通过一个个方法来表示行为和功能
表示类型的方法:修饰符统一写为public - 特点:不管是带着主方法的测试类也好,还是自己定义的类型也好,在编译之后都会生 成一个对应名称的.class字节码文件
对象的定义
- 概述:对象表示某一个类型的实例,表示一个真实的事物,具体事物
- 创建对象的格式:
类型名 对象名 = new 类型名(); - 说明:
(1)类型名:创建哪一个类的实例,就写哪一个类的名字即可
(2)对象名:起一个名字 小驼峰命名法
(3)=:将右边的对象地址赋值给左边的对象名
(4)new:关键字 创建对象的关键字
(5)类型名:和前面的保持一致
(6)类型():构造方法 - 对象访问属性:
对象名.属性名
对象属性赋值:
对象名.属性名 = 值; - 访问方法:
对象名.方法名();
成员变量和局部变量的区别
- 成员变量:在类中方法外定义的变量
- 局部变量:在方法中定义的变量
- 区别
(1)定义的位置不同
(2)在空间中存储的位置不一样
局部变量:在栈内存中分类空间存储值
成员变量:在对象中创建空间,对象在堆内存中,成员变量在堆内存中
(3)生命周期不同
局部变量:随着方法的调用而存在,随着方法的出栈而消失
成员变量:随着对象的创建而存在,随着对象的消失而消失(当没有引用指向堆 内存中的对象时,对象会被垃圾回收机制回收掉)
(4)默认值不同
局部变量没有默认值,必须先赋值后使用
成员变量有默认值
封装
封装
- 概述:在客观世界中,每个人的属性都是私有的都是隐藏的,并不是信息都可以被随意的访问。在java语言中每个类的属性应该也是私有的,应该是也隐藏的,如果满足一定的条件才可以访问属性或者非法。
- 封装的原则:
(1)隐藏事物的属性和行为
(2)提供一些公共的访问方式 - 好处:
(1)提高数据的安全性
(2)也可以提高代码的复用性 - 封装属性和方法使用一个关键字:
private :私有的
特点:
可以使用该关键字修饰变量
修饰方法
修饰类型或者接口
修饰常量
效果:
一旦属性和方法被priavte修饰之后,只可以在本类中被访 - 一旦将属性封装之后,外界是不能随意的访问,但是也不能访问了
所以需要给属性提供一些公共的访问方式
给属性赋值或者取值分别提供一个方法:
给属性赋值的方法:set方法
给哪一个属性赋值,方法名称就写为:set属性名
给属性取值的方法:get方法
取哪一个属性的值:方法名称为:get属性名
变量访问原则
就近原则:
在某个方法中,如果需要使用某一个变量
首先在当前方法中寻找,有没有该变量的定义,如果方法中有定义,就直接使用
如果在方法中没有该变量的定义,就去当前方法所在的类中寻找有没有定义,如果有定义就使用,如果当前类中也没有该变量定义,就编译报错
封装优化
-
在定义变量时应该做到见名知意,但是给set方法的形参定义名字之后,不能给对象中 的属性赋值成功,因为有就近原则。
-
为了避免这个错误,就使用了this关键字,被this修饰之后的属性,就直接表示当前对 象中的属性。
-
this:当前对象 哪一个对象调用this所在的方法,this就表示哪一个对象
public class Demo { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }