`
jianchen
  • 浏览: 342901 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java基础复习(8)--数组

阅读更多

java中有包名的类无法引用默认包中的类。但是1.2或1.3的jdk却可以编译。新版的jdk已经禁止了这一行为,这样就强制了必须将引用类置于某个包中,形成清晰地组织结构。所以在以后的编程中最好给类指定包。


Date类的大部分方法已过时。已由Calendar实现。

汉诺塔 递归问题
递归的条件:
1,面对的问题形式类似
2,化简到最后一定有解

文件夹得递归访问
求最大公约数:辗转相除法

 

数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。

 

注意:如果你熟悉C/C++,请注意, Java数组的工作原理与它们不同。

 

1、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。

 

2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

 

3、数组声明的两种形式:一、int[] arr; 二、int arr[]; 推荐使用前者,这符合Sun的命名规范,而且容易了解到关键点,这是一个int数组对象,而不是一个int原始类型。

 

4、在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。因为,声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。

 

5、在数组构造的时候必须指定长度,因为JVM要知道需要在堆上分配多少空间。反例:int[] arr = new int[];

 

6、多维数组的声明。int[][][] arr; 是三维int型数组。

 

7、一维数组的构造。形如:String[] sa = new String[5];

或者分成两句:String[] sa; sa = new String[5];

 

8、原始类型数组元素的默认值。对于原始类型数组,在用new构造完成而没有初始化时,JVM自动对其进行初始化。默认值:byte、short、 int、long--0 float--0.0f double--0.0 boolean--false char--'"u0000'。(无论该数组是成员变量还是局部变量)

 

9、对象类型数组中的引用被默认初始化为null。如:Car[] myCar = new Car[10]; 相当于从myCar[0]到myCar[9]都这样被自动初始化为myCar[i] = null;

 

10、对象类型的数组虽然被默认初始化了,但是并没有调用其构造函数。也就是说:Car[] myCar = new Car[10];只创建了一个myCar数组对象!并没有创建Car对象的任何实例!

 

11、多维数组的构造。float[][] ratings = new float[9][]; 第一维的长度必须给出,其余的可以不写,因为JVM只需要知道赋给变量ratings的对象的长度。

 

12、数组索引的范围。数组中各个元素的索引是从0开始的,到length-1。每个数组对象都有一个length属性,它保存了该数组对象的长度。(注意和String对象的length()方法区分开来,这两者没有统一起来是很遗憾的。)

 

13、Java有数组下标检查,当访问超出索引范围时,将产生ArrayIndexOutOfBoundsException运行时异常。注意,这 种下标检查不是在编译时刻进行的,而是在运行时!也就是说int[] arr = new int[10]; arr[100] = 100; 这么明显的错误可以通过编译,但在运行时抛出!

 

Java的数组下标检查是需要额外开销的,但是出于安全的权衡还是值得的,因为很多语言在使用数组时是不安全的,可以任意访问自身内存块外的数组,编译运行都不会报错,产生难以预料的后果!

 

 

数组是用来存储一组相同类型数据的数据结构
数组的定义方式:
type[] arry_name;
type array_name[];
new出来的数组应该在堆里生成

int[] arry = new int[10];每个元素都为0
在定义数组时,直接指定数组内的元素值。

充:定义一个变量,必须初始化吗?
否,以前一直以为必须要初始化,但是如果你虽定义,但却未使用,则编译,运行没有问题。

但是如果使用到了这个变量,则必须在使用前进行初始化。
所谓数组的动态初始化,就是将数组的定义与初始化分离开来。

c语言和java语言数组的差异:
在c语言中将数组作为参数,传递进来的只是数组的首地址,一般要操纵数组,还要将数组的
长度传递进来。

而java是面向对象的,将数组的引用作为参数传递进来,即可以直接对数组进行操作,可以获

得数组的长度

System.out.println(null);编译不通过。
分析:System类的静态属性out属于printStream类型,该类的println方法,可以接受基本数据类型,接受String和Object类型,而null表示空引用,没有显式指明它的类型。


System.out.println((String)null);
System.out.println((Object)null);

多维数组:
静态:int[ ][ ] a = {{1,2},{3,4}};
错误写法:int[2][2] a = {{1,2},{3,4}};
动态:java中的多维数组的声明和初始化应按从高维到低维的顺序进行。
int[ ][ ] b = new int[3][ ];
a[0]=new int[2];
a[1]=new int[3];
a[2]=new int[4];
int t[ ][ ] = new int[ ][4];//非法


用数组完成堆栈的模拟实现。

 

 

看到了讲解null的文章,我觉的以下这点很重要。

容器类型与nullList:允许重复元素,可以加入任意多个null。Set:不允许重复元素,最多可以加入一个null。Map:Map的 key最多可以加入一个null,value字段没有限制。数组:基本类型数组,定义后,如果不给定初始值,则java运行时会自动给定值。引用类型数 组,不给定初始值,则所有的元素值为null。

 

List list = new ArrayList();
list.add(null);
list.add(null);
System.out.println(list.size());

//输出结果为2
分享到:
评论

相关推荐

    Java基础复习day03数组

    Java基础复习day03数组 Java数组是一种数据类型,引用类型,用于存放一组数据的数据结构。数组的定义、创建、访问、长度属性、遍历、常用Arrays类、二维数组、方法递归调用经典案例、变量源码教程等。 一、数组的...

    01大数据面试复习----Java基础---集合类、多线程、JVM.zip

    2. **垃圾回收(GC)**:自动内存管理机制,包括新生代、老年代、永久代(Java 8后改为元空间Metaspace)。GC算法有标记清除、复制、标记整理、分代收集等。 3. **类加载机制**:加载、验证、准备、解析、初始化五...

    Java复习---思考题

    Java 复习资料中的思考题涵盖了Java的基础知识,包括JDK的含义、Java跨平台技术、垃圾收集机制、J2SE、J2ME、J2EE的区别、包的作用、J2SE类库的主要包以及Java编程规范和程序结构。下面将详细解答这些知识点。 1. ...

    java基础1-8章复习-final.rar

    这份"java基础1-8章复习-final.rar"的压缩包包含了对Java基础知识的深入复习,适合初学者和有一定经验的开发者巩固基础。从提供的文件名来看,我们可以推测这些文件可能是复习资料、示例代码以及可能的一份笔试题。 ...

    Java基础与实践-源代码.rar

    【Java基础与实践】是Java学习的重要组成部分,涵盖了语言的基础概念到实际应用的各个层面。这份压缩包"Java基础与实践-源代码.rar"显然包含了多个章节的学习资源,每个章节以"ch"开头的文件名代表不同的主题。下面...

    java基础复习

    ### Java基础复习知识点详解 #### 一、Java语言特点 - **高级编程语言**:Java是一种面向对象的高级编程语言,具有以下特点: - **简单性**:语法简洁,易于学习。 - **结构中立**:独立于硬件结构,能够在各种...

    java基础数据结构-栈

    在《Java基础复习笔记05数据结构-栈》中提到,**栈**是一种特殊的线性表,它遵循“先进后出”(First In Last Out, FILO)的原则,即最后进入的数据项将最先被取出。可以将其想象成一个装书的盒子,如果想要拿到最...

    Java基础复习笔记01数组_内存形式_父子_内存控制

    ### Java基础复习笔记01:数组、内存形式、父子关系及内存控制 #### 1. 前言 本文档旨在回顾并总结Java基础知识中关于数组、内存管理、对象继承等核心概念的理解与实践。作者希望通过这篇笔记加深对Java基础理论的...

    java 考试资料--第七组

    1. `JAVA复习题201004.xls`:这可能是一个2010年4月的Java复习题目集合,可能包含了选择题、填空题、简答题等多种题型,用于帮助考生复习Java的基础知识和进阶概念,如类与对象、继承、多态、异常处理、集合框架、IO...

    JAVA程序员必读--基础篇

    Java编程语言是软件开发领域广泛使用的编程语言,尤其在企业级应用中占据着主导地位。作为Java程序员,掌握基础..."JAVA程序员必读--基础篇"的CHM文件应该包含了这些内容的详细讲解,是学习和复习Java基础的宝贵资源。

    Java基础考试复习资料

    这份"Java基础考试复习资料"涵盖了初学者需要理解的重要概念,旨在帮助广大备考者有效地准备Java相关的考试。以下是一些关键知识点的详细说明: 1. **Java简介**:Java是由Sun Microsystems公司开发的一种跨平台、...

    Java基础知识总结 - 超详细篇收藏.zip

    这份“Java基础知识总结 - 超详细篇收藏”压缩包包含了关于Java编程的基础知识,是学习和复习Java语言的理想资源。以下是对其中可能涵盖的知识点的详细解释: 1. **Java环境搭建**:学习Java的第一步是安装JDK...

    良心出品java复习题-选择题判断题.doc

    8. 数组操作:在Java中,数组的索引从0开始,所以对于长度为22的数组,最后一个元素的索引是21。 9. 关键字:"main"并不是Java的关键字,而是作为主方法的标识。 10. 代码错误:在提供的代码段中,问题出现在第7行...

    Java复习提纲-2009-5.doc

    Java虚拟机(JVM)是Java程序的运行环境,而Java运行环境(JRE)包含了运行Java应用程序所需的所有组件,包括JVM。Java开发工具包(JDK)则提供了编译和调试Java程序所需的工具,比如javac.exe用于编译源代码,java....

    Java程序设计技术-期末复习.ppt

    Java程序设计技术是编程学习的重要领域,特别是在期末复习阶段,我们需要深入理解并掌握一系列关键概念。以下是基于给定内容的一些重要知识点的详细说明: 1. **JAVA数组**:数组是Java中存储固定数量同类型元素的...

    Java基础复习

    "Java基础复习"这个主题涵盖了从入门到进阶的各种概念,旨在帮助学习者巩固和深化对Java语言的理解。以下是一些关键的知识点: 1. **Java语言简介**:Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems...

    Java基础尚硅谷宋红康学习笔记

    【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言。Java的基础部分主要包括...

    Java程序设计--复习要点.doc

    本篇复习要点主要涵盖了Java语言的基础知识,包括其特点、运行机制、程序开发流程、程序分类以及语言基础,如关键字、数据类型、运算符、语句结构等。 1. **Java语言特点**: - **简单**:Java设计时考虑了C++的...

Global site tag (gtag.js) - Google Analytics