08 - 方法和数组

一、方法设计

1.方法的定义和调用

如果方法使用了static修饰: 此时我们使用方法所在类的名称.方法名(参数);
如果方法没有使用static修饰: 此时我们得使用方法所在类的对象来调用(暂且不讨论,面向对象).

  • 方法定义格式
修饰符 返回值的类型 方法名称(形式参数){
//方法体
//如果方法需要给调用者返回一个结果,此时使用return进行返回
}
  • demo
public class MethodAndArray {

    static  void testCallBack(){ //抽离方法
        System.out.println("测试的回调");
    }

    public static void main(String[] args){
     
        MethodAndArray.testCallBack(); //调用方法
    }
}
//调用之后打印结果为:我测试的回调

2.方法中的术语

  • 修饰符:public,static等,static修饰的方法属于类,直接使用类名调用即可,现在都使用static修饰.
  • 返回值类型: 方法其实是在完成一个功能,该功能操作完毕之后,是否需要给调用者返回一个结果.如果不需要给调用者返回结果,此时使用关键字void来声明,无返回的意思.
  • 方法名称:遵循标识符的规范,使用动词表示,首字母小写,若是多个单词组成,使用驼峰表示法.
  • 形式参数:方法圆括号中的变量,仅仅只是占位而已,参数的名称其实无所谓,形式参数可以有多个.
  • 参数列表:参数列表 == 参数的类型 + 参数的个数 + 参数的顺序.
  • 方法签名:方法签名 == 方法名称 + 方法参数列表;在同一个类中,方法签名是唯一的,否则编译报错.
  • 方法体:方法的{}中的代码,表示具体完成该功能的代码.
  • 返回值: 在方法内部,使用return关键字;
    • 功能1:给调用者返回一个结果值,此时该方法不能使用void修饰.
    • 功能2:结束当前方法.
  • 实际参数:调用者在调用某一个具体方法的时候,实际传递的参数值.
  • 方法的调用者:在哪里调用某一个方法,那么哪里就是该方法的调用者.

二、JVM内存模型

1.内存模型分析

JVM内存划分,根据不同内存空间的存储特点以及存储的数据:
程序计数器:当前线程所执行的字节码的行号指示器。
本地方法栈:为虚拟机使用的native方法服务。
Java虚拟机栈:描述Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。
每一个方法,创建一个栈帧,,栈帧存放了当前方法的数据信息(局部变量),当方法调用完毕,该方法的栈帧就被销毁了.
Java堆:被所有线程共享的一块内存区域,在虚拟机启动时创建。所有的对象实例以及数组都要在堆上分配(使用new关键字,就表示在堆中开辟一块新的存储空间)。
方法区:线程共享的内存区域,存储已被虚拟机加载的类信息、常量、静态变量即时编译器编译后的代码数据等(这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载)。

2.简述GC

GC(Garbage Collection):垃圾回收器。
Java的自动垃圾回收机制:简单理解为程序员就不需要再手动的去控制内存的释放。当JVM发觉内存资源紧张的时候,就会自动地去清理无用对象(没有被引用到的对象)所占用的内存空间。


image.png

三、一维数组

1.数组的定义和初始化

变量的定义:
数据类型 变量名; 如: int age;
数组的定义:
方式1: 数组元素的类型[] 数组名; int[] ages;推荐的. 可以吧int[]看成是一种数据类型,int类型的数组类型.
方式2:数组元素的类型 数组名[]; int ages[];
数组初始化
数组必须先初始化,才能使用,因为初始化表示在内存中分配空间.所谓初始化就是给数组元素分配内存,并为每个元素赋初始值。
初始化数组的两种方式:
静态初始化和动态初始化
无论,以哪种方式初始化数组,一旦初始化完成,数组的长度就固定了,不能改变,除非重新初始化。也就是说数组是定长的。
数组是定长的: 数组一旦初始化成功,数组中的元素个数就已经固定了,不能更改,如果需要更改,只能重新做初始化.

2.数组的静态初始化操作

特点:有我们自己来为每一个数组元素设置初始化值,而数组的长度由系统(JVM)决定.
语法:
数组元素类型[] 数组名 = new 数组元素类型[]{元素1,元素2,元素3,.......};
举例:
int[] nums = new int[]{1,3,5,7,9};
简单写法,必须声明之后,立刻初始化,不能先声明后初始化:
int[] nums = {1,3,5,7,9};

image.png

3.数组的动态初始化操作

由我们来设置数组的元素个数(数组长度),而每一个数组元素的初始值有系统决定.
格式:

    数组元素类型[]  数组名 = new  数组元素类型[ length ];

比如:

  int[] ages = new  int[100];
  int[] nums = new  int[5]{1,3,5,7,9};//写法是错误的,不能同时使用静态初始化和动态初始化.

什么时候使用静态初始化,什么时候使用动态初始化.
当我们事先知道,需要存储哪一些数据的时候,选用静态初始化.
当我们事先不知道,需要存储哪些数据的时候,只能使用动态初始化.

image.png

4.数组的基本操作

  • 1.数组基本操作
    获取元素: 元素类型 变量 = 数组名[index];
    设置元素: 数组名[index] = 值;
    遍历数组元素: 建议使用for循环,事先知道循环的次数.
    数组长度: int len = 数组名.length; length是属性,不是方法.
    索引范围: 从0开始,逐一递增. [0,数组名.length-1]
 //数组的基本操作
        int[] number = new int[]{1,24,55,32,33};
        System.out.println("数组的长度="+ number.length);//数组的长度=5
        System.out.println("数组的第一个元素="+ number[0]);//数组的第一个元素=1
        System.out.println("数组的最后一个元素="+ number[4]);//数组的最后一个元素=33

        //ArrayIndexOutOfBoundsException  数组越界
//        System.out.println("数组的最后一个元素="+ number[5]);//


        //数组遍历
        for (int i = 0;i<number.length;i++){

            System.out.println("数组的值为"+ number[i]);//
        }
  • 2.操作数组常见异常

    NullPointerException:空指针异常(空引用).
    当数组还未初始化,就直接操作数组.
    String[] bs = null;
    System.out.println(bs.length)
    ArrayIndexOutOfBoundsException:数组的索引越界异常.

  • 3.Demo

        int[] number = new int[]{1,24,55,32,33};
        //获取数组最大元素
        System.out.println("最大的元素为="+MethodAndArray.getMax(number));//最大的元素为=55

     String[] arr =  {"A","B","C","D","E"};
     //打印数组
    MethodAndArray.printArray(arr); //[A,B,C,D,E]
//        MethodAndArray.printArray(null);
        //打印倒序数组
      String[] newArr = MethodAndArray.reversePrintArray(arr);
     MethodAndArray.printArray(newArr);
    }
    //打印倒序数组
    static  String[] reversePrintArray(String[] oldArr){
        String[] newArr = new String[oldArr.length];
        for (int index = oldArr.length-1;index>=0;index--){
            newArr[oldArr.length-1-index] = oldArr[index];
        }
        return newArr;
    }
     //打印数组
    static  void   printArray(String[] array){
        if (array == null){
            System.out.println("传入的值为null");
            return;
        }
        String ret = "[";
        for (int index = 0; index < array.length;index++){
            ret = ret + array[index];
            if (index != array.length-1){
                ret =ret +",";
            }
        }
        ret = ret + "]";
        System.out.println(ret);
    }
    //获取数组最大元素
    static  int  getMax(int[] number){
        int max = number[0];//假设第一个元素是最大值
        for (int index = 1; index<number.length;index++){
            if (number[index]>max){
                max = number[index];
            }
        }
        return  max;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容