变量
/**
* java 语言规范 基于 java 8
* @变量
* 一个变量就是一个存储位置,并且具有相关的类型——变量的编译时类型——简单类型或者引用类型
* 变量的赋值可以通过赋值号和前缀和后缀递增或递减方式完成。
* 变量的类型兼容是通过编译时决定,但是数组的元素类型检查是通过在运行时决定
*
* @简单类型的变量总是持有简单值——其类型与简单类型精确匹配
* @引用类型
* 类类型的变量可以持有空引用,或是任意子类的实例引用
* 接口类型的变量可以持有空引用,或者是对实现该接口的任意类的实例的引用
* --
* 参数化类型的变量有可能会引用不是该参数化类型的对象,这被称为堆污染。
* @堆污染
* List l = new List<String>();
* List<Object> u = l; // warning uncheck
*/
变量种类
/** @变量的种类
* @类变量
* 类中使用static 标记,在接口中无论是否使用static标记-接口都是static final的
* 类变量是类或接口在准备阶段创建的。并且被初始化为缺省值。类变量在类或接口被卸载的时候被有效的终止生命周期。
*
* @实例变量
* 在类中没有被声明为关键字 static的域
* 在创建类实例的时候被创建,初始化为缺省值,作为实例的一部分。
* 当包含域操作的实例对象不在被引用的时候,该对象的所有终止操作都完成之后,该域的生命周期终止。
*
* @数组成员
* 是不具名变量。在新的数组对象被创建时,它们被创建初始化后赋值为缺省
* 数组成员在数组不在被引用时,即被有效的终止生命周期。
*
* @方法参数
* 它们对传递给方法的引元值进行命名。
* 在每次方法声明中声明的每个参数,在每次调用时都会创建新的参数变量。
* 新的方法变量别初始化为方法调用的引援值。
* 方法体执行完毕后变量的生命周期被终止。
*
* @构造器参数
* 它们对传递给构造器的引元值进行命名。
* 对于在构造器中声明的每一个参数,在类实例表达式创建或显示的构造器调用中对构造器的每次调用都会创建新的变量。
* 新的变量被创建为表达式或构造器调用中相应的引元值。
* 当构造器执行完毕后,生命周期终止。
*
* @lambda参数
* 它们对传递给lambda表达式体的引元值进行命名
*
* @异常参数
* 每当异常try中的语句被catch语句捕捉到都会创建一个异常参数
* 新变量会用与异常相关量的实际对象进行初始化,异常参数在catch语句执行完毕后生命周期终止。
*
* @局部变量
* 它们是由局部变量声明语句声明的。
* 当控制流进入一个块或者for语句中,就会立即为这个块或for语句中包含的局部变量声明语句中所声明的每个局部变量创建新变量
* 局部变量的声明可以包含初始化变量的表达式。
* 带有初始化表达式的局部变量只有在声明它的局部变量声明语句被执行时,才会被初始化。
* 明确赋值规则
* 可以防止局部变量被初始化之前被使用,只有在赋值之后的局部变量才能被使用。
*
* 当控制块或for执行完毕后生命周期终止。
*/
Final变量
/** @final变量
* 变量可以被生命为final,并且只能被赋值一次。如果对final变量赋值,那么除非在赋值之前该变量是明确未赋值的,否则就是一种编译时错误
* 如果被赋值,那就只能是一个值,如果是引用对象,那么该对象的状态可以被对象上的操作修改,但是该变量会时钟会指向该对象。
* 数组也是相同,数组元素可以被数组上的操作修改,但是该变量会始终指向这个数组。
*
* 三种变量隐式声明为final
* 接口中的变量
* 带资源的try中的语句
* 多重catch语句的异常参数
* 单catch中的语句参数永远不会隐式的声明为final,但是效果是等同于final
*
*/
变量初始化
/**
* @变量的初始值
* 基本类型都是0,boolean=false,char='\u0000',引用类型都是null
* 方法调用者都是 初始化为方法调用者提供的相应的引元值
* 每个构造参数都被初始化为类实例创建表达式或显示构造器调用中提供的引元值
* 异常参数 被抛出的对象的引用
* 局部变量 使用前必须通过显示的进行初始化 或赋值操作
*
*/
类型,类,接口
/**
* @类型,类,接口
* 在java中,每个变量和表达式都有一个在编译时可以确定的类型。
* 可以是简单类型或者引用类型。
* 引用类型中的类类型和接口类型,引用类型可以通过类型声明引入,包括类声明和接口声明
*
* 在jvm中,每个对象都属于某个特定的类——在产生对象的创建表达式中出现的类
* 或者其Class对象被用来调用反射方法以产生的对象的类
* 或者通过字符串连接符+隐式创建的String
* 这个类被称为该对象的类,而对象则被当做该类的实例,以及所有超类的实例
*
* 每个数组也有一个类
* 当数组对象调用getClass该方法返回一个标识数组类的Class类对象
*
* 变量的编译时类型总是声明时类型
* 而表达式编译时类型可以在编译期间进行推断得出。
* 编译时类型会对变量在运行时可以持有的值和表达式在运行时可以产生的值进行限定。
* 如果运行时的值不是为null的引用,那么将指向一个属于某类的对象或数组,并且这个类的类型必须和编译时的类型兼容
*
* 尽管变量或表达式的编译时类型可以是接口类型,但是接口是没有任何实例的。类型是接口类型的变量或表达式可以引用任何实现该接口的对象
*/