//下面采用数组的形参来定义方法
public static void test(int a,String[] books);
//以可变个数形参来定义方法
public static void test(int a,String...books);
说明:可变参数,方法参数部分指定类型的参数个数是可变多个声明方式,方法名(参数的类型名...参数名);
可变参数方法的使用与方法参数部分使用数组是一致的方法的参数部分有可变形参,需要放在形参声明的最后。
可变个数的形参的方法
1、格式:对于方法的形参:(数据类型...形参名)
2、可变个数的形参的方法与同名的方法之间构成重载
3、可变个数的形参在调用时,个数从0开始,到无穷多个都可以(也就是在方法中塞入多少个形参都没有问题)
4、使用可变多个形参的方法与方法的形参使用数组是一致的(准确的说是一模一样,如果有两个同时存在甚至会报错)
5、如果方法中存在可变个数的形参,一定要放在最后(是形参放在最后,不是方法放在最后)
PS:原因,在方法调用时候,可变个数形参的参数数量不确定,所以要在其他参数一一对应完毕之后,剩下的都是可变个数形参的
6、在一个方法中,最多声明一个可变个数的形参(是一个方法中只可以声明一个可变个数形参,不是一个类中只能有一个可变形参方法)
在类中一旦定义了重载的可变个数形参方法后,重载之前的方法,属性相同的情况下都可以省略 也就是最上面的两个方法都可以省略。
可变个数形参方法(形参写法:String ...p),其实就是调用方法时可写入多个属性相同的实参,不受个数限制。
其作用和在参数中写入数组(String []p)一样。
class testKB {
方法: public void SayHell(String ...p) {
for(int i=0;i<p.length;i++) {
System.out.print(p[i]+",");
}
}
//附带数组写法:
// public void SayHell(String []p) { //因为作用相同,所以可变个数形参和数组形参 这两种方法不可同时使用
// for(int i=0;i<p.length;i++) {
// System.out.println(p[i]);
// }
// }
}
public class of{
public static void main(String[]ages) {
调用:tk.SayHell("sss","sssss","ssssss"); //结果sss,sssss,ssssss,
}
}
附加:在同一个类中,main方法主程序如果需要调用本类中的其他方法,静态方法(方法中带有static的),可以直接使用
非静态方法,需要先将本类 new 出对象,然后进行调用
class TestArgsTransfer {
public static void main(String[] args) {
System.out.println("ss");
s("hello");
}
public static void s(String args) {
System.out.println(args);
}
}
在一个页面中写有多个类,其中一个非公开类(public)有main方法,不可调用public类,同时也不可能调用,会直接报错。
堆空间和栈空间 图例,请使用电脑查看下图
eg:TestArgsTransfer 类为例子
TestArgsTransfer t = new TestArgsTransfer();
// TestArgsTransfer new 了一个对象叫t,并且赋予了他一个空间new TestArgsTransfer(),一切初始化。
做个了解就好,没懂就不用纠结。
栈的特点:先进后出,后进先出。
PS(理解的可能不透彻)栈空间放的都是实体对象,首先t,是new出来的一个空间,在操作过程中是最先开始的,
因为只有先new出对象,才可以进行引用。
方法中的属性,int i , int j,在有对象之后 才写进来, 最后作为传递值的一个介质int temp,最后写出来。
但是在结束的时候temp 被最先弹出。
pS:我自己都不知道啥意思。上面的话,题目是,int i 是5 j是 10;将i和j的值对调。
不理解部分:temp最先弹出 不懂啥意思。temp只是在后续程序中没有继续被使用,但是temp的值仍然存在。
可能讲的通的原因:将交换写成一个方法。进行调用,那么一切都能讲的同。先要new出的T到最后依然存在,
i和j在方法完成后,仍然有值,在main方法内,temp是方法中才有的变量,所以是最先消失的,因为在主程序main中没有temp
但是视频中一开始将弹出的时候,不是调用方法的时候。