A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 温暖的小白   /  2015-5-12 22:18  /  6320 人查看  /  50 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 枫烬 于 2015-11-6 00:56 编辑

笔记内容:数组
笔记来源:冯佳Java基础视频第6天
正文:
            

概述


  • 数组是存储同一种数据类型多个元素的集合/容器,可以存储基本数据类型或是引用数据类型。
  • 数据类型[]  数组名 = new 数据类型[数组长度];
[]的个数代表数组的维度

  • 特点:


    • 数组的每个元素都有编号(index,索引,角标),从0开始,最大编号为arr.length-1
    • 在堆内存里面是一块连续的内存空间
  • 初始化:不允许动静结合


    • 动态初始化,指定长度,系统给出初始化值
    • 静态初始化,指定初始化值,系统来决定长度

默认初始化值:
  
整数类型
  
  
byte,short,int,long
  
  
0
  
  
浮点类型
  
  
float,double
  
  
0.0
  
  
布尔类型
  
  
boolean
  
  
false
  
  
字符类型
  
  
char
  
  
'\u0000'
  
  
引用数据类型  
  
  
  
  
null
  


‘\u0000’:每个0都是代表16进制的0

Sys.out.print(arr); ==>[I@da6

内存


  • 内存区块:
  
  
  
存储局部变量
  
  
先进后出
  
  
  
  
存储new出来的数组或对象
  
  
  
  
方法区
  
  
存储代码
  
  
  
  
本地方法区
  
  
和系统有关
  
  
  
  
寄存器
  
  
cpu用
  
  
  


局部变量:定义在方法声明和方法体里的变量

类文件运行加载后,主方法main以栈针的形式压栈到栈底,定义数组,在堆创建数组的连续空间



  • 异常


    • ArrayIndexOutOfBoundsException      数组索引越界异常
    • NullPointerException空指针异常

操作


  • 遍历

  1. //遍历数组
  2.         public static void testArray01(int[] arr){
  3.                 for (int i = 0;i < arr.length ;i++ ) {
  4.                         System.out.print(arr[i]+"\t");
  5.                 }
  6.                 System.out.println();
  7.         }
复制代码


  • 最大值
    1. //获取数组最大值
    2.         public static void getArrayMax(int[] arr){
    3.                 int max = arr[0];
    4.                 for (int i = 1;i<arr.length ;i++) {
    5.                         if (max < arr[i]) {
    6.                                 max = arr[i];
    7.                         }
    8.                 }
    9.                 System.out.println("最大值为:"+max+"。");
    10.         
    11.         }
    复制代码

  • 最小值
    1. //获取最小值
    2.         public static int getArrayMin(int[] arr) {
    3.                 int min = arr[0];
    4.                 for (int i = 1;i <arr.length ;i++ ) {
    5.                         if (min > arr[i]) {
    6.                                 min = arr[i];
    7.                         }
    8.                 }
    9.                 return min;
    10.         }
    复制代码

  • 反转
    1. //反转
    2.         public static void reverseArray(int[] arr) {
    3.                 for (int i = 0;i < arr.length/2 ;i++ ) {
    4.                         int temp = arr[i];
    5.                         arr[i] = arr[arr.length-i-1];
    6.                         arr[arr.length-i-1] = temp;
    7.                 }
    8.         }
    复制代码

  • 排序
  • 由值返回角标
    1. //由值返回角标
    2.         public static int getIndex(int[] arr,int value) {
    3.                 for (int i = 0;i < arr.length ;i++) {
    4.                         if (arr[i] == value) {
    5.                                 return i;
    6.                         }
    7.                 }
    8.                 return -1;
    9.         }
    10. }
    复制代码

  • 由角标返回值
    1. //星期
    2.         public static void getWeek(int week){
    3.                 char[] weekDay = {'一','二','三','四','五','六','日'};
    4.                 System.out.println("这是星期"+weekDay[week-1]+"。");
    5.                
    6.         }
    复制代码





二维数组

数据类型[ ][ ] 数组名称 = new 数据类型[ a ][ b];
==》a个一维数组,每个一维数组中有b个元素

Int[]x,y[];      x是一维数组,y是二维数组;

默认初始化值是null
参数传递问题:
基本类型数据的值传递,不改变原值,因为调用后会弹栈,局部变量消失。调用时,用的只是将变量的值赋给局部变量。
引用数据类型的值传递,改变原值,因为即使方法弹栈,但堆内存数组对象还在,可通过地址访问

java传值/传址?
只有传值,因为地址值也是值

形参的改变会影响实参吗?
基本数据类型,形参的改变不影响实参
引用数据类型,形参的改变影响实参







回复 使用道具 举报
我用的onenote做的笔记,复制过来之后格式就难看了==!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马