- 5.构造方法
面向对象
- 初识面向对象
- 面向对象 : 就是一种编程思想
- 面向过程 : 也是一种编程思想
- 最近几天重点:
基于面向对象的编程思想,不断理解认识,使得语法认知更加清楚,并细致总结每一个语法点,关于面向对象的语法,前期需要非常努力,后期也会持续加强,但学习时不可以疏忽懈怠
- 面向对象类和对象的概念理解
生成一辆汽车过程示例
- 软件开发面向对象类和对象理解
面向对象和面向过程都是软件开发的一种编程思想,要真正的理解一种编程思想,或者说应用在实际的开发设计中,并不是看几本书,听我说几句就能搞定的事情,需要先了解,在实际开发中应用,这样不断的思考分析、积累,从而达到理解。
举个事例,现在我手上接了一个500W的项目,接下来我需要完成这个项目,现在我有两个选择:第一是自己一人开发;第二是组建团队或者说外包。
第一,自己一个人独立开发。
那么我需要做的事情可能就包括了:需求搜集、分析,原型设计,项目架构设计,编码实现,项目测试,项目实施等等。其中每一件事情都必须亲力亲为,感觉心里倒也踏实,不过这个过程可能是这样:
- 哈哈,接了个单高高兴兴敲代码!!
- 丫,咋还出bug了呢,纳尼。。。
- 不会吧,我都调试3个通宵了。。。
- 糟糕,我要崩溃了,。。。
- 儿(安息吧!)
?当然是数钱啦()
类与对象
- 类和对象认识
类和对象 理解 :比如做一个500W的项目 :
- 设想我们学生信息需要管理的信息
- 姓名
- 年龄
- 电话
- .......
现在模拟一种场景:现实的世界和虚拟的世界:理解类和对象
- 比如现实生活中:管理学生信息,设想计算机系统如何管理学生信息
①设计纸质模板,用于填写学生信息的模板
②复制模板:填写具体的学生信息
- 设想计算机系统应该怎么做
①应该设计一个模板,用于填写学生信息的模板
②复制模板:填写具体的学生信息
现实生活中管理与系统中管理区别
- 现实生活中:比如收集学生的情况,如果通过每个人来填写,使用纸质文件保存,不方便,
查找不方便,纸质容丢;( 老鼠 )
- 系统中管理:数据安全,不容易丢失,保存方法
系统数据基本设计
- 所以需要做一个系统,我们需要做什么事情:模拟现实社会中现象
①先写一个模板--->需要一个类;
②然后录入人的信息--->对象;
系统设计类与对象的认识
- 现实生活中
①现实生活中,做一个纸质模板:目标是为了统计某一类事物的数据,录入学生信息模板,主要为了统计学生信息
理解:学生信息纸质模板,没填写任何数据,描述学生这一类事物!是一个类
②现实生活中,复制纸质模板,得到独立的崭新的一份,填写具体的信息,该复制的模板填写了具体的信息,描述了一个具体的信息
理解:学生纸质模板,填写了具体的信息,描述的是一个具体的学生,是一个对象
- 虚拟世界中
①需要个模板,一个类,用来描述一类事物
②可以复制该模板,填写具体的信息,用来描述具体的一个事物
- 再次强化类和对象的概念
①[类]:就是一个类事物:是不具体的:是类
②[对象]:就是一个具体的学生,是具体的:是对象
- 类和对象理解
什么是类?
类 :是指描述一类事物,或者看成是一个分类, 例如人类、车类、星球类、猪 等等
╭︿︿︿╮
{/ o o /}
( (oo) )
︶︶︶
什么是对象?
对象 :是指具体的个体(也叫实例-instance), 例如马云、王石、老郑、马云的迈巴赫、王石的切诺基、
老谭的二八自行车、地球、火星等等。类和对象的关系请看下面的图例:
类和对象小结
类[模板]---->[复制模板]对象
java语言世界:万事万物皆对象
java语言世界:万事万物皆可分类
- Java语言设计思想
希望将现实生活中,对象与对象之间的关系在计算机系统得以体现,从而构建计算机系统,用的对象!
- 事物的简单思考
- 百度面向对象
https://jingyan.baidu.com/article/066074d6541537c3c21cb0ca.html
- 简单事物思考
现实世界中,随处可见的一个事物就是对象,对象是事物存在的实体,如人类、书桌、计算机、高楼大厦等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象所属于的某一类事物都是由哪些部分组成的。
通常都会将对象划分为两个部分,即动态部分【行为】与静态部分[描述]。//.属性
①静态部分:顾名思义就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,它包括高矮、胖瘦、性别、年龄等属性。
②动态部分:然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分),
- 人类通过探讨对象的属性和观察对象的行为了解对象。
静态部分:属性
动态部分【行为】:属性
- 如何设计类[从代码的角度]
- 如何设计类
①java中的类,就是类!用来描述一类事物,任何事物包含:静态属性,动态属性
java中的类就是用来描述一类事物!
②通过设计类,可以用来描述一类事物
③如何设计:
静态属性[描述]:成员变量[成员字段]
动态属性[行为]:方法
- 设计学生类:语法:
class Student{//描述了学生这一类的事物
String name;//静态属性【成员变量 可以不用初始化值】姓名
int age;//静态属性年龄
void eat(){//动态行为:可以完成一定的事情,做一定的功能
}
}
用来描述一类事物的
类规范书写:
- 类名首字符大写; Student
- 类名必须具有意义;
- 必须写注释;
示例 : 设计一个学生类(模板))
参考如上: 设计一个学生类(模板))
class Student{//Student描述类这一类事物,模板
String name; // 姓名
int age; // 年龄
....................................
void eat(){ }
void sleep(){ }
}
- 小结
对象的创建
- 如何创建对象
暂时: new 类名(); --------->相当于学籍卡模板复印件
注意: 复印件(对象)暂时没有填写具体的学生信息
- 给对象字段赋值
如何操作:
- 注:复制一份模板相当于创建了一个对象:给该对象描述静态属性的字段赋值:用于描述一个具体的学生对象
class _01Test{
//创建对象:复制模板----->复制的一份都是独立的一份
public static void main(String[] args) {
//暂时记住: new 类名();复制了一份,创建了一个对象:本质 new Student();这就是一个对象
new Student();
//给复印件的静态属性赋值int[] arr = {}; arr.length;访问引用类型数据数组的,length属性
new Student().name = "渣渣文";
//将赋值的静态属性取出来用
System.out.println( new Student().name );
}
- 定义一个变量存储数组的对象的地址,然后使用变量等同于使用对象
- 使用int 类型变量 可以接收Student对象吗?
- 使用String类型变量 来接收Student对象可以嘛?
-
-
- 类引用数据类型,想到数组引用存储空间地址根据错误提示,需要Student类型变量 来接收
-
//数组,引用数据类型,通过变量持有地址值,对该引用类型的数组进行引用...
Student stu = new Student();
System.out.println(stu);
注意:
Student是类型吗?
以前学习的类型 :基本类型/引用类型,其中引用类型里面包含类,接口 数组,所有说 类是一种类型,这里的Student也一种类型,它是引用类型;
- 如何给 学生对象 赋值 和取值?
stu.name = "小弟弟";
System.out.println(stu.name);
Student stu2 = new Student();
stu2.name = "小妹妹";
System.out.println(stu2.name);
/*
①没有static修饰:对象名.方法名+参数列表
②有static修饰:类名.方法名+参数列表
③在同一个类中:方法名+参数列表
*/
stu2.eat();
- 堆栈内存图分析代码(重点):
- 引用类型数据:堆栈内存图分析
下面使用堆栈内存图来解释一下上面代码的执行流程和属性值存储。从下图中可以看到:
- 每创建一个对象都会在堆内存中开辟一块空间,并且这块空间中具有和类(模板)中一样的字段。
类相当于模板在堆中复制了一份,堆中的对象与类长的一模一样
- 每一个对象都被栈中的一个变量所指向,所以操作栈中的变量(s)就如同操作堆中的对象。
- s.name = "小明";其实是把字符串值赋值给s变量指向的堆中的name字段上的,而不是设置给类的,所以我们在分析代码的时候,看到new Student()对象应该立马想到在堆中有一个对象。
- 总结:
构造方法(Constructor)
- 构造方法引入
new Student(); 创建一个学生类的对象 [ 暂时记忆成 new 类名() ]
注:上面代码本质是new 就是在调用Student中的无参数的构造方法!
- 什么是构造方法
- 什么是构造方法?
- 构造方法的结构和普通方法类似,但是和普通方法完全不同两个代码块;
- 构造方法也是方法,意味着使用了构造方法,方法会执行,也能完成功能
- 构造方法就是一个代码块【就是一个结构 ,构造方法和 字段方法一样都是一个类中的成员之一】
- 构造方法也该存在于类的结构体中
- 构造方法写法:
- 构造方法的名字和类名一致【包括大小写完全一致】
- 没有返回值类型
- 构造方法内部不需要返回任何的数据
- 其他的和普通方法类型 ,可以有修饰(public),可以有形参列表,可以有方法体
注意:
new Student() 这个整体既是一个Student对象,又是调用的Student的无参数构造方法
- 构造方法特点
- 类中构造方法特点:
- 每一个类中都至少有一个构造方法;
- 如果没有看到(显示的),那么存在一个隐式的无参数的构造方法;
- 如果一个类中有显示的构造方法,那么隐式的就不存在了;
- 验证new Student()就是在调用构造方法?
- 把隐式的构造方法显示写出来
- 在这个构造方法里面随便写点打印代码
- 执行new Student(),。。。。
-
- 构造方法的作用
- 通过调用构造方法可以创建对象
- 在创建对象的同时给对象的字段赋值【通过构造方法来完成】
- 构造方法的作用
-
- 构造方法注意事项
- 明确:
- 构造方法(Constructor)和普通方法(Method)是不一样的代码块,只是结构有些类似而已;
- 构造方法也是方法,方法执行,可以写功能代码,执行构造方法能完成一定的功能
- 明确:
- 构造方法注意事项