方法详解:
·Java中的“方法”类似其他编程语言中的“函数”。Java中方法不能独立存在,必须定义在类中。逻辑上要么属于“类”要么属于“对象”。如果方法使用了“static”修饰那么这个方法就属于类,否则就属于这个类的对象。
·执行方法:
方法不能独立执行,必须使用“类”或“对象”去调用它,它才能执行。使用static修饰的类方法既可以使用类来调用也可以使用对象来调用,不带static的普通方法只能使用对象来调用。
语法:类.方法 对象.方法
·同一个类中的方法可以调用这个类中的其他方法。调用普通方法使用this,调用static修饰的方法使用类,this和类也可以不写,默认会自动使用。
l 方法参数传递
·形式参数:方法用于接收的参数叫形式参数。
·实际参数:调用方法时给方法传递的参数叫实际参数。
Java中方法参数传递就是传值,值是实际参数的副本。也就是说实际参数复制了一份,将复制的副本传递给形式参数的。
方法参数传递可以传变量,也可以传送对象引用。
不同的方法有不同的栈区,不同的栈区都可以存放自己独立的变量,A栈区与B栈区中的变量是各自独立的,所以即使他们都有相同名字的变量也不会有影响。
//演示了方法值传递,变量传递
public class ThisTest
{
publicstatic void swap(int a, int b)
{
inttmp = a;
a= b;
b= tmp;
System.out.println("swap:" + a + " " + b );
}
publicstatic void main(String[] args)
{
inta = 6;
intb = 9;
ThisTest.swap(a,b); //演示了方法值传递,这里传递的是变量。
System.out.println("main" + a + " " + b);
}
}
//引用变量传递:
class DataT
{
publicint a;
publicint b;
}
public class ThisTest
{
publicstatic void swap(DataT dw) //传递过来的是一个地址,指向那个对象。这里的dw引用变量存在swap方法栈内存中。
{
inttmp = dw.a;
dw.a= dw.b;
dw.b= tmp;
System.out.println("swap" + dw.a + " " + dw.b);
}
publicstatic void main(String[] args)
{
DataTdatat = new DataT();
datat.a= 6;
datat.b= 9;
ThisTest.swap(datat); //引用变量传递,传递的是一个地址,所以datat引用变量与dw引用变量指向的是同一个对象。还有引用变量就是一个地址,这个地址指向堆内存的对象,此处的引用变量存在main方法和swap方法的栈区内存中。
System.out.println("main" + datat.a + " " + datat.b);
}
}
l 形参个数可变的方法,有两种
可变形参:指定不确定的参数个数。
1、三个点号:在最后一个形参后加三个点“…”就表示该参数可以接受多个参数值,多个参数值被当成数组传入。三个点实际参数也可以是数组。
2、数组。
三个点与数组可变参数的差别:数组形式的参数可位于方法形式参数列表的任意位置,但是三个点只能位于形式参数列的最后一个,并且一个方法中只能定义一个三个点的可变参数。
public class Var
{
//publicstatic void test(int a, String[] person) 这里是使用数组,下面使用的是三个点。
publicstatic void test(int a, String...person) //这里就是三个点,定义的可变形参,跟数组类似,但有不同之处。
{
for(Stringok : person)
{
System.out.println(ok);
}
System.out.println(a);
}
publicstatic void main(String[] args)
{
// Var.test(520,newString[]{"zhangsan","lisi"}); 形式参数是接受数组,所以这里传值也要传数组。
Var.test(520,"zhangsan","lisi","wangwu");
}
}
l 递归方法,这里我不太懂所以就先略过,有机会在补充上吧
l 方法重载
同一个类中两个或多个方法的方法名字相同,但方法参数不同(参数个数不同或参数类型不同),不受方法返回类型影响(是参数类型并不是方法返回类型)
·在被重载的方法里包含了长度可变的形参,传递实际参数个数与普通方法参数列表个数匹配时,则传递参数给普通方法。如果要传递给可变长度形参要么参数个数不要与普通方法相等,要么使用数组传递值,这样它就是知道是给可变长度形参的那个方法传递的值了。
·在继承中,子类方法与父类方法名字相同,形参列表不同也是方法重载。
例子:
//普通方法重载
public class Var
{
//publicvoid test()
publicvoid test(int i)
{
System.out.println(i);
}
publicvoid test(String msg)
{
System.out.println(msg);
}
publicstatic void main(String[] args)
{
Varvar = new Var();
//var.test(); 记住方法是有括号的,即使不给它传参数。
var.test(555);
var.test("Haha");
}
}
//带有可变参数的方法重载
public class Var
{
publicvoid test(String msg)
{
System.out.println(msg);
}
publicvoid test(String... person)
{
System.out.println("hh");
}
publicstatic void main(String[] args)
{
Varvar = new Var();
var.test();
var.test("zhangsan","lisi");
var.test("MSG");
var.test(newString[]{"person"});
}
}