Java方法

Java方法


  1. 概念:方法是语句的集合,它们一起执行一个功能。
  • 方法是解决一类问题的步骤的有序组合

  • 方法包含于类或对象中

  • 方法在程序中被创建,在其他地方被引用

  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的拓展。


  1. 组成:
修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名){
...
方法体
    
return 返回值;
}
  • 参数类型:形式参数和实参
    • 形式参数:在方法被调用时用于接收外界输入的数据,像一个盒子
    • 实参:调用方法时实际传给方法的数据
  • 方法体:方法体包含具体的语句,定义该方法的功能

方法的重载

  1. 概念:重载就是在类中,有相同的函数名称,但是参数形式不同

  2. 规则:

    • 方法名称必须相同
    • 参数列表必须不同(个数不同、类型不同、参数的排列顺序不同)
    • 返回值可以相同也可以不同
    • 仅仅返回类型不同不足以构成方法的重载
    public class B {
    	
    	//两数相加
    	public static int add(int a,int b) {
    		
    		return a+b;
    	}
    	public static double add(double c,double d) {
    		return c+d;
    		
    	}
    	public static void main(String[] args) {
    		
    		Scanner s=new Scanner(System.in);
            int sun=add(1,3);
    		System.out.println(sun);
    	   s.close();
    	}
    }
    

命令行传参

运行一个程序时候再给它传递参数,这就要靠命令行参数给main函数传参

这里实现不了,classpath和path配置正确但是无法实现,我也是蒙了,可能是我把工作区换了个盘,气死俺

可变参数

  • 不定项参数:在方法声明中,在指定参数类型后面加一个省略号...
  • 一个方法只能有一个不定项参数,它必须是方法的最后一个参数,任何普通参数必须在它声明。
  • 实际就是数组
public class B {
	
	//求最大值
	public static void printmax(double...ds ) {
		if(ds.length==0) {
			System.out.println("无数据输入!");
			return;
		}
		
		double result=ds[0];
		for (int i = 0; i < ds.length; i++) {
			if(ds[i]>result)
			{
				result=ds[i];
			}
		}
		System.out.println("最大值为:"+result);
	}
	
	public static void main(String[] args) {
		
		//调用可变参数
        printmax(1,2.3,45,68);
	  
	}
}

递归!!!


  • 递归就是A方法自己调用自己
  • 递归结构包括两个部分:
    • 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
    • 递归体:什么时候需要调用自身方法
public class B {
	
	//递归
	public int f(int n) {
		if(n==1) {
			return 1;
		}
		else {
			return n*f(n-1);
		}
	}
	
	public static void main(String[] args) {
		
		Scanner s=new Scanner(System.in);
        B b=new B();
        int n=s.nextInt();
        System.out.println(b.f(n));
	   s.close();
	}
}
  • 当输入n=5时,此时根据f(n)这个方法,return的是5xf(4)-->5x4xf(3)-->5x4x3xf(2)-->5x4x3x2xf(1)
  • 当n=1,f(1)=1,所以最后的结果是5x4x3x2x1
  • 不建议数目较大,可能会让电脑卡死。

数组

  1. 数组:数组是相同类型数据的有序集合

    数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成

    其中,每一个数据称作是一个数组元素,每个数组元素可以通过一个下标来访问

  2. 数组的声明和创建:

    int[] nums;//声明一个数组
    
    nums=new int[10];//创建一个数组
    
    int[] nums=new int[10];
    

    数组元素是通过索引访问的,数组索引从零开始。

    获取数组长度:array.length (0--n-1)

    ArrayIndexOutOfBounds--数组下标越界

  3. 内存分析:

    • 堆:存放new 的对象和数组,可以被所有的线程共享,不会存放别的对象引用
    • 栈:存放基本变量类型,包括其具体数值;引用对象的变量,包括其在堆里的具体地址
    • 方法区:可以被所有的线程共享,包含所有的class和static变量
  4. 数组的初始化:

    int[] a={1,2,3};//静态初始化
    
    int[] b=new int[10];
    b[0]=10;           //动态初始化,包含了默认初始化
    

    默认初始化组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照初始实例变量同样的方式被隐式初始化

  5. 数组的四个基本特点:

    • 数组的长度是确定的,数组一旦被创建,大小就不可改变
    • 数组的元素必须是相同类型,不允许出现混合类型
    • 数组中的元素可以使任何数据类型,包括引用型和基本数据类型
    • 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
    • 数组本身就是对象,java中的对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身就是在堆中的
  6. 数组的使用

  • 数组作为参数

  • 数组作为返回值

    package t1_1;
    
    import java.util.Arrays;
    
    public class A02 {
    
    	//反转数组
    	public static int[] reverse(int[] a) {//数组作为返回值
    		int[] re=new int[a.length];
    			for(int i=0,j=a.length-1;i<a.length;i++,j--) {
    				re[i]=a[j];
    			}
    			return re;
    		}
    	
    	//打印数组
    	public static void printA(int[] a) {//把数组作为参数
    		for(int i=0;i<a.length;i++) {
    			System.out.print(a[i]+" ");
    		}
    		System.out.println();
    		
    	}
    
    	public static void main(String[] args) {
    		int[] a= {1,2,3};
    		int[] re=reverse(a);
    		printA(re);
    	}
    }
    
    

多维数组

定义数组的两种方式:

int[][]a= {{1,2},{2,3}};
		int[][]b=new int[2][5];
		System.out.println(a.length);// 2
		System.out.println(b.length);// 2

数组b中指的是两行五列的数组

每个数组的下表都是从0开始编号,a[0]指的是{1,2},

当然a[0] [0]指的是1,在指定输出的时候a[0]输出地址

Arrays类

//Arrays.toString()
public static String toString(int[] a) {
        if (a == null)
            return "null";
        int iMax = a.length - 1;
        if (iMax == -1)
            return "[]";

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0; ; i++) {
            b.append(a[i]);
            if (i == iMax)
                return b.append(']').toString();
            b.append(", ");
        }
    }

这里是将数组中的元素转为String类型,直接输出为一串字符串。

参数类型为:long,int,short,char,byte,boolean,float,double,object类型的数组,不要用多维数组

,源码给的只能转化一维数组,因为一维数组的每个元素是具体的值了,而二位数组的元素还是一个数组,不能再进行转化。

Arrays.sort(a);//升序排序,无返回值
Arrays.fill(a,1,2,3);//数组a的下标1和下标2填充为3
Arrays.fill(a,3);//数组a的元素全部填充为3
posted @ 2021-08-06 09:26  甲乙丙I  阅读(51)  评论(0)    收藏  举报