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);
        }
    }
}

 

 

posted on 2012-10-05 19:30  kiny  阅读(211)  评论(0编辑  收藏  举报