JAVA笔记

1.static关键字不能应用于局部变量。
2.由于局部变量使用的是栈内存,由于某些原因(主要是效率)虚拟机不能为栈上的变量设置默认值,所以局部变量需要显式赋初始值。
3.数组
   * 刚构造的数组中的元素总是设为默认值
   * 一个数组的大小将在数组使用new 关键字真正创建时被给定
   * 相对于用循环来拷贝数组,System.arrayCopy()执行效率更高,这是因为它是一个原生(native)函数,可以直接高效地将 ”源array” 的数据复制到 ”目标array”。

4.final
  * 使用条件
     a:编译期常量(基本数据类型,声明时被初始化)
     b:运行期被初始化,以后又不想被改变。
  * 声明为 final 的成员变量必须在构造对象的过程中完成初始化:
     1)其定义处,也就是说在final变量定义时直接给其赋值;
     2)或者是在初始化块中;
     3)或者是在构造函数中;
     4)这三个地方必须(且只能)选其一
     5)在以后的引用中只能读取,不能修改。
  * 声明为 final 的静态变量不必在构造函数中初始化,但必须(且只能)在静态上下文中初始化一次(定义时、静态区段均可)。
  * 声明为 final 的局部变量必须(且只能)在使用前初始化一次,不使用的话可不必初始化。

5.构造器调用
  * 调用基类构造器
  * 按声明顺序初始化各个成员变量
  * 调用导出类的构造器

6.在一个类Parent中定义一个内部静态类InnerClass,如果InnerClass没有被使用就不会被加载。
7.短路效应只针对&&和||不针对位运算符&和|
8.null 对象不是任何类的实例,所有instanceof运算符返回值总是false
9.对于参数传递,如果是简单数据类型,那么它传递的是值拷贝,对于类的实例它传递的是类的引用。
10.* 对于对象,“==”运算的语义是用来判断对象是不是同一个对象
   * equals() 函数用来判断对象的内容(或者是属性)是否相同
   * equals()函数不能用于比较数组是否相同,对两个数组用equals()函数比较等同于”==”比较。
11.使用synchronized进行并发控制对于多线程环境下共享数据的安全致关重要,但当线程需要同时持有多个锁时可能产生死锁问题,同时获取和释放锁的任务给处理器添加了更多的工作量,因而减慢了执行速度。

你可能感兴趣的:(java,多线程,虚拟机,工作)