Java中数组的一些用法以及方法的定义与使用

一,方法的定义

方法都定义在class里,格式如下:

public class Test  {

     返回值  方法名  (形参列表){

         方法体,方法的具体实现内容 

     }

 }

注意:类名必须要和文件名相同,方法没有声明一说,,方法可以嵌套使用,但是不能嵌套定义

二,方法的调用

(一)方法的传参

1.参数的个数,类型,顺序都需要匹配

2.返回值类型匹配

方法的调用都在栈上开辟空间,一旦遇到return,或者方法执行结束,就会把当前方法的栈帧从栈上进行销毁

(二)方法的重载

1.方法名相同

2.形参的 个数,类型,顺序,有一个或者多个不同

3.不能以返回类型区分

三,数组

(一) 数组的创建及初始化

数组是一种相同类型的数据的集合,有一块连续内存,是一种简单的数据结构,其定义如下:

 类型说明符 [ ]  数组名  =  { 数据元素 , 数据元素 } ;

          int [ ]  array1  =  {  1 ,2,3,4,5,6,7,8,9,}  ;

       char [ ]  chars  = {  ' a ' , ' b ' , ' c ' } ;

          int  [ ]  array2 = new int [ ] { 1 , 2 , 3 , 4 } ;  //new一个数组对象

          int [ ] array3 = new int [5]  ; //默认初始化为0

默认值有如下

 (二)数组

1.打印数组

int[] arr={1,2,3,4,5};
Syetem.out.println(arr[1]);

2.想知道数组长度

System.out.println(array.length);

3.数组名可以理解为所存放的堆区的地址

 

 4.Java中内存的划分为Java虚拟机栈,本地方法栈,堆,方法区,程序计数器。访问数组时可能会遇到如下几个异常

(1)素组越界异常

 

(2) 空指针异常(数组名引用为空)

若有 int [ ] array = NULL; 则会有以下异常

 5.1遍历数组的方法——for-each 循环,其书写格式如下

for ( 数据类型  变量名:数组名){

Syetem.out.print(" ") ;

}

只是遍历数组,拿不到每个元素的下标

5.2 通过工具类 Arrays. 的方式将数组转化为字符串

String ret = Arrays.toString(array);
System.out.println(ret);

Arrays.是操作数组的一个工具类,toString() 是一个方法,将数组转化为字符串进行输出,其使用需要导包  import java.util.Arrays;

(三)数组应用场景

3.1保存数据

public static void main(String[] args){
int[] array= {1,2,3};
for(int i=0;i< array.length;++i){

System.out println(array[i]+" ");
}
}

3.2作为参数传递

数组传参,传的是引用,引用存放地址,也就相当于引用指向对象

fun1,作为引用传递却并没有改变实参值

fun2,传的是引用,形参与实参指向同一块内存,形参可以修改实参的值

public static void fun1(int[] array){
        array = new int[]{11,22,33,44};
    }
    public static void fun2(int [] array){
        array[0]=99;
    }
    public static void main(String[] args) {
        int[] array={1,2,3,4};
        System.out.println(Arrays.toString(array));

        fun1(array);
        System.out.println(Arrays.toString(array));


        fun2(array);
        System.out.println(Arrays.toString(array));
    }

  区别于普通值传递

 总的来说,就是,数组传参传数组名时形参与实参最开始指向同一块空间,要不要改变实参取决于程序员自己,如果改变了形参的指向,(new一块空间让形参指向),那就改变不了实参了,而普通传参只有传值这一种传法,形参在栈区是找不到为实参在栈区开辟的空间的地址的

3.3 数组作为返回值

 public static int[] fun3(){
        int []array={1,2,3,4,5};
        return array;
    }
    public static void main(String[] args){
        int[] ret = fun3();
        System.out.println(Arrays.toString(ret));
    }

 3.4实现自己的  toString()  方法

toString 把整形转化为字符串

public static String myToString(int[] arryaay){
        if(arryaay==null) {
        return null;
        }
        String ret ="[";
        for(int i=0;i<arryaay.length;i++){
            ret+=arryaay[i];
            if(i!=arryaay.length-1) {
                ret+=",";
            }

        }
        ret+="]";
        return ret;
    }
    public static void main(String[] args){
        int[] arrar={1,2,3,4,5,6,7,8,9};
       System.out.print(myToString(arrar));

    }

 运行结果如下

 3.5数组拷贝

1.自己写方法

public static void main(String[] args){
        int[] array={1,2,3,4,5};
        int[] copy=new int[array.length];
        for (int i=0;i<array.length;i++){
            copy[i]=array[i];
        }
       System.out.println(Arrays.toString(copy));
    }

2.调用工具类

public static void main(String[] args){
        int[] array={1,2,3,4,5};
        int[] copy = Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(copy));
    }

3.若既要拷贝又要扩容

public static void main(String[] args){
        int[] array={1,2,3,4,5};
        array= Arrays.copyOf(array,array.length*2);
        System.out.println(Arrays.toString(array));
    }

 结果如下

4.拷贝数组的一部分

 public static void main(String[] args){
        int[] array={1,2,3,4,5};
       int[] copy= Arrays.copyOfRange(array,1,3);
        System.out.println(Arrays.toString(copy));
    }

结果如下

5.想要拷贝数组其实也有更为简单的写法

int[] array={1,2,3,4,5};
int[] copy = array.clone();
   

3.6数组逆序

 public static void reverse(int[] array){

        int i=0;
        int j=0;
        for(i=0,j=array.length-1;i!=j;i++,j--){
            int tmp=array[i];
            array[i]=array[j];
            array[j]=tmp;
        }
    }
    public static void main(String[] args){
        int[] array={1,2,3,4,5};
        reverse(array);
        System.out.println(Arrays.toString(array));
    }

(四)二维数组

4.1打印二维数组的三种方式

4.1.1普通循环

public static void main(String[] args){
        int [][] array={{1,2,3},{4,5,6}};
        for (int i=0;i<array.length;i++){
            for (int j=0;j<array[0].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }

4.1.2 foreach循环

public static void main(String[] args){
        int [][] array={{1,2,3},{4,5,6}};
        for (int[] tmpArray:array) {
            for (int x:tmpArray) {
                System.out.print(x+" ");
            }
            System.out.println();
        }
    }

4.1.3调用工具类 

 public static void main(String[] args){
        int [][] array={{1,2,3},{4,5,6}};
        String ret =Arrays.deepToString(array);
        System.out.println(ret);
    }

这里都只是简单运用了Java里面的工具类,Java里面还有很多其他功能强大的工具类,肯定也还有其他更有趣的对数组的操作。

注意:Java中可以省略掉列,但是不能省略行,这里与c语言中相反。

Java中还可以定义不规则数组

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值