Java面向对象编程
面向对象与面向过程
- java的总纲领
- 例如
- 道德经
- 道可道非常道,名可名非常名
- 九阴真经
- 是故虚胜实,不足胜有余
- 道德经
- 人生境界
- 所有的事情我只要努力就会成功
- 我发现有些事情我努力了也不一定会成功
- 我明明知道有些事情努力了不一定成功,但我还是会拼尽一切去努力实现
- 核心目标是一样的
- 让我们的代码实现某些功能
- 吃饭:
- 妈妈–面向过程(比较细致,细节多)
- 父亲–面向对象(比较粗糙)
- 面向对象和面向过程属于相互补充依存的关系
- 这两者是不可分割的
- 面向对象就是以Java的世界观来描述世界
- 在java的眼中,一切都是对象(万事万物皆对象)
- 我们考思考解决方案的时候都是以对象的为基础进行思考
- 有时我们为了更好的去管理对象,我们需要按照类别对对象进行抽象
- 抽象有的时候也分抽象的级别 枣树–树--植物
- 抽象对象的时候也会考虑抽象的维度(属性,方法,构造器)
类与对象
-
对象就是我们生活中真实存在的一个事物,我们可以观察或者感觉到
-
类是我们对同一类事物进行抽象所得到的一个概念
- 将来如何判定新的事物是什么,我们通过以前类的概念进行甄别
-
类是对象的抽象,对象是类的具体实现
- 类只存在一种,就相当于模板
- 对象可以有千千万万,而且可能各有不同
- 但是对象就是类的千千万万种实现之一
-
例如
- 小王,明天帮我买一个杯子(类)
- 小王买了一个咖啡杯(对象)
-
可以理解为
- 类就是一张手机图纸
- 对象就是通过这张图纸制造的手机
-
类与对象的关系就是抽象与实现
- java是面向对象的语言
- 处理一切逻辑都是基于对象,所以我们处理逻辑前需要创建对象
- 我们只能通过类去创建对象,类又是从对象抽象出来的
- 抽象类之前我们需要对对象进行充分的一个认知
-
类与对象的关系
- 类是对象的模板,对象是类的具体实现
- 类定义了对象的静态属性和动态属性
- 类是class 对象是Object Instance
-
类会抽象什么内容?
- 小狗
- 颜色
- 类别
- 体重
- 高度
- 长度
- 看家()
- 保护主人()
- 追小球()
- 带铃铛()
- 静态属性:
- 现在可以理解为成员变量,成员属性
- 动态属性
- 成员方法
- 小狗
类的定义
- 在一个java文件中可以同时存在多个class类,但是只能有一个类被public修饰
- 并且这个类必须和文件名同名
- 语法格式
- 修饰符 class 类名{
- 属性
- 方法
- }
- 类名
- 基本上和变量规则相同
- 类名首字母需要大写,其他驼峰原则
- 属性
- 主要用来定义对象的一些静态特征
- 方法
- 主要用来定义对象的一些动态行为或者功能
- 构造器
- 构造器不需要我们手动的去调用
- 构造器默认会在创建对象的时候自己调用
- new ,继承调用,反射调用
- 构造器的作用就是为了初始化我们对象的一些属性
- 系统默认会给类一个空构造器,但是一旦我们手动书写构造器,空构造器就失效了
- 将来大家抽象类的时候只需要抽象和业务相关的属性或者方法即可,不可能全部抽象
- 全部抽象太复杂
- 会浪费掉一部分内存的开销
- 修饰符 class 类名{
- 创建对象
- 数据类型 变量名 = 变量值;
- 类 对象名 = new 类();
JVM的内存分析
- 首先jvm的内存是基于当前计算机内存影响的
- 我们创建的变量都会存放到内存中
- 本次代码变量由多少个
- Hello05Jvm
- #main()
- pastryChef
- cake
- #main()
- PastryChef
- String name;
- int phoneNumber;
- #cook()
- box
- cake
- Cake
- int eggs;
- double price;
- String type;
- Box box;
- Box
- int radius;
- String color;
- Hello05Jvm
- 因为jvm内存大小是有限的,而我们要创建的对象又很多,我们就需要对jvm进行合理的规划和管理
- 对象使用完毕需要回收
- jvm为了便于管理,将JVM内存定义不同的空间,不同的空间拥有不同的作用
- java虚拟机栈
- 每一个线程独享一个虚拟机栈
- 就相当于大家去超市推的小推车,小推车中的物品是属于自己的
- 而且超市中有很多的小推车
- 方法区
- 存放不会被改变的数据
- 大家也可以共享,但是轻易不会被修改
- 堆内存
- 类似于超市的货架,所有人可以选取或者操作货架上的商品
- 程序计数器
- 本地方法栈(这个图就没有画方法区,后面讲了静态再说)
- java虚拟机栈
- 本次代码变量由多少个
方法的重载
- 假设你有一个女朋友,女朋友有一个接收礼物的方法
- 重载是指在同一个类中,方法的名字相同,但是方法的参数
- 数量
- 类型
- 顺序
- 如果参数的类型都是一样的,即使调换顺序也不能构成重载
- 不同,这种我们成为方法的重载
- 两同三不同
- 类和方法名相同
- 参数的数量类型顺序不同
- 返回值类型不同不能成为重载的判断依据
- 当我们调用重载方法的时候,会根据参数的类型就近选择合适的方法
- 即使参数的类型和形参的类型不匹配也没有问题,他会进行自动的转换
构造器Constructor
-
构造器是为了初始化对象的,每次创建对象之后都会默认调用构造器
-
每一个类都有一个默认的空构造器
-
如果你一旦自定义了构造器,那么默认的构造器就会失效,将来我们很多时候需要手动定义空构造器
-
语法格式
- 不能写返回值
- 构造器的名字必须和类名完全相同
-
构造器是一个比较特殊的方法,特殊在不写返回值
- 其实构造器有返回值就是你创建的对象
- 为了体现构造器的特殊性,我们不需要写返回值类型和return
-
构造器根据业务需求也可以进行重载
- 类型 数量 顺序
-
其实我们学习构造器,很多概念和方法时很类似的
String
- String是基本数据类型还是引用数据类型?
- 引用数据类型:基本数据类型只有8种,除此之外全部为引用类型