Java连载66-数组的两种初始化方式
一、数组
1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就可以快速计算出要查找元素的内存地址。通过内存地址快速定位该元素,所以数组查找元素的效率较高。
2.随机的对数组进行增删元素,当增加元素的时候,为了保证数组中元素在空间存储上是有序的,所以被添加元素位置后面的所有元素都要向后移动,删除元素也是,后面所有的元素要向前移动,所以数组的增删元素效率很低。
3.初始化一维数组,有两种方式:
(1)静态初始化;(2)动态初始化。
package com.bjpowernode.java_learning;
public class D66_1_ {
public static void main(String[] args) {
//静态初始化一个int类型的一维数组
int[] a1 = {10,22,21};
//取得第一个元素
System.out.println("第一个元素:" + a1[0]);
System.out.println("最后一个元素:" + a1[2]);
System.out.println("最后一个元素:" + a1[a1.length-1]);
//去的个数
System.out.println("数组中的的元素个数为:"+a1.length);
//遍历一维数组
for(int i = 0;i<a1.length;i++) {
System.out.println(a1[i]);
}
//将第二个元素改为100
a1[1] = 100;
System.out.println("===================");
for(int i= 0;i<a1.length;i++) {
System.out.println(a1[i]);
}
}
}

上面是使用静态初始化一维数组,下面演示动态初始化一维数组
int[] a2 = new int[4];
//引用类型的数组
Object[] objs = new Object[3];
for(int index=0;index<objs.length;index++) {
Object o = objs[index];
//o.toString();//注意空指针异常
System.out.println(o);//null null null这里就没有出现空指针异常,这是因为pirintln
//这个函数的源码里面对这种空指针做了筛选,可以见源码

下面看一下println的源码是如何处理这种空指针异常的


二、什么时候使用动态初始化,什么时候使用静态初始化
1.无论是动态初始化还是静态初始化,最终的内存分布都是一样的。
2.如果在创建数组的时候,知道数组中应该存储什么数据,这个时候当然采用静态初始化方式。如果在创建数组的时候,无法预测到数组中存储什么数据,只是先开辟空间,则使用动态初始化方式。
以下两种初始化方式都是可以的
int a3[] = {12,12,45};
int [] a3 = {12,12,45};
四、源码:
D66_ArryInitialMethods.java
https://github.com/ruigege66/Java/blob/master/D66_ArryInitialMethods.java2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载66-数组的两种初始化方式的更多相关文章
- JAVA学习笔记-数组的三种初始化方式
package Study; public class TestArray02 { public static void main(String[] args){//声明 int[] a; int ...
- Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】
[]如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...
- Java中容器的两种初始化方式比较
List,Set,Map的两种初始化赋值方式 List List<Integer> list2 = new ArrayList<Integer>(); for (int i= ...
- Java中匿名类的两种实现方式(转)
使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...
- 【转载】 Java中String类型的两种创建方式
本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...
- 自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用
闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分 ...
- Java里数组的三种初始化方式
静态初始化 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值. // 静态初始化 int[] iStaticArr = { 5, 2, 0 }; LOLHero[ ...
- java框架篇---spring aop两种配置方式
第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...
- 关于Java中excel表格导出的总结(Java程序导出模板和Java根据模板导出表格两种实现方式)
导出excel通用模板(程序定义模板导出) 转载原文:https://www.jianshu.com/p/5c7b359a159c 如下代码,本方法主要用于程序定义模板格式,并导出文件.该方法将定义和 ...
随机推荐
- tmux的基本使用
tmux的基本使用 tmux 最近发现了一个linux终端非常好用的工具,可以快速分屏 使用方法 参考
- Linux - Shell - date
概述 date 命令 准备 OS CentOS 7.6 基本功能 显示时间 格式化时间 翻译时间 转换时间格式 切换时区 设置时间 查看文件最后使用时间 1. 显示时间 概述 基本功能 命令 # 内容 ...
- Python - Git for windows 下使用 交互式命令行
1. 概述 尝试在 windows 环境的 git 命令行使用 python3 的交互模式 2. 环境 OS win10 1905 git 2.20.1 mintty 2.9.4 python 3.7 ...
- 每天进步一点点------Altium Designer集成库简介及创建
一.集成库概述 Altium Designer 采用了集成库的概念.在集成库中的元件不仅具有原理图中代表元件的符号,还集成了相应的功能模块.如Foot Print 封装,电路仿真模块,信号完整性 ...
- 粪发涂墙-java1
相信很多人和笔者一样,经常会做一些数组的初始化工作,也肯定会经常用到集合类.假如我现在要初始化一个String类型的数组,可以很方便的使用如下代码: String [] strs = {"T ...
- php 基础 二维数组以某个重复值累加
$arr = array( array('id' => 123, 'name' => '张三', 'amount'=>'1'), array('id' => 123, 'nam ...
- 获取浏览器url参数
//获取浏览器url参数 var methods ={ getQueryString: function (name) { var reg = new RegExp('(^|&)' + nam ...
- STM32 MDK C 常见易错点
1.MDK编译器单字节的负数-1,-2,-3... ... 处理:存储,类型转换,位对齐. char 定义的变量在运算过程尤其类型转换,逻辑比大少会被当做 unsigned char 处理,这里很容易 ...
- 关于anaconda-navigator打不开的问题
19-10版本的anaconda-navigator打不开,没有图形化界面就是很糟糕 在命令行执行各种命令都没有问题,说明anaconda并没有出现大的问题,可能只是图形化界面出了问题. 执行 ana ...
- html5异步单图片多图片上传两种实现方式 后台.net mvc接收
Asp.net mvc上传多张图片后台存储 前台页面通过<file name="img">标签数组上传图片,后台根据Request.Files["img&qu ...