Java基础02

方法(函数)

  1. 何谓方法
    1. Java方法是语句的集合,他们在一起执行一个功能
      1. 方法是解决一类问题的步骤的有序组合
      2. 方法包含于类或者对象中
      3. 方法再程序中被创建,在其他地方被引用
    2. 方法的设计原则:方法的本意是功能块,就是实现某个功能的语句块的集合,设计方法时,最好保持方法的原子性(一个方法只完成一个功能,便于后期的功能扩展)
    3. 方法命名规则:驼峰命名规则
    4. 方法的定义:
      1. image
      2. 修饰符:修饰符,可选参数,告诉编译器如何调用该方法,定义了该方法的访问类型。
      3. 返回值类型:方法可能返回值,returnValueType是方法返回值的数据类型,有些方法执行所需的操作,但没有返回值,这里的返回值类型为void
      4. 方法名:方法的实际名称。方法名和参数表共同构成方法签名
      5. 参数类型:参数类似于一个占位符。调用方法时传递值给参数。传递的值被称为实参或者变量。参数列表是指方法的参数类型,顺序和参数的个数,参数是可选的,方法可不包含参数。
        1. 形式参数:方法中用于接收外部数据。
        2. 实际参数:调用方法时传递给方法的数据。
      6. 方法体:方法体包含具体的语句,该方法功能的体现。
  2. 方法的定义及调用
    1. 值传递与引用传递:(Java是值传递)
      1. 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
      2. 引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
  3. 方法重载
    1. 方法重载规则:
      1. 方法名必须相同
      2. 参数列表必须不同(参数个数不同,或者参数类型不同,或者参数排列顺序不同等)
      3. 方法的返回类型可以相同也可以不相同
      4. 仅仅方法返回类型不同不足以构成方法的重载
    2. 实现理论:方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
  4. 命令行传参
    1. 先编译一下:javac Demo03.java
    2. 如果有包机制的话,需要全包名运行:java com.gaopeng.study.Demo03 hhhhhhhhhhhhh
    3. 后面的hhhhh是传递给main方法的参数
  5. 可变参数
    1. 其本质是数组
    2. JDK1.5开始,Java支持传递同类型的可变参数给一个方法
    3. 在方法的声明中,在指定参数类型后加三个省略号(...)
    4. 一个方法只能指定一个可变参数,且必须是方法的最后一个参数,任何普通的参数都必须在其之前声明
    public class Demo04 {
    	public static void main(String[] args) {
    		Demo04 demo04 = new Demo04();
    		demo04.test(1,2,3);
    		//传递的参数必须是指定的参数类型
    	}
    
    	public void test(int... a){
    		System.out.println(a[0]);
    		System.out.println(a[1]);
    		System.out.println(a[2]);
    	}
    }
    
  6. 递归
    1. 自己调用自己
    2. 利用递归可以用简单的程序解决一些复杂的问题,通常将一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。(大量数据的计算时,不建议使用递归,反而降低程序效率)
    3. 递归程序的结构:
      1. 递归头:什么条件下不调用自身方法,如果没有这一步,程序将陷入死循环(内存溢出)
      2. 递归体:什么条件下需要调用自身方法
    4. 例子:用递归实现阶乘
    public class Demo05 {
    	public static void main(String[] args) {
    		System.out.println(test(4));
    	}
    
    	public static int test(int i){
    		if (i==1){
    			return 1;
    		}else{
    			return i*test(i-1);
    		}
    	}
    }
    
posted @ 2021-09-11 23:21  争取做百分之一  阅读(31)  评论(0)    收藏  举报