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 如下代码,本方法主要用于程序定义模板格式,并导出文件.该方法将定义和 ...
随机推荐
- .h头文件 .lib库文件 .dll动态链接库文件关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...
- Codeforces Round #599 (Div. 2) A. Maximum Square
Ujan decided to make a new wooden roof for the house. He has nn rectangular planks numbered from 11 ...
- InkWell容器 和 官方自带日期组件 和第三方 日期格式转换组件
带点击事件的容器 InkWell( child: Text('时间'), onTap: _showTimePicker,), Flutter 日期和时间戳 日期转化成时间戳: var now = ...
- 银行T0理财怎么选
## 从现金管理说开去 现金是资产配置中的基石,买股票需要花掉现金,吃饭消费也要花掉现金.现金和我们的生活息息相关,需要慎重地管理起来,因此现金管理应运而生. 现金管理需要兼顾 *流动性* 和 *收益 ...
- 关于jsp的action如何调用servlet的自定义方法
一.起因: 希望将同属于某个模块的简单功能整合到一起,不创建太多的servlet 二.问题描述: action或者method属性是否能直接调用自定义方法 三.补充知识点: 查询得知:servelet ...
- Docker容器里配置计划任务 crontab(DaoCloud+Docker +Laravel5)
最近项目涉及到一个定时任务的功能,所以去这几天研究了一下 crontab 的使用方法,按照网上的相关教程顺利在自己的电脑上成功开启了这个功能 Laravel + crontab 添加 crontab ...
- 原生JS实现旋转木马轮播图特效
大概是这个样子: 首先来简单布局一下(emm...随便弄一下吧,反正主要是用js来整的) <!DOCTYPE html> <html lang="en"> ...
- 学习笔记(25)- NLP的几个概念
NLP的几个概念 从技术研究的角度,简单介绍自然语言处理的几个概念 1. 对抗学习 主要指对抗生成网络. 2个主要构成:判别器.生成器 判别模型尽可能提取特征正确率增加的模型,生成模型尽可能" ...
- oracle sys可以登录,system权限不足,解决方法
今天在自己电脑上安装了oracle 11g,安装成功后发现 sys 可以正常登录.system 无法登录,显示 ORA-01031: insufficient privileges(权限不足) sel ...
- php概率
/* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在 ...