突破程序员基本功(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. 跟我学SpringCloud | 第二十章:Spring Cloud 之 okhttp

    1. 什么是 okhttp ? okhttp 是由 square 公司开源的一个 http 客户端.在 Java 平台上,Java 标准库提供了 HttpURLConnection 类来支持 HTTP ...

  2. 【linux】【FastDFS】FastDFS数据迁移

    后来同步的时候发现有的没有同步过来,应该是没有同步完成我就停止服务了. 最后尝试直接把fastdfs storage的data文件迁移过去即可. 1.在新的storage server服务器上停止所有 ...

  3. Nginx反向代理之动静分离

    我们已经知道了什么是正向代理与反向代理,这次我们就讲一下Nginx的动静分离的案例,其实质运用的就是反向代理,专门用一台服务器代理服务器上的图片资源. 想使用代理必然要配置代理,配置反向代理,必须要用 ...

  4. [python]python的异常处理

    异常处理:首先了解异常,程序出现逻辑错误或者用户输入不合法都会引发异常,而这些异常并不是致命的所以不会导致程序崩溃死掉.可以利用Python提供的异常处理机制在异常出现时及时捕获,并从内部自我消化. ...

  5. selenium-01-简介

    一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案 ...

  6. Elastic Static初识(01)

    写在前面 Elastic Static 是指由Elasticsearch,Logstash,Kibana,Beats等组件结合起来而构成的一个数据收集,分析,可视化的一个架构.我们经常听说过的ELK就 ...

  7. Oozie、Flume、Mahout配置与应用

    -------------------------Oozie-------------------- [一.部署] 1)部署Oozie服务端 [root@cMaster~]#sudo yum inst ...

  8. 如何使用CSS实现居中

    前言: 这一篇主要是翻译 <how-to-center-anything-with-css>这一篇文章的主要内容,再加上自己的一些概括理解:主要问题是解决垂直居中的问题.我们知道实现水平居 ...

  9. windows下python和pycharm安装及其使用

    1.python安装及环境变量配置 1.1 python安装 1.1.1 python下载 官网下载:https://www.python.org/ Downloads-Windows(Mac os ...

  10. 【bzoj2342】[Shoi2011]双倍回文

    这题属于博主还未填坑系列,先嘴巴AC,到时候有时间再搞字符串时,再来好好填坑. 废话不多说上题: 题解: 显然是和马拉车有关的吧,我们可以先对整个串跑一个马拉车,然后枚举‘#’好字符,并以他为中心,在 ...