ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[Java] 方法,数组

2021-03-05 23:32:31  阅读:135  来源: 互联网

标签:Java int void static 数组 arrayA 方法 public


文章目录

项目的结构

在这里插入图片描述

  • 当然,package里面还可以包括很多class
  • package有大包和小包,例如:创建package ,命名为cn.aaa.bbb.c,这里就是cn包包括aaa包包括bbb包包括c包

IDEA

常用快捷键

在这里插入图片描述

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

1 方法

1.1 语法

格式

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

注意事项:

  • 方法的名称用小驼峰

1.2 调用方式

  • 1 单独调用: 方法名称(参数) //void 函数常用
  • 2 打印调用: System.out.println(函数名(参数));//注意,不能返回void
  • 3 赋值调用: 数据类型 = 函数名(参数); //返回值类型不为void时常用

调用流程:

  • 1 找到方法的调用处
  • 2 传入参数
  • 3 执行方法体
  • 4 将返回值带到方法的调用处

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 方法的注意事项

  • 方法应该定义在当中,但是不能定义在方法中

  • 方法的前后顺序无所谓

  • 一定要调用才能使用

  • 如果方法有返回值,那么一定要写"return"

  • 一个方法中可以有多个return,但是必须保证只有一个被执行,因此return不能连写

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
         }
    }
}

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

  • int类型是0 float是0.0 字符类型是\u0000 布尔类型是false 引用类型是null
  • 静态初始化其实也是有默认值的,但是系统马上把默认值换成你加上的值

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有