【Java补充】Java方法参数

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");

        //Test1
        System.out.println("Test1");
        double percent = 10;
        System.out.println("befor percent=" + percent);
        tripleValue(percent);
        System.out.println("After percent" + percent);

        //Text2
        System.out.println("Text2");
        Employee harry = new Employee("Harry", 500);
        System.out.println("befor salary" + harry.getSalary());
        tripleSalary1(harry);
        System.out.println("After salary" + harry.getSalary());

        System.out.println("Text3");
        Employee harry2 = new Employee("Harry", 500);
        System.out.println("befor salary" + harry2.getSalary());
        tripleSalary2(harry2);
        System.out.println("After salary" + harry2.getSalary());

        //Text4
        System.out.println("Test4");
        System.out.println("\nTest4:");
        Employee a = new Employee("Alice", 70000);
        Employee b = new Employee("Bob", 60000);
        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=x*3;
        System.out.println("End of method x=" + x);
    }

    public static void tripleSalary1(Employee x) {
        x.raiseSalary(200);
        System.out.println("End of method: salary=" + x.getSalary());

    }
    public static void tripleSalary2(Employee x) {
        double a=x.getSalary();
        a=a*3;
        x.setSalary(a);
        System.out.println("End of method: salary=" + x.getSalary());

    }

    public static void swap(Employee x, Employee y) {
        Employee temp=x;
        x=y;
        y=temp;
        System.out.println("End of method: x=" + x.getName());
        System.out.println("End of method: y=" + y.getName());

    }
}
class  Employee{
    private  String name;
    private  double salary;

    public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public void raiseSalary(double byPercent) {
        double raise=salary*byPercent/100;
        salary=raise;
    }
}

运行结果

Hello World!
Test1
befor percent=10.0
End of method x=30.0
After percent10.0
Text2
befor salary500.0
End of method: salary=1000.0
After salary1000.0
Text3
befor salary500.0
End of method: salary=1500.0
After salary1500.0
Test4

Test4:
Before: a=Alice
Before: b=Bob
End of method: x=Bob
End of method: y=Alice
After: a=Alice
After: b=Bob

在这个程序中, 首先试图将一个值参数的值
提高两倍,但没有成功:

Testing tripleValue:
Before: percent=10.0
End of method: x:30.0
After: percent=10.0

随后, 成功地将一个雇员的薪金提高了两倍:

Testing tripleSalary:
Before: salary=50000.0
End of method: salary=150000.0
After: salary=150000.0

方法结束之后, harry 引用的对象状态发生了改变。这是因为这个方法可以通过对象引用
的拷贝修改所引用的对象状态。
最后,程序演示了 swap 方法的失败效果:

Testing swap:
Before: a=Alice
Before: b=Bob
End of method: x=Bob
End of method: y=Alice
After: a=Alice
After: b=Bob

可以看出, 参数变量 X 和 y 交换了, 但是变量 a 和 b 没有受到影响。


图示.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 方法调用(call by)是一个标准的计算机科学术语。方法调用根据参数传递的情况又分为值调用(call by re...
    一W句代码阅读 838评论 0 2
  • 重构--Java方法参数过多 示例方法 示例构造函数 问题:添加大量参数理解难度易参数位置不正确且运行正常不易维护...
    WilsonMing阅读 9,758评论 1 8
  • 一、初始方法 二、第一轮重构:参数化 字符串参数化键值对参数化断言功能分离,该方法只负责http请求 三、第二轮重...
    果芽软件阅读 1,311评论 1 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 这个世界上到处都有怀才不遇的人,也充满了才华横溢的穷光蛋。基本上,这两种人是同一类人。他们高喊着“天生我才必有用”...
    一声笑阅读 333评论 0 0