最新Java基础系列课程--Day06-类和对象(一)https://developer.aliyun.com/article/1423497
4.2 对象的创建
可以将对象理解为一种新型的变量。 对象之间靠互相传递消息而相互作用,消息传递的结果是启动方法,完成一些行为或者修改接受消息的对象的属性。 对象完成工作后,将被销毁,所占用的资源将被系统回收。 一个对象的生命周期:创建 -> 使用 -> 销毁
创建对象的步骤
1、声明指向“由类所创建的对象”的变量;
2、利用new创建新的对象,并指派给前面所声明 的变量。
举例:创建圆柱体类Cylinder的对象,可用下列的语法来创建:
Cylinder volu; //声明指向对象的变量volu volu = new Cylinder(); //利用new创建新的对象,并让变volu指向它
通过对象来引用对象成员的格式如下:
对象名.对象成员 如, volu.radius = 2.8; volu.height = 5;
如果引用的是成员方法,只要在成员方法名的圆括号内提供所需参数即可,如果方法不需要参数,则用空括号。
如:volu.area()
*一个类多个对象,它们的成员变量分配在不同的内存,因此修改某一对象的成员变量时其他不受影响。
4.3 方法参数的传递
类的方法既可以有返回值也可以带参数。
1、以变量为参数调用方法
调用方法并传递参数时,参数其实就是方法的自变量,所以参数要放在方法的括号内来进行传递。括号内的参数可以是数值型、字符串型,甚至是对象。方法的参数属于局部变量。
若在通过方法调用,将外部传入的参数赋值给类的成员变量,方法的形式参数与类的成员变量同名时,则需用this来标识成员变量。
Class Cylinder { double radius; void SetCylinder(double radius) { this.radius = radius; } }
2、以数组作为参数或返回值的方法调用
传递数组:指明参数是一个数组,实参只给出数组名。
返回值为数组类型的方法。若返回一个一维整型数组,则方法前加int[]。
当参数是基本数据类型时,采用传值方式调用;当参数是引用型的变量时,则是传址方式调用。
Class Cylinder { int[] scores; void setScores(int[] scores) { this.scores = scores; } }
3.可变参数
方法中接收不固定个数的参数称为可变参数,方法接收可变参数的语法格式如下:
返回值类型 方法名(固定参数列表,数据类型…可变参数名) // ... 为可变参数 { 方法体 }
4.4 注意的地方
我把这些注意事项已经列举在下面了,我们把几个不好理解的解释一下就可以了(标记方框),其他的大大家一看就能理解。
第一条:一个代码文件中,可以写多个class类,但是只能有一个是public修饰,且public修饰的类必须和文件名相同。
假设文件名为Demo1.java
,这个文件中假设有两个类Demo1类和Student类
,代码如下
//public修饰的类Demo1,和文件名Demo1相同 public class Demo1{ } class Student{ }
**第二条:**对象与对象之间的数据不会相互影响,但是多个变量指向同一个对象会相互影响。
如下图所示,s1和s2两个变量分别记录的是两个对象的地址值,各自修改各自属性值,是互不影响的。
如下图所示,s1和s2两个变量记录的是同一个对象的地址值,s1修改对象的属性值,再用s2访问这个属性,会发现已经被修改了。
五、this关键字
各位同学,接下来我们学习几个面向对象的小知识点,这里我们先认识一下this关键字是什么含义,再说一下this的应用场景。
this是什么呢?
this就是一个变量,用在方法中,可以拿到当前类的对象。
我们看下图所示代码,通过代码来体会这句话到底是什么意思。哪一个对象调用方法方法中的this就是哪一个对象
上面代码运行结果如下
this有什么用呢?
通过this在方法中可以访问本类对象的成员变量。我们看下图代码,分析打印结果是多少
分析上面的代码s3.score=325
,调用方法printPass方法时,方法中的this.score
也是325; 而方法中的参数score接收的是250。执行结果是
关于this关键字我们就学习到这里,重点记住这句话:哪一个对象调用方法方法中的this就是哪一个对象
六、构造器
好同学们,接下来我们学习一个非常实用的语法知识——叫做构造器。
关于构造器,我们掌握下面几个问题就可以了:
- 什么是构造器?
- 掌握构造器的特点?
- 构造器的应用场景?
- 构造器有哪些注意事项?
我们一个问题一个问题的来学习,先来学习什么是构造器?
- 什么是构造器?
构造器其实是一种特殊的方法,但是这个方法没有返回值类型,方法名必须和类名相同。
如下图所示:下面有一个Student类,构造器名称也必须叫Student;也有空参数构造器,也可以有有参数构造器。
认识了构造器之后,接着我们看一下构造器有什么特点。
- 构造器的特点?
在创建对象时,会调用构造器。
也就是说new Student()
就是在执行构造器,当构造器执行完了,也就意味着对象创建成功。
当执行new Student("播仔",99)
创建对象时,就是在执行有参数构造器,当有参数构造器执行完,就意味着对象创建完毕了。
关于构造器的特点,我们记住一句话:new 对象就是在执行构造方法
- 构造器的应用场景?
其实构造器就是用来创建对象的。可以在创建对象时给对象的属性做一些初始化操作。如下图所示:
- 构造器的注意事项?
学习完构造器的应用场景之后,接下来我们再看一下构造器有哪些注意事项。
1.在设计一个类时,如果不写构造器,Java会自动生成一个无参数构造器。 2.一定定义了有参数构造器,Java就不再提供空参数构造器,此时建议自己加一个无参数构造器。
关于构造器的这几个问题我们再总结一下。掌握这几个问题,构造方法就算完全明白了。
1.什么是构造器? 答:构造器其实是一种特殊的方法,但是这个方法没有返回值类型,方法名必须和类名相 同。 2.构造器什么时候执行? 答:new 对象就是在执行构造方法; 3.构造方法的应用场景是什么? 答:在创建对象时,可以用构造方法给成员变量赋值 4.构造方法有哪些注意事项? 1)在设计一个类时,如果不写构造器,Java会自动生成一个无参数构造器。 2)一定定义了有参数构造器,Java就不再提供空参数构造器,此时建议自己加一个无参数构 造器。
七、封装性
面向对象的基本特征
封装性:利用抽象数据类型将数据和基于数据的操作封装在一起,保护数据并隐蔽具体的细节,只保留有限的接口与外界联系。 继承性:使特殊类(子类)的对象拥有一般类 (父类)的全部属性与方法,同时可以增添自身的属性和方法。 多态性:一个程序中同名的多个不同方法共存的情况。常用重载和覆盖。
各位同学,接下来我们再学习一个面向对象很重要的特征叫做——封装性。
1. 什么是封装呢?
所谓封装,就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理数据的方法,都设计到一个对象中去。
比如:在设计学生类时,把学生对象的姓名、语文成绩、数学成绩三个属性,以及求学生总分、平均分的方法,都封装到学生对象中来。
现在我们已经知道什么是封装了。那我们学习封装,学习个啥呢? 其实在实际开发中,在用类设计对事处理的数据,以及对数据处理的方法时,是有一些设计规范的。
封装的设计规范用8个字总结,就是:合理隐藏、合理暴露
比如,设计一辆汽车时,汽车的发动机、变速箱等一些零件并不需要让每一个开车的知道,所以就把它们隐藏到了汽车的内部。
把发动机、变速箱等这些零件隐藏起来,这样做其实更加安全,因为并不是所有人都很懂发动机、变速箱,如果暴露在外面很可能会被不懂的人弄坏。
在设计汽车时,除了隐藏部分零件,但是还是得合理的暴露一些东西出来,让司机能够操纵汽车,让汽车跑起来。比如:点火按钮啊、方向盘啊、刹车啊、油门啊、档把啊… 这些就是故意暴露出来让司机操纵汽车的。
好了,到现在我们已经理解什么是封装的一些规范了。就是:合理暴露、合理隐藏
2. 封装在代码中的体现
知道什么是封装之后,那封装在代码中如何体现呢?一般我们在设计一个类时,会将成员变量隐藏,然后把操作成员变量的方法对外暴露。
这里需要用到一个修饰符,叫private,被private修饰的变量或者方法,只能在本类中被访问。
如下图所示,private double score;
就相当于把score变量封装在了Student对象的内部,且不对外暴露,你想要在其他类中访问score这个变量就,就不能直接访问了;
如果你想给Student对象的score属性赋值,得调用对外暴露的方法setScore(int score)
,在这个方法中可以对调用者传递过来的数据进行一些控制,更加安全。
当你想获取socre变量的值时,就得调用对外暴露的另一个方法 getScore()
关于封装我们就学习到这里了。
八、实体JavaBean
接下来,我们学习一个面向对象编程中,经常写的一种类——叫实体JavaBean类。我们先来看什么是实体类?
1. 什么是实体类?
实体类就是一种特殊的类,它需要满足下面的要求:
接下来我们按照要求,写一个Student实体类;
写完实体类之后,我们看一看它有什么特点? 其实我们会发现实体类中除了有给对象存、取值的方法就没有提供其他方法了。所以实体类仅仅只是用来封装数据用的。
知道实体类有什么特点之后,接着我们看一下它有哪些应用场景?
2. 实体类的应用场景
在实际开发中,实体类仅仅只用来封装数据,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。如下图所示
在实际应用中,会将类作为一种数据类型使用。如下图所示,在StudentOperator类中,定义一个Student类型的成员变量student,然后使用构造器给student成员变量赋值。
然后在Student的printPass()方法中,使用student调用Student对象的方法,对Student对象的数据进行处理。
到这里,我们已经学习了JavaBean实体类的是什么,以及它的应用场景,我们总结一下
1.JavaBean实体类是什么?有啥特点 JavaBean实体类,是一种特殊的;它需要私有化成员变量,有空参数构造方法、同时提供 getXxx和setXxx方法; JavaBean实体类仅仅只用来封装数据,只提供对数据进行存和取的方法 2.JavaBean的应用场景? JavaBean实体类,只负责封装数据,而把数据处理的操作放在其他类中,以实现数据和数 据处理相分离。
最新Java基础系列课程--Day06-类和对象(三)https://developer.aliyun.com/article/1423499