- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
- Selenium Web Driver自动化测试(java版)系
之前我们说方法和对象后面都有个“()”,而且方法还可以在括号里加参数。对象看了看自己的括号也眼红了,说你怎么那么好还可以带小弟?不行,我也得在括号里加点东西,带个小弟。在java里可不可以?可以。不过,这就需要借助构造函数的帮助。
构造函数,或者说构造方法,是一类比较特殊的方法,是一种以类名作为方法名称且无返回值的方法。它的格式是:
我们还继续用网红作为例子,如果要为它写一个构造方法,那就是:
我们把括号里填上String name, int age, String hobby。看出点了什么了吗?
不太明白没关系,继续往下看,我们写一个新的例子。新建一个叫Test.java的文件,然后把以下代码复制粘贴。如果不懂这段代码含义的请复习以下类、成员变量和成员方法那两篇文章的内容。
一般大家习惯把构造方法写到变量和方法之间的位置,很多人都这么写。主类Test里有个main函数作为程序入口。看到Wanghong wsc = new Wanghong(“王思聪”,30,”打游戏”)这句话了吗?现在猜到点什么了吧。"王思聪"、30、"打游戏"这三个值是不是感觉作为参数被传递了?是不是直觉它们肯定交给了构造方法了?毕竟看起来这两个对应,很像方法调用嘛。事实也是如此。这个程序运行过程是这样的:当实例化一个对象时,系统自动把跟随的参数传给构造方法,然后直接就会触发构造函数。注意,和上篇的普通方法调用过程不一样,对于普通方法你得用“对象.方法名()”这种方法调用,可构造函数不用,在对象实例化的同时直接调用了。所以执行结果就是:
这时候咪蒙说了,你王思聪带小弟就带吧,别把我算上,我用不着!女性独立自主。我就直接在main()里写Wanghong mm = new Wanghong():
再次执行程序,发现失败了,提示需要参数:
王思聪呵呵一声,说教你不要小弟,出错了吧?本来嘛,构造方法明确提示需要三个参数,我不传参数肯定是不行的。那有人说了,咱们之前写的那些程序并没有用构造函数啊,怎么还能运行通过呢?是这样,构造方法其实一直都是存在的,默认情况下它就是下面这个原始的模样,只不过你看不见罢了,因为默认情况下它不用明确写出来:
以前我们写Wanghong mm = new Wanghong()的时候没指定参数,因为默认的构造方法里也不需要接收任何参数呀,所以也是匹配的,不报错。这种默认的不显示的构造方法,我们又称它为缺省的构造方法。可是,当你自己写了一个构造方法后,不管加不加参数,它都会自动覆盖掉缺省的构造函数,覆盖掉了就没了。所以你要是想让程序识别你这个没有参数的咪蒙对象,就必须在类中明确再写一遍无参构造方法。
三个参数的找三个参数的,没有参数的找没有参数的。你如果再写一个有两个参数的也行。构造方法在一个类中根据参数不同可以有多个,而且互不影响。
对象通过构造方法可以加入参数,现在对象开心了,说我也可以带小弟了。可是天下没有免费的午餐,交易是相互的,对象也得满足构造方法的利益。那构造方法的利益是什么呢?我有个问题,注意看划红线的位置,这两个name指的是同一个东西么?
这两个指的不是一个东西。构造方法里面的name是方法的形参,而外面的name是成员变量。所以这里请注意,如果方法体里面的形参和外面的成员变量名一样时,方法体里率先使用的是形参,而不是成员变量。注意我加了一个词“率先”,一会儿你就明白什么意思了。通过前面的学习我们知道,对象实例化之后我们就开始直接为成员变量赋值,现在参数传到构造方法里,和成员变量在同一个类里了。所以构造方法的利益很好猜,其实就是在构造方法里初始化成员变量并赋值。这也是设计构造方法的初衷:
等号前面的都是成员变量,后面的都是参数,意思是把参数赋给变量。现在明白“率先”的意思了吧?先使用的是参数,然后向左走赋给成员变量。当然,如果没给成员变量赋值那方法体从头到尾用的都是参数。但我们发现这么写很别扭,name = name,咋一看还以为程序写错了呢,说我当然知道name = name,还用你告诉?这么写与java本身的颜值极度不符。所以,为了区分这两者,出现了this关键字,用this来区分。
this在英文里是“这个”的意思。这个什么?这个对象。咱们以往给变量赋值,都是用“对象.成员变量”来赋值的,对于王思聪来说,对象wsc的成员变量就是wsc.name,咪蒙对象mm的成员变量就是mm.name。鉴于这个特点,我们可以通过构造方法给成员变量赋值的过程。当前是哪个对象,this就代表谁。一定要记住,this代表的是一个对象,当前上下文对象是谁,那this就代表谁。比如:
当实例化wsc对象时this指的就是wsc,this.name = name就意味着wsc.name = name。同理,当实例化mm对象时this.name就意味着mm.name = name。这就是通过构造方法给成员变量赋值的过程。
再举一个例子。我们以后在用selenium做自动化测试时,第一步其实就是要设置一系列测试参数,比如我们要测试哪个网站,用什么浏览器来测试该网站,或者是操作之间的等待时间。那我就写个关于设置的类:
到现在我们学了两种为变量赋值的方法。第一种是"对象.成员变量"直接赋值,第二种就是通过构造方法。我们把构造方法也加到类的成员图里:
本篇知识点及注意事项:
1. 构造方法用于初始化成员变量;
2. 构造方法其实一直都是存在的,默认情况下不用明确写出来;
3. 当你自己写了一个构造方法后,不管加不加参数,它都会自动覆盖掉缺省的构造函数,覆盖掉了就没了。之后就要参数一一对应;
4. 构造方法在一个类中根据参数不同可以有多个,而且互不影响;
5. this关键字用来区别不同对象。
这篇文章的源代码在Constructor里。下篇文章介绍静态变量和静态方法。
网友评论