java之方法和数组

方法

1.方法概述

假设有一个游戏程序,程序在运行过程中,要不断的发射炮弹。发射炮弹的动作需要写100行代码,在每次实现发射炮弹的地方我们都需要重复的编写这100行代码,这样程序会变得非常臃肿,可读性也比较差。为了解决代码重复编写的问题,可以把发射炮弹的代码提取出来放在一个{}中,并为这段代码块起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。上述过程中,所提取出来的代码可以被看作是程序中定义一个 方法,程序在需要发射炮弹的地方调用该方法即可。

2.方法的定义及格式

方法的定义:简单的说,方法就是完成特定功能的代码块。在很多语言里面都有函数的定义,而函数在java中被称为方法。

方法的格式:

访问修饰符    返回值类型    方法名(参数类型 参数名1,参数类型 参数名2,...){
    函数体;
    return 返回值;
}

那么如果写一个方法?1.返回值类型 明确功能结果的数据类型 2.参数列表 明确有几个参数,以及参数的类型

public int add(int a,int b){
    return a + b;
}

3.有明确返回值的方法调用

有明确返回值的方法的调用,如果是单独调用,没有意义;如果是输出调用,有意义,但是不够好,因为我不一定将结果输出;如果是赋值调用,推荐方式。

/**
 * 求两个数的和
 */
public class MethodDemo1 {
    public static void main(String[] args){
        //单独调用
        //add(1,2);
        //输出调用
        //System.out.println(add(1,2));
        //赋值调用
        int sum = add(1,2);
        System.out.println("两数之和是"+sum);
    }
    public static int add(int a ,int b){
        return a + b;
    }
}
import java.util.Scanner;

/**
 * 键盘录入两个数据,返回两个数中的最大值
 */
public class MethodDemo1 {
    public static void main(String[] args){
        Scanner input  = new Scanner(System.in);
        System.out.println("请输入第一个数据:");
        int num1 = input.nextInt();
        System.out.println("请输入第二个数据:");
        int num2 = input.nextInt();
        System.out.printf("最大值"+getMax(num1,num2));
    }
    public static int getMax(int a ,int b){
        return a > b ? a : b;
    }
}
import java.util.Scanner;

/**
 * 键盘录入两个数据,比较两个数据是否相等
 */
public class MethodDemo1 {
    public static void main(String[] args){
        Scanner input  = new Scanner(System.in);
        System.out.println("请输入第一个数据:");
        int num1 = input.nextInt();
        System.out.println("请输入第二个数据:");
        int num2 = input.nextInt();
        boolean flag = isEquals(num1,num2);
        if(flag){
            System.out.println("两个数据相等");
        }else{
            System.out.println("两个数据不相等");
        }

    }
    public static boolean isEquals(int a ,int b){
        return a == b;
    }
}
import java.util.Scanner;

/**
 * 键盘录入3个数据,找到3个数中的最大值
 */
public class MethodDemo1 {
    public static void main(String[] args){
        Scanner input  = new Scanner(System.in);
        System.out.println("请输入第一个数据:");
        int num1 = input.nextInt();
        System.out.println("请输入第二个数据:");
        int num2 = input.nextInt();
        System.out.println("请输入第三个数据:");
        int num3 = input.nextInt();
        System.out.println("最大值为"+getMax(num1,num2,num3));

    }
    public static int getMax(int a ,int b,int c){
        return (a > b)?(a>c?a:c):(b>c?b:c);
    }
}

4.方法的注意事项

方法不调用不执行

方法与方法是平级关系,不能嵌套定义

方法定义的时候参数之间用逗号隔开

方法调用的时候不用再传递数据类型

5.练习

/**
 * 需求,在控制台输出如下图形
 *  *****
 *  *****
 *  *****
 *  *****
 */
public class MethodDemo2 {
    public static void main(String[] args){
        printXing(4,5);
    }
    public static void printXing(int m,int n){
        for (int x = 0 ; x < m ; x++ ){
            for (int y = 0 ; y < n ; y++ ){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
/**
 * 需求,在控制台输出如下图形
 *  输出九九乘法表
 */
public class MethodDemo2 {
    public static void main(String[] args){
        printNN(9);
    }
    public static void printNN(int n){
        for (int x = 1 ; x <= n ; x++){
            for (int y = 1; y <= x; y++){
                System.out.print(y+"*"+x+"="+y*x+"\t");
            }
            System.out.println();
        }
    }

}

6.没有明确返回值的方法的调用

其实就是void类型方法的调用,只能单独调用。

7.方法重载

方法重载概述:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

方法重载的特点:1.与返回值类型无关,只看方法名和参数列表 2.在调用时,虚拟机通过参数列表的不同来区分同名方法

/**
 *  方法重载
 */
public class overLoadDemo {
    public static void main(String[] args){
        System.out.println("两个数之和:"+sum(1,2));
        System.out.println("三个数之和:"+sum(1,2,3));
        System.out.println("四个数之和:"+sum(1,2,3,4));
    }
    public static int sum(int a,int b){
        return a + b;
    }
    public static int sum(int a,int b,int c){
        return a + b + c;
    }
    public static int sum(int a,int b,int c,int d){
        return a + b + c + d;
    }
}

数组

1.数组概述

现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有80名员工,有前面所学的知识,程序首先需要声明80个变量来分别记住每个员工的工资,然后再进行操作,这样做会非常麻烦。为了解决这种问题,java就提供了数组供我们使用。

数组是存储多个变量(元素)的容器。多个元素的数据类型要一致。数组既可以存储基本数据类型,也可以存储引用数据类型。

2.数组的定义格式

格式1:数据类型[] 数组名;

格式2:数据类型 数组名[];

这两个定义好了,数组中是没有元素值的,需要对数组进行初始化。

3.数组的初始化

数组初始化概述:java中的数组必须先初始化,然后才能使用。所谓的初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

数组的初始化方式:

动态初始化:初始化的时候只指定数组长度,由系统为数组分配初始值。

静态初始化:吃石化的时候指定每个数组元素的初始值,由系统决定数组长度。

4.数组的动态初始化

动态初始化:初始化的时候只指定数组长度,由系统为其分配初始值。

格式:数据类型[] 数组名 = new 数据类型[数组长度];

数组长度其实就是数组中元素的个数。

int[] arr = new int[3];
==左边:
int:说明数组中的元素的数据类型是int类型
[]:说明这个是一个数组
arr:数组的名称
==右边:
new:为数组分配内存空间
int:数组中的元素的数据类型是int类型
[]:说明这是一个数组
3:数组长度,其实就是数组中元素的个数

5.java中的内存分配

Java程序在运行时,需要在内存中分配空间。为了提高运行效率,需要对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈:存放的是局部变量

堆:存放的是所有new出来的东西

方法区

本地方法区:和系统相关

寄存器:CPU使用

局部变量:在方法定义中或方法声明上的变量都称为局部变量。

堆内存的特点:1.每个new出来的东西都有地址值 2.每个变量都有默认值 3.使用完毕之后就变成了垃圾,但是并没有立即回收,会在垃圾回收器空闲的时候回收。

6.数组的静态初始化

静态初始化:初始化时指定每个数组元素额初始值,由系统决定其长度。

格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}

举例:

int[] arr = new int[]{1,2,3}
解释:定义了一个int类型的数组,这个数组可以存放3个int类型的值,并且值分别是1,2,3。
其简化形式可以为:int[] arr = {1,2,3};

7.数组练习

package cn;
/**
 * 数组遍历:就是一次输出数组中的每一个元素
 *
 */
public class ArrayDemo {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = new int[]{1,2,3,4,5};
		//遍历数组
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+"\t");
		}
	}

}
package cn;
/**
 * 获取最大值
 *
 */
public class ArrayDemo {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = new int[]{1,2,3,4,5};
		//输出最大值
		System.out.println("最大值:"+getMax(arr));
	}
	public static int getMax(int[] arr){
		int max = arr[0];
		for(int x = 0;x<arr.length;x++){
			if(max<arr[x]){
				max = arr[x];
			}
		}
		return max ;
	}

}
package cn;
/**
 * 数组逆序
 *
 */
public class ArrayDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = new int[]{1,2,3,4,5};
        //数组逆序
        reverse(arr);
        //打印逆序后的数组
        printArray(arr);
    }
    public static void reverse(int[] arr){
        for(int i =0,j=arr.length-1 ;i<arr.length/2;i++,j--){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    public static void printArray(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }

}
package cn;
/**
 * 数组元素的查找,返回元素的索引值
 *
 */
public class ArrayDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = new int[]{1,2,3,4,5};
        //调用方法
        int index = getIndex(arr,2.1);
        System.out.println(index);
    }
    public static int getIndex(int[] arr,int value){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == value){
                return i;
            }
        }
        return -1;
    }
    public static int getIndex(int[] arr,double value){
        int index = -1 ;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == value){
                index = i;
                break;
            }
        }
        return index;
    }

}
时间: 2024-10-17 14:52:41

java之方法和数组的相关文章

java之方法与数组

主要知识点: 什么是方法 方法的格式与属性 方法的特点 一维数组的简介,声明和初始化 数组分配内存空间 二维数组 操作数组的工具类-Arrays 什么是方法 方法是一组为了实现特定功能代码块的集合.方法的主要功能有两个: 结构化代码:将代码按照功能进行组织,是代码结构比较清晰,容易阅读和修改,也就是程序的可维护性强. 减少代码的重复:一个固定的功能,可能在程序中多次使用,在使用的时候需要调用写好的方法,而不用重复书写对应的功能代码. 方法在书写的时候需要注意以下两点: 逻辑严谨:方法实现的一个完

Java中方法与数组

1:方法(掌握) (1)方法:就是完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法. (2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { 方法体语句; return 返回值; } 修饰符:目前就用 public static.后面再详细讲解其他修饰符 返回值类型:就是功能结果的数据类型 方法名:就是起了一个名字,方便我们调用该方法. 参数类型:就是参数的数据类型 参数名:就是变量 参数分类: 实参:实际参与运算的数

Java学习篇之数组方法

Java中数组常用方法的总结(学习过程中看到的一篇关于Java数组的常用方法,希望能给大家提供帮助) 一.Java标准类库提供static方法System.arraycopy(),用它复制数组比用for循环复制要快得多,     System.arraycopy()针对所有的类型做了重载,需要5个参数. 第一个参数:源数组. 第二个参数:偏移量,即从哪个位置开始复制的索引. 第三个参数:目标数组. 第四个参数:偏移量. 第五个参数:要从源数组中复制到目标数组元素的个数,一般情况下为目标数组的长度

Java比较两个数组中的元素是否相同的最简单方法

呵呵呵,实现Java比较两个数组中的元素是否相同的功能你是怎么做的?看下面最简单方法: import java.util.Arrays; public class Test { /** * Java比较两个数组中的元素是否相同 */ public static void main(String[] args) { String [] array1 = {"1","2","3"}; String [] array2 = {"3"

JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Fiald,Method,反射Main方法,数组的反射和实践

JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Fiald,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识Class类 想要反射,你就必须要了解一个类--Class,我们知道,java程序中的各个java类都属于同一事物,我们通常用Classliability描述对吧,反射这个概念从JDK1.2就出来了,历史算是比较悠久了,这个Class可不是关键字哦,这个是一个类,他代表的是一类事物: 我们归根结底就

[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Java基础知识强化86:System类之arraycopy()方法(数组拷贝)

1. arraycopy方法(数组拷贝) 1 public static void arraycopy(object src,int srcPos,Object dest,int destPos, int length) 从指定的数组中复制一个数组,复制从指定位置开始,到目标数组的指定位置结束. 参数:        src - 源数组        srcPos - 源数组中的起始位置        dest - 目的数组        destPos - 目标数据中的起始位置        

乐字节Java反射之三:方法、数组、类加载器和类的生命周期

本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throws Exception { Class<?> clz = Class.forName("com.shsxt.ref.simple.User "); //获取属性 System.out.println("======

java初步学习之数组

(1)数组的定义 数组是一种数据结构,是一种具有相同类型的数据的集合. (2)语法 在java中定义一个数组有三种方法: ①数据类型[] 数组名称={根据类型初始化}: int[] str1={1,2,3,3,4};这种方法在定义时直接初始化,当然也确定了其空间大小. ②数据类型[] 数组名称=new 数据类型[数组空间大小]; int[] str2=new int[100]; 注:此处必须注明空间大小 ③int[] str3=new []{1,2,3,4,5};这种方法和第一种一样,都是直接进