java-方法

方法参数

参见如下代码:

    package com.ctw.javacore;
    import javax.xml.transform.Templates;
    public class ParameterTest {
    public static void main(String[] args)
    {
    /*
     * 方法不能改变数值参数
     * */
    System.out.println("Testing triplevalue");
    double percent = 10;
    System.out.println("Before:percent= "+percent);
    triplevalue(percent);
    System.out.println("After:percent = "+percent);
    /*
     * methods can change the state of object parameters
     * 方法能够改变对象参数的状态
     * */
    System.out.println("\nTesting triplesalary");
    Employerr harry = new Employerr("Harry", 50000);
    System.out.println("Before: salary= "+harry.getSal());
    tripleSal(harry);
    System.out.println("After: salary= "+harry.getSal());
    /*
     * methods can't attach new objects to object parameters
     * 方法不能让对象参数引用一个新的对象
     * */
    System.out.println("\nTesting swap");
    Employerr a = new Employerr("ctw", 5000);
    Employerr b = new Employerr("ctwgogo", 5333);
    System.out.println("Before:a "+a.getName());
    System.out.println("Before:b "+b.getName());
    swap(a, b);
    System.out.println("After: a "+a.getName());
    System.out.println("After: b"+b.getName());
}
public static void triplevalue(double x)
{
    x = 3 * x;
    System.out.println("End of method: x= "+x);
}
public static void tripleSal(Employerr e)
{
    e.raiseSal(200);
    System.out.println("End of method: salary= "+e.getSal());
}
public static void swap(Employerr x,Employerr y)
{
    Employerr teEmployerr = x;
    x = y;
    y = teEmployerr;
    System.out.println("End of method: x =   "+ x.getName());
    System.out.println("End of method: y =   "+y.getName());
}
}
class Employerr
{
private String name;
private double salary;
public Employerr(String nString ,double s)
{
    this.name    = nString;
    this.salary  = s;
}
public String getName()
{
    return name;
}
public double getSal()
{

    return salary;
}
public void raiseSal(double bypercent)
{
    double raise = salary * bypercent/100;
    salary +=raise;
}
}
  1. 一个方法不能修改一个基本数据类型的参数(数值类型和布尔类型).
    参见上述代码中方法1,首先x被初始化为percent值的一个拷贝.然后对x进行操作后,x的值发生了变化,方法结束后,x不再使用,但是此时percent的值并没有发生变化.因而不能达到改变值的目的.
  2. 一个方法可以修改一个对象参数的状态.
    参考代码方法二,首先x被初始化为harry的一个拷贝,x和harry同时引用Employee对象.然后调用方法,值发生了变化,因为x和harry同时引用的对象的拷贝,因而通过x使得sal值发生了变化,此时harry所指向了改变后的值,方法结束后,x不再使用,但是harry却指向了发生变化后的值,因而使得sal被改变了.
  3. 一个方法不能让对象参数引用一个新的对象.
    参考代码方法三,此时并不能通过swap方法改变两者,因为java始终是按值传递的,引用也是通过按值传递的.类似的,在方法中,x和y改变了两者的引用指向,但是当方法结束后,x和y不再使用,但是原先a和b的引用指向并没有发生变化.因而达不到预期结果.

你可能感兴趣的:(java-方法)