java 可变长数组_Java之可变长参数、main方法参数、形参与实参、普通代码块

可变长参数

之前在Java中,我们定义一个方法的参数的个数都是定义死的,但有时候我们希望它能够接收多个参数,这时候就需要用到我们的可变长参数了,那么它怎么用呢?我们来看看下面的例子:

ede6e34a6e8ddfc694f4188ab0bde37d.png

从上面其实我们就可以知道一个可变长参数的格式是在原来的基础上在数据类型后面加...

b0b41ab36e39a6824e34068d6a98132a.png

efa9206447bc58bf9dac90134bea2aa9.png

b7a33539065192b99325e476b9eb18f5.png

从上述的声明方式我们可以知道一个方法的可变长参数只能有一个并且在最后一个。那么会定义了该怎么使用呢?我们可以把这个可变长参数看成是一个数组,于是:

7ab3dc07a22429d48728d8b08f84b1ac.png

于是乎我们就可以遍历数组来读取这个可变长参数了。因为可以看成是一个数组,所以我们也可以采取直接传入一个数组的方式来赋值:

7aa5fe08a8e00912cf284a5f7e2aac6f.png

一旦传入一个数组,就不能再传进其他数据了

bb3a03b82e3a4404774dd4aa2dd7a084.png

main方法的参数

对于main方法中的参数,在Java基础之分析HelloWorld程序所用到的知识中我们讲过了怎么去配置传入字符串了,我们现在以idea为例简单看看:

3403b5775788112b2b210c753d4f8f68.gif

 对于main方法这个参数,看起来是不是和上面的可变长参数很像呢?我们把main方法中的[]改为...:

 04b40a5a6b0e58597fa604ed84fea5d6.png

发现其实是没有报错的,那么同样再传入hello和world两个字符串程序能不能正常运行呢:

8717a614cd1721a1280cabe9ae25d081.gif

可以发现程序能够正常执行。所以main方法的参数其实也是一个可变长参数。

形参与实参

之前在变量那里提到了方法的形参是用来代替实参进行操作的,那么,在这里,就产生了一个疑问了,有的读者可能会发现,有时候形参里的值改变了,有些实参的值没有改变有些有改变。这时候我们就需要分情况考虑了:

基本数据类型

先看一个例子:

06172a2493830ec823c9d59b18f1cf18.png

读者们觉得会输出10还是20呢?

76f90c18286cfde92a67ae1be8cbd17b.png

答案是10,为什么会这样呢?我们从内存图来看:

c140c5e7d090708afa81d30f3be03566.gif

从内存图我们就可以知道,changeI方法改变的是形参i的值,并没有改变实参i的值。再看一个类似例子:

545ab997fa40026bc8bb8a0e88c589dc.png

你们觉得会输出100还是101呢?答案是100.

引用数据类型

92ae94d6f4f34ae3cca0efc22a3f5c82.png

以上程序会输出名字为Tom,年龄为3的信息还是名字为Cat,年龄为5的信息呢?想想内存图结构吧:

33f91b4826c84bac734b3b3e9f45ebd0.gif

772b6416a350a1fdd8e69954dce9c3c4.png

但有一种引用数据类型是特例:

特例:String类型

49d1e71e7cf819c67e04dcfcbf300e19.png

这个输出的是向软件工程师进发的小白,而不是向软件工程师进发的小黑。

c459b7963e3252f43b36745228d7e54e.gif

虽然上述的结果不一,但本质上还是离不开形参是代替实参进行操作的关系。而实参的数值会不会根据形参的数值变化是由实参在内存图的位置决定的。

普通代码块

之前我们讲了静态代码块,对象代码块(构造代码块),其实还有一种代码块——普通代码块,这种代码块出现在方法体中,如:

b41ab7227281122a1c26a2e464adcd29.png

里面的局部变量只在块中有用,所以出了{}后再定义一个s变量是不会报错的。由于这个结构很少用就不举例了,知道就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值