java中的面向对象和封装
面向对象与面向过程
面向过程: 以过程为中心的编程思想,实现功能的每一步,都是需要编程者自己实现
大白话: 自己逐步完成功能,亲力亲为;强调的是完成功能的每一个步骤
面向对象: 以对象为中心的编程思想,通过指挥对象实现具体的功能
大白话: 有事让别人完成,工程师仅仅是一个指挥者;强调的是对象
类与对象
客观存在的事物皆为对象 ,所以常说万物皆对象
关系
类: 一类事物的抽象描述,相当于是一类事物的模版,图纸,模具
- 属性:描述事物的特征(成员变量)
- 行为:描述事物能执行的操作(成员方法)
对象: 就是生活中看得见摸得着的实实在在存在的物件
类是对象的模版,对象是类的体现
要想得到一个对象,必须根据类,创建(制造)出对象。所以为了得到对象,不得不先设计类
类的的定义
类的组成是由属性和行为两部分组成
- 属性: 在类中通过成员变量来体现(类中方法外的变量)
- 行为: 在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
定义步骤
- 定义类
- 编写类的成员变量
- 编写类的成员方法
- 编写构造方法
代码格式:
public class 类名{
类的成员变量; // 描述所有的这个类型的事物的 直接定义变量即可
类的成员方法;// 所有的这类事物应该具备的能力 写方法的时候,去掉static,参数和返回者还是按以前的思路设计即可
}
对象的创建和使用
代码格式:
类名 对象名 = new 类名();
调用格式:
对象名.成员变量
对象名.成员方法();
成员变量和局部变量区别
-
类中位置不同: 成员变量(类中方法外)局部变量(方法内部或方法声明上)
-
初始化值不同: 成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)
-
内存中位置不同: 成员变量(堆内存)局部变量(栈内存)
-
生命周期不同: 成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)
封装
private关键字
- private 是一个权限修饰符,可以用来修饰成员(成员变量,成员方法)
- 被private修饰的成员,只能在本类进行访问
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作:
- 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
- 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
this关键字
- this修饰的变量用于指代该类中的成员变量,其主要作用是(区分局部变量和成员变量的重名问题)
- 方法的形参与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
- 方法的形参与成员变量不同名,不带this修饰的变量指的是成员变量
注意事项: this代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象
构造方法
创建一个类的对象的时候,需要依赖的方法,就是构造方法,如果一个类中,没有可以使用的构造方法,那么就意味着我们无法直接创建出这个类的对象!如果一个类中有多个可以使用的构造方法,那么就意味着我么拥有了多种创建对象的[途径];
代码格式:
public 类名(形式参数){
一般只做给成员变量赋值的代码;
}
注意事项:
-
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
-
如果定义了构造方法,系统将不再提供默认的构造方法
-
方法名与类名相同,大小写也要一致
-
没有返回值类型,连void都没有
-
没有具体的返回值(不能由retrun带回结果数据)
-
创建对象的时候调用,每创建一次对象,就会执行一次构造方法
-
也可以在创建对象的过程中给成员变量赋值
-
不能手动调用构造方法
构造方法的作用是什么?
- 主要作用是用于创建对象,如果一个类中没有可以使用的构造方法(不写不是没有,不写的时候,java会默认赠送一个可以使用的无参数的构造方法),那么就无法直接创建这个类的对象
- 带参数的构造方法,可以在创建对象的同时,给类中的成员变量赋值!(在创建对象的过程中,给成员变量赋值)
空参数构造方法的作用是什么?可以不写吗?
- 空参数的构造方法,是java中最基本的构造方法,后面的很多技术都会默认使用这个构造方法,来操作我们自定义的类
- 强烈建议手动书写空参数的构造方法,从语法角度来说,可以不写,但是从开发角度来说,建议写上
带参数构造方法与setter方法的作用是否冲突,写了带参数构造方法时,是否可以不写setter方法呢?
- 带参数构造方法是创建对象的过程中,给成员变量赋值,强调的是这些成员变量的值与生俱来
- setter方法,强调的是这个对象创建成功之后,使用类中的setter方法,修改某个或某些成员变量的值(后天修改)
- 不能不写,因为二者并不冲突,各司其职,作用时机不同
getter方法和show方法作用是否相同,可以只写一个吗?
-
从语法角度说,可以只写一个,也可以都写或都不写
-
getter方法,作用是让"指挥者"可以从对象中获取成员变量的值
-
show方法,是我们"编写者"自己提供的一个用于展示成员变量值得方法,仅仅是打印出了成员变量的值
(show方法中写有可以将成员变量打印在控制台上的语句)
-
建议:现阶段getter方法无论你是不是能用的上,都建议写,show方法,用的上就建议写
标准javaBean的编写
- 从(01)到现在写的所有的描述事物的类都是javaBean,建议写javaBean的时候,无论你是否会使用到空参数构造方法,全参数构造方法,getter与setter方法,都建议全部写上去!!!(成员变量一定要封装!)