编程语言
首页 > 编程语言> > [Java] 方法,数组

[Java] 方法,数组

作者:互联网

文章目录

项目的结构

在这里插入图片描述

IDEA

常用快捷键

在这里插入图片描述

要修改快捷键的话自行csdn哈哈哈哈哈哈哈哈哈哈

1 方法

1.1 语法

格式

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

注意事项:

1.2 调用方式

调用流程:

1.3 练习题

题目1: 定义一个方法,用来判断两个数字是否相同

package method.demo1;

public class Demo1 {

    public static String IsSame ( int a, int b){
        String C = a==b? "相同": "不同" ;
        return C;
    }

    public static void main(String[] args) {
          String ret =   IsSame(10,20);
          System.out.println(ret);
    }
}

题目2:求出1-100所有数的和的结果

package method.demo2;

public class Demo2 {

    public static int sum(){
        int Sum = 0;
        for(int i =1;i<=100;i++){
            Sum +=i;
        }
        return Sum;
    }

    public static void main(String[] args) {
            System.out.println(sum());
    }
}

1.4 方法的注意事项

1.5 方法的重载

英文: OverLoad

有若干种类型:

注意: 返回值类型相同不能发生重载

1.6 重载练习

练习一

public static void a(){}


public static void open(int a){}//是
static void open(int a,int b){}//和第8行错误
public static void open(double a, int b){}//是
public static void open (int a ,double b){}//和第6行冲突
6  public void open(int i, double d){}
public static void OPEN(){}//不是重载,是新方法,且命名不规范
8  public static void open(int i ,int j){}

2 数组

定义: 一次性存储多个数据类型相同的变量的值的一种容器

特点:

  1. 数组是一种引用数据类型
  2. 数组当中的多个数据,类型必须统一
  3. 数组的长度在运行期间不可改变

2.1 数组的初始化

定义:在内存中创建一个数组,并且赋予一些默认值

两种方式:

  1. 动态初始化(指定长度)
  2. 静态初始化(指定内容),他的长度就是内容的长度

动态初始化

数据类型[] 数组名称 = new 数据类型[数组长度];
int []aaa = new int[3];

静态初始化

数据类型[] 数组名称 =  new 数据类型[]{元素1,元素2...};
int []aaa = new int[]{1,2,3,4,5,6,7,7};
//也可以
int aaa[] = {元素1,元素2...};//这是省略格式

注意!!

动态初始化时不可以省略写,即,不可以 int a[5]; 但是可以int [] a;

为什么要加new? 因为Java中数组时没有静态的,数组的内存都是通过new动态分配的.

2.2 访问数组元素进行获取

数组的索引值从0开始

2.3 数组的赋值

例子:

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
         int [] array = new int[3];
         for(int i =0;i<3;i++){
             System.out.println(array[i]);//没有赋值的时候,报的数是0
         }
    }
}

这说明,数组初始化的时候,数组会给每一个元素自动拥有一个默认值

2.4 Java的内存

Java的内存需要划分为5个部分:

  1. ​ **栈(Stack): ** 存放的都是方法中的局部变量 (注意,方法的参数也是局部变量) 一旦超出作用域,该数据立刻从栈区中消失 注意::!!方法的运行一定是在栈当中的
  2. 堆(Heap): 凡是new出来的东西,都是在堆里面的,堆内存里面的数据都有一个地址值,他是16进制的,堆内存里面的数据,都有一个默认初始值,规则就是数组的初始值
  3. 方法区(Method Area): 储存 .class的相关信息,包含方法的信息
  4. 本地方法栈(Native Method Stack): 于操作系统相关
  5. 寄存器(pc Register): 与CPU相关.

重点是前三个,原因是我们太垃圾了,不配了解后面两个

2.5 数组的内存图

一个数组的内存图

在这里插入图片描述

代码:

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
         int[] array = new int[3];//动态初始化
         System.out.println(array);
         array[1] = 10;
         array[2] = 20;
        
        System.out.println(array);
    }
}
//我们可以发现,修改数组的值并不影响堆区数组的地址值

两个数组的互相影响:

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
         int[] arrayA = new int[3];
         System.out.println(arrayA);
         arrayA[1] = 10;
         arrayA[2] = 20;
         for(int i =0;i<3;i++){
             System.out.println(arrayA[i]);
        }
        int[] arrayB = arrayA;//关键步骤
        System.out.println(arrayB);
        arrayB[1] = 20;
        arrayB[2] = 30;
        for(int i =0;i<3;i++){
            System.out.println(arrayA[i]);
        }

    }
}

从代码我们可以看出来,当代码int[] arrayB = arrayA;执行时,arrayB的地址已经指向了arrayA在堆区的数组,因此arrayB数组的值的改变会导致arrayA的值也因此改变.

图如下

在这里插入图片描述

2.6 数组牵引越界

代码如下

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
         int[] arrayA = new int[3];
         System.out.println(arrayA);
         arrayA[1] = 10;
         arrayA[2] = 20;
         for(int i =0;i<4;i++){
             System.out.println(arrayA[i]);
        }//这里会发生越界异常,因为索引的编号超过了数组的长度 -1

    }
}

2.7 数组空指针异常(NullPointerException)

代码如下

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
         int[] arrayA = null;
         for(int i =0;i<4;i++){
             System.out.println(arrayA[i]);
        }//这里会发生空指针异常

    }
}

2.8 获取数组的长度

简单,但是重要

代码如下:

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
         int[] arrayA = {1,2,3,4,5,6,23,5,523,325,325,325,323,352,523,325};
         System.out.println(arrayA.length);

    }
}//这是数组的属性的运用

练习1,数组的遍历输出,我就不写了哈哈哈哈哈哈哈哈哈哈

练习2,求数组的最大值:(我自己的解法,不过好像和他的想法一样,危,说明算法思想还是太垃圾)

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
        int[] arrayA = {2, 444, 22, 1245, 125125, 12665126,23,124,566};
        int max = 0;
        max = arrayA[0];
        for (int i = 0; i < arrayA.length - 1; i++) {
             if (max < arrayA[i+1]){
                 max = arrayA[i+1];
             }
        }
        System.out.println(max);

    }
}

练习3: 数组元素的反转(要求,不能创建新数组,就在原来的数组里面操作)

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
        int[] arrayA = {1,2,3,4,5,6,7,8,9,10,0};
        for(int i =0;i<(arrayA.length)/2 -1;i++){
            int temp = arrayA[i];
            arrayA[i] = arrayA[arrayA.length - i - 1];
            arrayA[arrayA.length - i -1] = temp;
        }
        for(int i =0;i<arrayA.length;i++){
            System.out.println(arrayA[i]);
        }

    }
}

教程的解法:我觉得更好,但是思路是一样的

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
        int[] arrayA = {1,2,3,4,5,6,7,8,9,10,0};
        for(int min = 0,max = arrayA.length - 1;min<max;min++,max--){
            int temp = arrayA[min];
            arrayA[min] = arrayA[max];
            arrayA[max] = temp;
        }
        for(int i =0;i<arrayA.length;i++){
            System.out.println(arrayA[i]);
        }


    }
}

2.9 数组作为返回值

代码如下:

package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
		int[] qwq = calculate(2,3,3);

    }

    public static int[] calculate(int a , int b, int c){
        int[] hhh = {a,b,c};
        return hhh;
    }
}

p = arrayA[min];
arrayA[min] = arrayA[max];
arrayA[max] = temp;
}
for(int i =0;i<arrayA.length;i++){
System.out.println(arrayA[i]);
}

}

}


## 2.9 数组作为返回值

代码如下:

```java
package method.demo1;

public class Demo1 {

    public static void main(String[] args) {
		int[] qwq = calculate(2,3,3);

    }

    public static int[] calculate(int a , int b, int c){
        int[] hhh = {a,b,c};
        return hhh;
    }
}

标签:Java,int,void,static,数组,arrayA,方法,public
来源: https://blog.csdn.net/m0_47652477/article/details/114419561