Java中的方法
Java中方法也分为静态方法和实例方法。
修饰符 返回值类型 方法名(参数列表){
方法体
}
修饰符后面详细学习,返回值类型如果没有返回值为void。
返回值return
参数列表:java中的所有参数传递都是值传递。我们以前学delphi,vb,c的时候都有学形参和实参,传值和传引用。
说实参了形参了传值了传引用了容易让人晕头转向的。就好像学数组的时候我说内存中存储的位置栈和堆一样,看不见摸不着,很抽象的东西。
我用java和c#的语法对照一比一下很容易明白的。
Java中参数的传递
public class TTest { public static void main(String[] args) { int num = 100; changeParam(num); System.out.println(num); } public static void changeParam(int i) { ++i; } }
//打印100
java中都是传值。
C#中利用关键字ref传引用
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int number = 100; ChangeParam(ref number); Console.WriteLine(number); } static void ChangeParam(ref int _number) { ++_number; } } } //打印结果101
传参类型中的传值是把变量拷贝一份传进方法里,传引用指向了变量的实际地址,两个指的同一片内存空间。(传个对象测试一下)
java的传参还可以定义为final,这么做的效果就是在调用方法时避免任何替代参数的参数值被修改。编译器会检查以确保方法体中的代码不会尝试修改参数。
静态方法中不能调用任何的实例变量,这是因为在即使没有创建类的任何对象,也要求静态方法能够正确的执行。在没有创建类的任何对象,调用非静态(实例变量)时会抛出一个异常。
例如:
public class TTest { public static void main(String[] args) { TPerson person = new TPerson(); System.out.println(person.getName()); } } class TPerson{ private double salary; private String name; public static String getName() { return name; } } //抛出异常 //Cannot make a static reference to the non-static field name
方法的重载:重载是指方法名完全一样(区分大小写),不同函数参数不同的返回值不同的顺序。
class TPerson{ private double salary; //第一个 public void setSalary(double salary) { this.salary = salary; } //第二个 public void setSalary(double salary,double tc){ this.salary = salary * tc; } //第三个 public boolean setSalary(double tc,double salary){ this.salary = salary*tc; return; } //第四个 public boolean setSalary(double salary){ this.salary = salary; return true; }
//第五个
public void setSalary(string name){ this.salary = 100.0; }
}
第一个和第四不算重载,第二个和第三个也不算重载。所以在实际的应用当中我们一般的重载是参数完全的不相同(从个数上来讲)。返回值也有不相同的时候。必须保证参数不同,包括参数的类型。
所以上面的代码setSalary共有三个版本。
可变参数数目的方法
Object ...objects
public class TTest { public static void main(String[] args) { printAll(1,true,"hello",200.00,'C'); } public static void printAll(Object ...objects) { for (Object object : objects) { System.out.println(object); } } } //打印结果 1 true hello 200.00 C
由此就可以引出,限制数据类型的可变参数数目,例如:String ...strings
public class TTest { public static void main(String[] args) { printString("hello","world","ni","hao","CHN"); } public static void printAll(Object ...objects) { for (Object object : objects) { System.out.println(object); } } public static void printString(String ...strings){ for (String string : strings) { System.out.println(string); } } }