Java方法详解

Java方法详解

  保持方法的原子性,一个方法只完成一个功能,利于后期扩展

值传递,引用传递

  • 值传递 将实际参数赋值一份到被传递的调用函数中,在被调函数中修改参数值不会影响原实参值
  • 引用传递 实际参数的地址和形参绑定起来传递到函数中,在被调用的函数中修改参数值会影响实际参数值
  • java中只有值传递,没有引用传递,传递普通基本类型参数,一定会复制实参值传递给形参
    当参数类型是对象时,也是对象在内存中的地址复制给形参,相当于指针,但是在参数内可以修改指针的指向地址,此时再修改属性值,不会改变原来的对象值。
    public static void main(String[] args) {
	//new Person是对象,只是把地址引用赋值给了a
        Person a = new Person(zhangsan,1991);
        System.out.println(a.getBirthday());
	change(a);
	//输出1993但是已经指向另一个地址了,修改的不是原来的person
	System.out.println(a.getBirthday());
    }

    private static void change(Person p) {
	p = new Person(lisi,1992)
	p.setBirthday(1993)
    }

方法的重载

方法名相同但是参数列表不同(参数个数,类型,顺序有区别),注意返回值不同不是重载

命令行传参

有时候希望运行一个程序时候传递给它消息,通过命令行参数给main()函数实现
public staic void main(String[] args)
注意运行.class文件时 java 包名.类名 参数 要把包名写全了

可变参数(不定项参数)

语法:在方法声明中,在指定参数类型后加要给省略号(...),参数本质上就是数组。
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明

	public static void printMax(double...numbers){
		//要判断参数非空
		if(numbers.length ==0){
			System.out.println("No argument passed");
			return;
		}
		double result = numbers[0];

		for(int i = 1; i < numbers.length; i++){
			if(numbers[i] > result) {
				result = numbers[i];
			}	
		}
		System.out.print("The max value is " + result);
	}

递归

方法调用自己.把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,减少代码量。
递归结构包含两个部分:
递归头:定义递归尽头,什么时候不调用自身方法,没有头将会陷入死循环(使用递归,先写好递归头)
递归体:什么时候调用自身方法
例计算阶乘

	public static int f (int n){
		if(n=1){
			return 1;
		}else{
			return n * f(n-1);
		}
	}

注意递归方便程序员理解,但是耗电脑性能,每次递归都会把方法压入栈中,直到满足递归头才弹出栈。
对于嵌套层次比较深的算法,空间不足物理上就会造成内存崩溃.
能不用递归就不要用递归,递归次数只能小计算

写个具有加减乘除功能的计算器,循环接受新的数据,有用户交互

思路:
1. 写加减乘除4个方法
2. 利用循环+switch 进行用户交互
3. 传递连个操作数
4. 输出结果
posted @ 2021-01-14 21:46  晒网达人  阅读(66)  评论(0)    收藏  举报