`
nudtgk2000
  • 浏览: 72807 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

马士兵课程笔记(续4)

阅读更多

数组

  • 数组可以看成是多个相同类型数据组合,对这些数据的统一管理。
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

差别:C/C++中的数组是可以分配在栈上的

  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。

一维数组的声明

格式:type var[]; 或 type[] var;

  • Note:Java语言中声明数组时不能指定其长度(而在创建时,比较C/C++);

数组对象的创建

格式: 数组名 = new 数组元素类型[元素个数]

public class Test {
    public static void main(String args[]) {
        int[] s;    // 在栈内存中声明数组引用
        s = new int[5];    // 在堆内存中创建数组,并对基本类型的元素初始化{0, 0, 0, 0, 0}, s引用指向它
    }
}

 元素为引用数据类型的数组

Note:每一个元素(引用数据类型)都需要初始化。

public class Test {
    public static void main(String[] args) {
        Date[] days;
        days = new Date[3];
        for (int i=0; i<3; i++) {
            days[i] = new Date(2004, 4, i+1);
        }
    }
}

class Date {
    int year; int month; int day;
    Date(int y, int m, int d) {
        year =y; month =m; day = d;
    }
}

 

数组初始化

  • 动态初始化 —— 数组定义与为数组元素分配空间和赋值的操作分开进行
int[] a;
a = new int[3];
a[0] = 3; a[1] = 9; a[2] = 8;

Date[] days;
days = new Date[3];
day[0] = new Date(1, 4, 2004);
day[1] = new Date(2, 4, 2004);
day[2] = new Date(3, 4, 2004);
  •  静态初始化 —— 在定义数组的同时就为数组元素分配空间并赋值
int[] a = {3, 9, 8};

Date[] days = {
    new Date(1, 4, 2004);
    new Date(2, 4, 2004);
    new Date(3, 4, 2004);
};
  •  数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被默认初始化

... ...
int[] a = new int[5];
Date[] days = new Date[3];

System.out.println(a[3]);
System.out.println(days[3]);
... ...

/* Output:
0
null
*/

数组元素的引用

arrayName[index]

Note: 在用到数组长度的地方都用arrayName.length属性而非长度值;

 

tips: 

  • public satic void System.exit(int static) —— 当前运行的虚拟机退出,0正常退出,非0非正常退出(其实两者在Windows下没区别)更多详情见API
  • 基础类型包装类 —— 把基础类型的值包装进对象,有Byte,Short,Integer,Long,Double,Float,Character,Boolean。除了Character类外它们都有把String形式的值转换成基础类型的静态方法,如public static int Integer.parseInt(String value) throws NumberFormatException, 更多详情见API。
  • 对每次循环都要用到的变量,把定义放在循环外,循环内赋值,节省每次分配/回收内存操作的花销。

二维数组

  • 可以视为数组的数组。 如: int a[][] = {{1, 2}, {3, 4, 5, 6}, {7, 8, 9}};
  • 多维数组的声明及初始化应从高维到低维从左到右从外到里
// 静态初始化
int intA[][] = {{1, 2}, {2, 3}, {3, 4, 5}};
// int intB[3][2] = {{1, 2}, {2, 3}, {4, 5}};    非法

// 动态初始化
int a[][] = new int[3][5];

int b[][] = new int[3][];
// int t[][] = new int[][4];    非法
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];

 数组的拷贝

  • 使用java.lang.System类的静态方法System.arraycopy

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

Note: 这个函数名里c居然没有大写

将源数组src从第srcPos项元素开始的length项元素拷贝到目标数组dest从destPos项开始的length个位置;

若length超过目标数组边界会抛出 IndexOutOfBoundsException 异常。

更多见API。

String[] s = ("Microsoft", "IBM", "Sun", "Oracle", "Apple");
String[] sBak = new String[6];
System.arraycopy(s, 0, sBak, 0, s.length);

for(int i=0; i < sBak.length; i++) {
    System.out.println(sBak[i]);    // sBak[i]和s[i]的值相同,是字符串常量的引用
}

// 二维整型数组拷贝
int[][] a = {{1, 2}, {1, 2, 3}, {3, 4}};
int[][] aBak = new int[3][];
System.arraycopy(a, 0, aBak, 0, a.length);
a[2][1] = 100;

for(int i=0; i<aBak.length; i++) {
    for(int j=0; j<aBak[i].length; j++) {
        System.out.println(aBak[i][j]);    // 因为aBak[2]拷贝了a[2]的数组引用,所以aBak[2][1]和a[2][1]是同一个变量,已经改成了100
    }
}

 

 

 

  • 大小: 20.8 KB
  • 大小: 70.6 KB
分享到:
评论

相关推荐

    马士兵课程笔记(续5)

    【标题】"马士兵课程笔记(续5)"主要聚焦在编程和软件开发的某一特定领域,结合了“源码”和“工具”的概念。这可能是关于解析、分析或利用源代码,以及使用特定工具来提升开发效率或理解复杂系统的主题。马士兵是一...

    马士兵jvm调优笔记.docx

    ### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...

    马士兵JAVA笔记(全).docx

    马士兵JAVA笔记(全) 本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、...

    马士兵oracle笔记

    马士兵oracle笔记,浅显易懂。

    jvm java虚拟机 调优 马士兵 笔记

    jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识

    Spring学习笔记(马士兵spring视频笔记).doc

    Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    马士兵 mybatis学习笔记

    马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...

    马士兵课程源码11111111111111111111

    马士兵课程源码11111111111111111111

    马士兵Spring课堂笔记(超级详细版).pdf

    马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...

    马士兵多线程笔记.zip

    以下是对马士兵多线程笔记的详细解析。 1. **多线程基础**:多线程是指一个应用程序中同时执行多个线程(即任务)的能力。这种并发执行可以提高系统资源的利用率,提升程序的响应速度和执行效率,特别是在多核...

    马士兵Spring课堂笔记(详细版)

    马士兵Spring课堂笔记(详细版) 马士兵spring视频笔记

    马士兵hibernate学习笔记(原版)

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、课程内容概览 - **HelloWorld**:通过简单的示例程序介绍如何启动一个基于Hibernate的Java项目。 - **Hibernate原理模拟**:解释O/R Mapping的概念及其重要性。 -...

    JAVA就业班笔记【马士兵说】.nyf

    JAVA就业班笔记【马士兵说】.nyf

    马士兵hibernate学习笔记.docx

    《马士兵Hibernate学习笔记》是一份详尽的教程,涵盖了Hibernate框架的核心概念和技术要点。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它有效地解决了Java应用程序与数据库之间的数据交互问题,...

    java-SE-马士兵笔记word

    ### Java SE - 马士兵笔记精要 #### 第1章 Java概述 - **Java语言的特点**: - **面向对象**:Java是一种完全支持面向对象编程的语言。 - **平台无关性**:通过Java虚拟机(JVM),Java可以在任何安装了JVM的...

    马士兵Springboot课堂笔记

    马士兵Springboot课堂笔记

Global site tag (gtag.js) - Google Analytics