1.java变量类型

java变量类型分:基本数据类型变量和Object数据类型变量,变量也是占用者内存的 例如:

int i = 3; i这个变量保存的就是整形3, 占32位

Object a = new Object(); a这个变量保存着一个指向堆中对象的引用(指针), a占用的内存是一个int型32位

我们都知道JVM内存分很多快,不同变量保存在内存中的位置也不同:

静态变量:保存在方法区

成员变量:保存在堆的对象中

局部变量:保存在栈中

2.类加载与静态变量初始化

类加载分:加载 - 验证 - 准备 - 解析 - 初始化, 其中涉及到静态变量初始化的有准备和初始化阶段

准备:位静态变量分配内存,并初始化,对final static变化和static初始化又不同

对static变量, 只是赋其变量类型的默认值, 如:Object类型变量就是null, int类型变量就是0, boolean类型变量就是false

而对final static类型变量则是直接进行初始化, 创建引用的实例并给变量赋值.

这样做的原因是因为:final变量是不可变的, 如果像非final静态变量那样, 在准备阶段只是给他赋default值, 她将一直是null/0/false, 这显然是不可行的.

3.初始化的时机和步骤

步骤:

  1>如果类还没加载和连接, 那么先加载和连接

2>如果父类还没有初始化, 先初始化父类

  3>执行静态代码块中代码

时机:

  1>new 实例时

  2>子类初始化

  3>访问静态变量或调用静态方法(非final static)

  4>class.forname("xx")加载类

  5>作为启动类时

被动引用不会引发类初始化:

  1>通过子类访问父类静态方法和变量, 不会造成子类的初始化

  2>实例化类对象的数组不会造成类初始化, A[] as = new A[2] A不会初始化

  3>引用常量不会造成类初始化, final static String CONSTACT常量在准备阶段已经初始化了, 进入了常量池后A.CONSTACT实际上直接指向常量池, 而不是方法区的class

  4>使用静态内部类不会造成外部类的初始化

4.String不可变

1>String内部实际上是用一个private final char[] value;保存内容的, 一但String实例被创建value这个final变量的引用就不能被修改,

2>同时String没有提供获得这个char[]的方法, 所以也不能通过获得数组引用来修改数组内容(不用反射的话)

而StringBuilder内部是一个普通的char[] 自然可以随意改变.

5.泛型使用

1>普通类泛型声明:
public Bean<T> {

}
静态方法泛型声明:
public static <T> T get(){

}
2>编译时泛型擦除: T只在编译期有警告,在JVM中都是Object
T obj = (T) t; 实际上是 Object obj = (Object) t;
3>通配符与继承:
泛型没有继承关系B<Object>不是B<String>的父类
B<?> 匹配所有类
B<? extends Number> 匹配所有Number的子类
B<? super Number> 匹配所有Number的父类
4>*只有泛型集合,没有泛型数组(T[] ts 这种是不存在的)

6.内部类

内部类是一个编译时概念,一但编译成功就会成功两个完全不同的类out.class out$in.class
1.成员内部类:
成员内部类不能有static方法和变量
成员内部类要先创建外部类对象才能创建对象
Out out = new Out();
Out.In in = out.new In();
2.局部内部类
和成员内部类相似,只是作用域在方法内,不能被外部引用,但能访问方法final参数
3.静态内部类
使用和普通类一样,只是代码写在了外部类里边,对静态内部类的操作不会造成外部类的初始化
Out.In in = new Out.In();

类加载, 静态变量初始化, String不可变, 泛型使用, 内部类的更多相关文章

  1. 关于C#静态变量初始化问题

    关于这个静态变量,平时自己没有太认真的去认识.最近调项目的bug,让我重新认识了静态变量的特点. 其实,我们一直都在说:静态变量只在类第一次初始化的时候进行初始化,以后都不初始化. 很简单的一句话,但 ...

  2. C++全局和静态变量初始化

    转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的 ...

  3. java非静态变量初始化

    java费静态变量的初始化分为两种情况,一种是局部变量,一种是类的域. 对于类的域,java在类初始化时,会为变量赋一个初始值.对于基本数据类型,java会将初始值设置为二进制0,具体为将boolea ...

  4. java 静态变量初始化

    java 静态变量在编译阶段就已经明确位置, 所以静态变量的声明与初始化在编码顺序上可以颠倒.也就是说可以先编写初始化的代码,再编写声明代码.如: public class Test { // 静态变 ...

  5. Java静态方法,静态变量,初始化顺序

    1. 静态方法: 成员变量分为实例变量和静态变量.其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量.而静态变量被该类所有的对象公有(相当于全局变量),不需要实 ...

  6. Java的静态变量初始化的坑

    在网上看到一个很有意思的题目,题目如下 class SingleTon { private static SingleTon singleTon = new SingleTon(); public s ...

  7. Java静态变量初始化的坑

    class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; pu ...

  8. 转:Java的一道面试题----静态变量初始化过程

    public class Test{ private static Test tester = new Test(); //step 1 private static int count1; //st ...

  9. java子父类初始化顺序 (1)父类静态代码块(2)父类静态变量初始化(3)子类静态代码块(4)子类静态变量初始化(5)main(6)有对象开辟空间都为0(7)父类显示初始化(8)父类构造(9)子类显示初始化(10)子类构造

    标题 静态代码块与静态成员变量还要看代码的先后顺序 看程序,说出结果 结果为: x=0 看程序,说出结果 结果如下: 补充 : 静态代码块:static{ } 在JVM加载时即执行,先于主方法执行,用 ...

随机推荐

  1. Expo大作战(十六)--expo结合firebase 一个nosql数据库(本章令我惊讶但又失望!)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. 前端需要掌握的后台基础:HTTP协议

    什么是HTTP? 以下来自度娘最为专业的解释: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标 ...

  3. [钉钉通知系列]SVN提交后自动推送消息到钉钉群

    钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...

  4. Gson解析复杂JSON字符串的两种方式

    JSON解析可以使用的库: JSONObject(源自Android官方). Gson(源自Google). Jackson(第三方开源库). FastJSON(第三方开源库). 本文例子使用Goog ...

  5. 测试笔试单选题(持续更新ing)

    1.在GB/T17544中,软件包质量要求包括三部分,即产品描述要求._____.程 序和数据要求.( A ) A.用户文档要求 B.系统功能要求 C.设计要求说明 D.软件配置要求 2.软件的六大质 ...

  6. python爬虫_入门_翻页

    写出来的爬虫,肯定不能只在一个页面爬,只要要爬几个页面,甚至一个网站,这时候就需要用到翻页了 其实翻页很简单,还是这个页面http://bbs.fengniao.com/forum/10384633. ...

  7. MFC 常用功能总结

    目录 ◆ 获取启动参数◆ 调整窗体大小◆ 关闭Dialog窗体◆ Dialog启动时指定控件为焦点◆ Dialog中禁止ESC回车关闭窗体◆ 回车后焦点自动跳到下一个控件◆ 窗体中某个控件捕获右键菜单 ...

  8. Alpha- 事后诸葛亮(麻瓜制造者)

    目录 预期计划 现实进展 团队体会 成员分工及工作量比例 会议总结 预期计划 在Alpha阶段开始之前,我们的预期计划是:从用户登录,发布商品.发布求购信息的基本功能开始做起.用户登录使用输入教务处的 ...

  9. Markdown基本语法规范

    1. 标题 #的个数即表示Hn, 一下依次从h1~h6.  也可在句尾添加同样个数的#(也可忽略) # This is H1 ## This is H2 ### This is H3 #### Thi ...

  10. os.path.md

    os.path 我们可以利用os.path模块提供的函数更容易地在跨平台上处理文件. 即使我们的程序不是用于夸平台, 也应该使用os.path来让路径名字更加可靠. Parsing Paths os. ...