面向对象与面向过程
面向过程:执行者 费时间 费精力 结果不一定理想
面向对象:指挥者 省时间 省精力 结果比较理想
面向过程与面向对象他们之间并不是互斥的关系,面向对象基于面向过程
广义对象:但凡存在与现实生活的事物 都可以称之为对象(事物)
广义类:将那些具有相同属性和功能的对象进行的统称/分类
狭义对象:就是是指由某一个类所描述出来的具体的事物
狭义类:将那些具有相同属性和功能的对象进行的统称/分类
图纸是类,楼是对象。纸对于图纸来言是类。
Object String 是类
new String()对象
Class 字节码类,Class是Java中对字节码的统称
在现实生活中先有对象后有类
在计算机中先有类后有对象
我们在面向对象编程中,一般是先定义类,再定义对象
如何创建一个类?
封装:将独立单元或者多个数据进行整体的封装,目的在于重复利用和操作方面
不需要过多在乎封装的内容,我们只需要调用即可,底层对于调用者而言是透明的。
(1)循环:将重复执行的代码进行封装到循环语句中
(2)函数:将具有独立功能的代码进行封装到函数中
(3)数组:将多个同类型的数据进行封装到数组中(数据类型一样,空间连续,操作相同)
(4)类:将具有相同属性和行为的对象进行统一的封装
我们在描述类的时候,主要描述的就是属性和行为
类-C语言结构体
C语言中结构体 :将多个数据进行的封装(数据类型不一定一样,空间也不一定连续,操作不一定一样)
struct Node{
int e;
Node *next;
}
C语言中属性和行为是分开的
在Java中如何定义一个坐标数据?
int [] point = {3,4};
int [][] points = {{3,4},{5,7},{1,2}};
计算两个坐标之间的距离
public static double distance(int[] p1,int[] p2){...}
将属性和行为进行封装
例如:ikun.身高
ikun.rap()
更加符合仿生仿真,更加拟人化。
Java类当中属性和行为是结合在一块的
语法
权限修饰符 类型 class 类名{
//属性- 用变量/常量表示
//行为- 用函数
(对类的描述和定义)
构造代码块
静态代码块
成员变量/实例变量
静态变量
构造函数/构造器
成员函数/实例函数
静态函数
继承而来的函数
修改器
访问器
}
注意事项:
定义一个坐标这个类 //在Java中 尽量一个.java文件中包含一个类 //并且类名和文件名必须一致 //和文件名同名的类必须是public类型 //并不是每一个类都可以运行的 主要看该类中是否存在主函数! Point一般是不需要运行的。 Point这个类,主要用于描述事物——实体类 一般负责运行的类 都有主函数——主类
成员变量:实例变量,是对象的特有属性
每个对象都应该具有这些属性
并且每个对象该属性的值不一定一样
语法:权限修饰符 数据类型 变量名 = 值;
成员变量是具有默认初始化的
int 0
double 0.0
boolean false
Object null
成员变量是具有显式初始化的
(大家出来都一样,都是类中写明的值)
成员变量的初始化流程:先默认再显式。
默认和显式都是在创建对象的过程中进行的!!
任何事物的属性和行为并不都是要对外开放的,要看情况而定
建议属性不要对外界开放
外界不仅可以访问对象的属性,同时也可以修改对象的属性
尤其在修改的时候,可能会产生一些业务逻辑的问题
Person p = new Person();
p.age = -10; //代码逻辑没问题 业务逻辑有问题
得将属性进行封装-私有化-private
私有化之后,外界看不到私有的内容
私有化最大的目的 其实在于不想让外界随意的修改对象的属性
私有化之后就不能进行正常的访问了
外界只提供修改的建议
设置 属性修改器——成员函数 setAge()
同时为了避免正常访问被限制,需要提供另外一个思路去向执行外界
设置 属性访问器——成员函数 setAge()
一般建议属性都是需要私有化的,除非个别属性需要向外界访问
对于访问器:就看后续外界需不需要访问这些属性
对于修改器:就看后续外界需不需要修改这些属性
成员变量与局部变量的区别?
生命周期
成员变量 随着对象的创建而诞生,随着对象的消亡而消失
局部变量 随着函数的进栈而诞生,随着函数的弹栈而消失
存储位置
成员变量 存储在堆内存中 某一个对象的空间里
局部变量 存储在栈内存中 某一个函数的空间里
初始化
成员变量 有默认初始化 - 显式初始化
局部变量 必须先初始化 再调用
调用范围
成员变量 在类中全局
局部变量 只能在函数内部
成员函数:实例函数,对象的特有行为 每个对象都应该具有的行为 这个行为每个对象的流程都是一样的 语法格式:权限修饰符 返回值类型 函数名(参数列表){ 函数体 } 注意:没有static的! 函数中的参数 实际上是该函数的局部变量(在函数内部创建的变量) 局部变量与成员变量重名,一般用this关键字进行区分 this含义为 当前对象的 */ //计算当前点到别的点之间的距离