point类型的数组java_Java基础学习之引用类型数组访问NullPoint问题
以题目引入:
面试题:int[] a = new int[10];Student[] a = new Student[10];的区别?
解析:
第一反应就是内存空间方面的保存位置不同,因为Java中保存基本数据类型的位置是在栈区,引用数据变量是在堆区,栈区保存的只是引用(引用就是只保存地址的位置的)。
但是关键的地方还没有解释清楚,其实就是解释的主要就是基础变量和引用变量在数组开辟空间方面的不同之处。
以一个部分代码作为引申学习:
Student[][] s = new Student[10][];
for(int i=0;i
for(int j=0;j
}
}
问题是:该代码是否能够编译运行?
答案是:错误,原因是s只是开辟了10行的Student一维数组,但是对于每一个一维数组并没有声明实际空间的大小,所以它仅仅是一个对象引用,相当于Student[] s;无法获得他的长度。故而报NullPoint的问题。
如果还是存在问题,我们以一个部分代码进行说明:
Student[] s = new Student[10];
for(int i=0;i
System.out.println(s[i].name);
}
问题是:该代码是否能够编译运行呢?
答案是:错误,原因在上面已经讲述了,故此不在版署了。
在此大家差不多就明白了面试题想考的问题方面在哪里了。没错,就是在引用数组new操作的对象之后,我们要对于每一个引用对象进行实际的在此new。
正确代码:
Student[] s = new Student[10];
for(int i=0;i
s[i] = new Student("张三",i);///Student中存在构造方法Student(String name,int id)
System.out.println(s[i].name+" "+s[i].id);
}
Student[][] s = new Student[10][];
for(int i=0;i
s[i] = new Student[10];
for(int j=0;j
s[i][J] = new Student("张三",i);///此处Student存在一个构造方法Student(String name,int id)
}
}
到此,该面试题差不多就解析完全了。
总结:
基础数据类型数组,可以直接通过数组名+id访问,不存在NullPoint问题,存在的只是越界问题。
引用数据类型数组,也可以直接通过数组名+id访问,但是之前在声明的时候,必须一个一个的进行实例化。否则就会出现空指向问题。(主要针对对象类型的数组,除String等以外的)
第一点:String是引用数据类型,但是String数组存在null的初值,不需要每一个new一下。不存在会为null值(String[] s = new String[10],没有赋值之前全部为null)。
第二点:Object超类除外
point类型的数组java_Java基础学习之引用类型数组访问NullPoint问题相关推荐
- Java中大数据数组,Java基础学习笔记之数组详解
摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...
- python向量计算库教程_python中numpy基础学习及进行数组和矢量计算
前言 在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率,类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下 ...
- el表达式 java_java基础学习:JavaWeb之EL表达式
其他更多java基础文章: java基础学习(目录) 一.EL表达式 EL 全名为Expression Language.JSP中可以使用EL表达式,EL表达式是用"${}"括起来 ...
- Java基础学习笔记 -- 9(数组)
1. 数组 程序 = 算法 + 数据结构: 前面学过的if...else....switch....while循环.for循环等都是解决流程问题,即算法方面的问题. 数据结构:就是把数据按照特定的某种 ...
- php数组分开_PHP学习之五:数组(三)合并、拆分、接合和分解数组
一.合并.拆分.接合和分解数组 1.合并数组 array_merge() 函数将数组合并在一起,返回一个新数组. $a = array("a","b",&quo ...
- 合并两个无序数组java_Java 合并两个排序数组
题目:将两个排序好的数组组成一个新的排序好的数组,给出A=[1,2,3,4],B=[2,4,5,6],返回[1,2,2,3,4,4,5,6] 挑战 你能否优化你的算法,如果其中一个数组很大而另一个数组 ...
- Supplier JAVA_Java基础学习之函数式编程Supplier接口(JDK8)
前言 今天带大家领略一下Supplier接口大道至简的魅力. 1.源码 @FunctionalInterface public interface Supplier { /*** Gets a res ...
- c语言变量类型int,C语言基础学习基本数据类型-int类型与int变量
C++学习笔记26:泛型编程概念 一.什么是泛型编程? 泛型就是通用的型式 编写不依赖数据对象型式的代码就是泛型编程 二.为什么需要泛型编程? 函数重载,相似类定义与型式兼容性 例如:设计函数,求两个 ...
- java基础题数组_java基础学习——数组笔试题
1.求2到1000的质数,且每输出十个进行换行? 2.使用两种方式,使数组的初始化为4. 3.查询书组中的最小值,并将书组扩容为新的数组. 答案: 1.代码块:package Test; public ...
最新文章
- Nginx 解决WebApi跨域二次请求以及Vue单页面问题
- redux 和 react-redux 部分源码阅读
- 2019.2.14 t3 车辆销售
- 大四中软实习笔记20130226
- 数码管和573锁存器的细节问题
- 登陆xp系统,无法显示桌面
- python进阶之装饰器之3如何利用装饰器强制函数上的类型检查
- linux Swap交换分区概念
- Lucene-01 全文检索基本介绍
- python入门难?几个练习实例 全会就入门了
- 如何合理命名你的代码
- TensorFlow-JS教程 一、Node.js 设置
- 可用于神经网络的一些matlab函数
- CoreData 增删改查
- Unity for Windows: III–Publishing your unity game to Windows Phone Store
- LINUX获得线程号、设置线程名
- 为猿七年有余,痒否?痛否?
- 每日一词20190313——地图矢量化
- 如何写软件设计文档[转]
- 使用Python编写一个QQ聊天机器人