Skip to content

Commit 442bb1a

Browse files
committed
[docs update]添加可变参数相关的内容
1 parent 0ce7d15 commit 442bb1a

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

docs/java/basis/java基础知识总结.md

+79
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,85 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有
127127
> java 编程思想第四版:2.2.2 节
128128
> ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-15/86735519.jpg)
129129
130+
### 可变长参数
131+
132+
从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。就比如下面的这个 `printVariable` 方法就可以接受 0 个或者多个参数。
133+
134+
```java
135+
public static void method1(String... args) {
136+
//......
137+
}
138+
```
139+
140+
另外,可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数。
141+
142+
```java
143+
public static void method2(String arg1, String... args) {
144+
//......
145+
}
146+
```
147+
148+
**遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?**
149+
150+
答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。
151+
152+
我们通过下面这个例子来证明一下。
153+
154+
```java
155+
/**
156+
* 微信搜 JavaGuide 回复"面试突击"即可免费领取个人原创的 Java 面试手册
157+
*
158+
* @author Guide哥
159+
* @date 2021/12/13 16:52
160+
**/
161+
public class VariableLengthArgument {
162+
163+
public static void printVariable(String... args) {
164+
for (String s : args) {
165+
System.out.println(s);
166+
}
167+
}
168+
169+
public static void printVariable(String arg1, String arg2) {
170+
System.out.println(arg1 + arg2);
171+
}
172+
173+
public static void main(String[] args) {
174+
printVariable("a", "b");
175+
printVariable("a", "b", "c", "d");
176+
}
177+
}
178+
```
179+
180+
输出:
181+
182+
```
183+
ab
184+
a
185+
b
186+
c
187+
d
188+
```
189+
190+
另外,Java 的可变参数编译后实际会被转换成一个数组,我们看编译后生成的 `class`文件就可以看出来了。
191+
192+
```java
193+
public class VariableLengthArgument {
194+
195+
public static void printVariable(String... args) {
196+
String[] var1 = args;
197+
int var2 = args.length;
198+
199+
for(int var3 = 0; var3 < var2; ++var3) {
200+
String s = var1[var3];
201+
System.out.println(s);
202+
}
203+
204+
}
205+
// ......
206+
}
207+
```
208+
130209
### 注释
131210

132211
Java 中的注释有三种:

0 commit comments

Comments
 (0)