Java合法标识符规范
(1)标识符必须以字母,货币符号($)或连字符(如下划线)开头。标识符不能以数字开头
(2)第一个字符之后,标识符可包含字符,货币符号,连字符或数字的任意组合
(3)在实际使用中,对标识符可以包含的字符数没有限制
(4)不能将Java关键字作为标识符
(5)Java中的标识符是大小写敏感的,foo和FOO是两个不同的标识符
源文件声明规则
* 每个源文件只能有一个public类
* 如果文件中有一个public类,那么文件名必须与public 类的名称匹配
*一个文件可以有多个非公共类
* 不包含公共类的文件可以具有与该文件中的任何类都不匹配的名称。
抽象类和接口相关
* 即使只有一个抽象方法是抽象的,整个类也必须声明为abstract
* 所有接口方法都隐含是公共的和抽象的
*所有接口中定义的变量必须是公共的,静态的和最终的,也就是说接口中只能声明常量,不能声明实例变量。
* 接口方法一定不能是静态的
* 因为接口方法是抽象的,所以不能将其标识为 fianl,strictfp 或 native
* 接口可以扩张一个或多个接口
* 接口不能扩展出了其他接口之外的任何内容
* 一个接口不能实现另一个接口或类
* 必须使用关键字interface 声明接口
* 接口类型能够被多态地使用
继承相关
* 包外子类只能通过“继承”访问protected成员,不能通过超类的引用访问protected成员
* 不能将访问修饰符放在局部变量前,除final 之外。
* 抽象类的第一个具体子类必须实现超类的所有抽象方法
* 抽象类中的抽象方法必须在非抽象子类中被实现,但是抽象子类也可以实现超类的抽象方法
构造方法,实例变量,局部变量相关
* 构造方法不能有返回类型
* 构造方法不能标识为static 也不能标识为abstract 和 final
* 在使用局部变量时。必须初始化。
* 不能再声明局部变量方法之外的任何代码中引用该局部变量
数组相关
* 声明数组引用时,应该总是将方括号紧接在声明的类型之后,而不是在标识符之后。
* 在声明中包含数组的大小永远是不合法的。 如 int [5] scores ; 不能通过编译,只用在真正实例化数组对象时,JVM才会分配空间。这是才涉及数组大小问题。
枚举相关
* 不能在方法内声明enum
类修饰符
* 有3个访问修饰符public private protected
* 有4个访问级别:public ,protected 默认 和private
* 类只有public 或默认 访问级别
* 类也能被修饰成final abstract 或 strictfp
* 类不能同时被修饰成final 和 abstract
* 最终类不能被子类化
* 抽象类不能被实例化
* 类中的单个抽象方法意味这整个类必须是抽象的
* 抽象类可以有抽象方法和非抽象方法
* 扩张抽象类的第一个具体类必须实现所有的抽象方法
接口相关
* 接口类是能够做什么的契约,但是他们没有指定类操作的实现方式
* 接口能够被来自任何继承数的任何类实现
* 接口就像一个100% 抽象类,无论是否在其中键入abstract 修饰符,它都隐含是抽象的
* 接口只能有抽象方法,不允许有具体方法
* 接口方面默认是公共的,抽象的,这些修饰符的显示声明是可选的
* 接口可以有常量,他们隐含是公共的,静态的,最终的
* 公共的,静态的和最终的接口常量声明可以选择任意组合
* 合法的非抽象实现类具有如下属性
他为接口的所有方法提供具体实现
对于它实现的方法,必须遵守所有的合法重写规则
它一定不能为实现的方法声明任何新的检验异常
它一定不能声明比该接口方法中所声明的异常更宽泛的任何检验异常
无论接口声明如何,它都可以在任何接口方法实现上声明运行时异常
它必须包含于它所实现方法完全相同的方法签名和返回类型(但不必声明该接口的异常)
* 实现接口的类本身可以是抽象的
* 抽象实现类不必实现接口方法(但是第一个具体子类必须实现)
* 接口可以扩展一个或多个其他接口
* 接口不能扩展类,或者实现类或接口
* 当参加考试时,请在验证其他代码逻辑之前检查接口和类声明的合法性
局部变量
* 局部变量声明不能有访问修饰符
* final 是唯一可用于局部变量的修饰符
* 局部变量没有默认值,使用前必须初始化
其他
* synchronized 修饰符只能应用于方法和方法快
* synchronized 方法能够具有任何访问控制,也能够标识为final
* native 只能用于方法
* strictfp 只能应用于类和方法
* 实例变量不能标识为abstract synchronized native 或 strictfp
* 声明与实例变量同名的局部变量是合法的,这称为“隐藏”
* transient 修饰符只能用于实例变量
* volatile 修饰符只能应用于实例变量
* 在声明中包含数组大小永远是不合法的
综合注意事项
* 即使有个一个方法是abstract ,该类也必须标识为abstract
* 抽象类的具体子类必须提供其超类的所有抽象方法的实现