突破程序员基本功(16课)

数组

  • 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用)
  • 动态语言: 在程序运行时确定数据类型的语言,变量使用之前不需要声明数据类型

java是静态语言,在使用之前需要声明变量类型。

//声明一个可存放数据类型为String,长度为5的数组
String[] arr = new String[5];

数组的初始化

数组初始化有两种方式

  • 静态初始化: 初始化时,程序员显示指定数组每个元素的初始值,由系统决定数组的长度
//静态初始化,方法一
String[] arr1 = new String[]{
"hello",
"world",
"hello",
"java"
};
//静态初始化方法二
String[] arr2 = {
"xixi",
"haha"
};
  • 动态初始化: 初始化时程序员指定数组长度,由系统为数组分配初始值
//动态初始化方法
String[] arr3 = new String[5];

动态初始化时,系统默认分配初始化值按照如下规则

1. 数组元素类型为基本类型中的整数(byte, short, int, long),默认初始值是0。
2. 数组元素类型为基本类型中的浮点数(float, double)默认初始值是0.0。
3. 数组元素类型为基本数据类型中的字符型(char),默认初始值是'\u0000'。
4. 数组元素类型为引用类型(类,接口,数组),默认初始值是null。

数组初始化一旦完成,就无法改变数组的长度

数组一定需要初始化么?

  • 数组变量不需要初始化
  • 数组变量引用的数组对象需要初始化
public static void main(String[] args) {
String[] buff = new String[]{
"v1",
"v2"
};
//声明数组
String[] movies;
movies = buff;
System.out.println(Arrays.toString(buff));
}

结果:

[v1, v2]

由上可只movies(数组变量并不需要初始化,但是该引用所引用的对象需要初始化)。

基本数据类型的初始化

    public static void main(String[] args) {
int[] iArr; //1 iArr = new int[]{ //2
1,
2
};
}
  1. 第一步声明变量的时候,只是在栈区声明了一个变量iArr,此时改变量还没有指向任何的引用对象。
  2. 第二步的时候,在堆区域开辟了一个连续的内存空间,长度为4,这个时候iArr指向堆区这一连续的内存空间。

Tips: 并不是所有的基础数据类型都存储在栈区,如上此时的"1,2存储在堆区域。更明确的说,所有的局部变量都存储栈内存中(包括基本数据类型变量和引用类型变量)。但引用类型变量所引用的对象总是存储在堆内存里。

引用类型数据类型初始化

class Person {
int age;
String name; public Person() { } public Person(int age, String name) {
this.age = age;
this.name = name;
}
} public class ArrDemo { public static void main(String[] args) {
Person[] students = new Person[2]; //1
System.out.println(students.length); //2
Person amber = new Person(1,"amber");//3
Person nick = new Person(3, "nick"); //4
students[0] = amber; //5
students[1] = nick; //6
System.out.println(amber); //7
System.out.println(students[0]); //8
}
}

未完

疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)的更多相关文章

  1. 《疯狂java-突破程序员基本功的16课 》笔记总结

    本人最近读完<疯狂java-突破程序员基本功的16课 >读完后,感觉对java基础又有了新的认识,在这里总结一下:一.数组与内存控制 1.1 数组初始化     java语言的数组是静态的 ...

  2. 《疯狂Java:突破程序员基本功的16课》读书笔记-第一章 数组与内存控制

    很早以前就听过李刚老师的疯狂java系列很不错,所以最近找一本拿来拜读,再此做下读书笔记,促进更好的消化. 使用Java数组之前必须先对数组对象进行初始化.当数组的所有元素都被分配了合适的内存空间,并 ...

  3. 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制

    Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...

  4. 类变量的初始化时机(摘录自java突破程序员基本功德16课)

    先看书本的一个例子,代码如下: public class Price { final static Price INSTANCE=new Price(2.8); static double initP ...

  5. Java学习笔记(未完待续)

    变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...

  6. Java并发笔记-未完待续待详解

    为什么需要并行? – 业务要求 – 性能 并行计算还出于业务模型的需要 – 并不是为了提高系统性能,而是确实在业务上需要多个执行单元. – 比如HTTP服务器,为每一个Socket连接新建一个处理线程 ...

  7. 致Java星球程序员兄弟们的一封信

    致Java星球程序员兄弟们的一封信 亲爱的Java星球的程序员兄弟们: 你们好!我是来自地球的一名Java程序员,首先我代表地球人对贵星球的高司令来到地球传授Java语言,造福了全人类,造福了整个地球 ...

  8. [刘阳Java]_Java程序员的成长路线_第3讲

    按照Java从业人员的职位晋升来说,Java程序成长路线大致如下 Java程序员 JavaEE初级软件工程师 JavaEE中级软件工程师 JavaEE高级软件工程师 Java架构师 按照职业发展方向, ...

  9. 【转】成为Java顶尖程序员 ,看这11本书就够了

    成为Java顶尖程序员 ,看这11本书就够了 转自:http://developer.51cto.com/art/201512/503095.htm 以下是我推荐给Java开发者们的一些值得一看的好书 ...

随机推荐

  1. .net 和 java 技术对应关系

    .net 和 java 技术对应关系 java 生态的优势早已人尽皆知,asp.net core 的生态也呈欣欣向荣之势.作为高级技术从业人,你不应该落下任何一门技术. 如果你正在将你的 java 知 ...

  2. 生物医学命名实体识别(BioNER)研究进展

    生物医学命名实体识别(BioNER)研究进展 最近把之前整理的一些生物医学命名实体识别(Biomedical Named Entity Recognition, BioNER)相关的论文做了一个Bio ...

  3. 常用的HDFS操作

    首先,把Hadoop命令加入到PATH环境变量中,直接通过start-dfs.sh开启Hadoop,也可以直接通过hdfs命令访问HDFS中的内容,方便平时的操作. 配置PATH环境变量 vim  ~ ...

  4. linux下mysql数据库操作命令

    1:启动服务 service mysqld start (5.0版本是mysqld) service mysql start (5.5.7版本是mysql) 2:停止服务 service mysqld ...

  5. linux常用开发命令总结

    linux常用命令 文件操作命令 1. cd 目录名/目录名  切换目录 cd .. 切换到上一级目录  (change dictionary) Ctrl+C强制退出命令行,回到上一级 2.ls    ...

  6. 完美实现保存和加载easyui datagrid自定义调整列宽位置隐藏属性功能

    需求&场景 例表查询是业务系统中使用最多也是最基础功能,但也是调整最平凡,不同的用户对数据的要求也不一样,所以在系统正式使用后,做为开发恨不得坐在业务边上,根据他们的要求进行调整,需要调整最多 ...

  7. display值的作用分别是什么?relative和absolute分别是相对谁定位的?

    display值的作用分别是什么? none:元素隐藏,不占据位置 block:该元素显示为块级元素 inline:默认,该元素会被显示为内联元素 inline-block:行内块元素 list-it ...

  8. 04-03 scikit-learn库之AdaBoost算法

    目录 scikit-learn库之AdaBoost算法 一.AdaBoostClassifier 1.1 使用场景 1.2 参数 1.3 属性 1.4 方法 二.AdaBoostRegressor 更 ...

  9. LAMP环境部署物联网项目

    今天来在LAMP环境下搭建一个PHP项目,开始之前,先来普及下物联网常识: 物联网,即Internet of Things,简写IOT.让所有能行使独立功能的普通物体实现互联互通的网络,通过物联网可以 ...

  10. wildfly(JBoss AS)应用服务器快速入门

    什么是wildfly JBoss AS 从8版本起名为wildfly.Wildfly是一个开源的基于JavaEE的轻量级应用服务器.可以在任何商业应用中免费使用. WildFly是一个灵活的.轻量的. ...