关于java标识符的规则及几点思考


        我们都知道Java标识符由数字,字母和下划线(_),美元符号($),Unicode字符(并不是说Unicode的每一个字符都可以)组成.在Java中是区分大小写的,而且还要求首位不能是数字.而且,Java标识符不可以是java中的关键字(class等),保留字(goto const)及字面常量(null false true).



  • 数字为何不可以作为开头? 

             好多人回答说:java规则如此.  其实不然,任何规则的制定都是有其原因的,java规则也不例外.

             假如可以以数字开头,那么以下代码:

           int 5=78;
           double 56=89;
              又该如何让编译器情以何堪?


  •    "$"标识符       

                 虽然$可以作为标识符,但一般最好避免使用.这是因为$字符会被编译器用作顶层类型与嵌套类型的连接标志.例如:java的内部类,如果使用$在某些十分凑巧的情况下出现编译错误,代码如下:

                        

                         package qq;
                                public class A$B{
	                                    public vid main(String args[]){
                                                       A a=new A();
                                                       A.B b=a.new B;
                                                            }
                                               }
                                   class A {
                                               class B{
			
		                                   }
                                           }	
编译器提示:类重复错误.



  •         标识符中的Unicode字符       

                      Unicode字符集取值范围0x0000~0x10ffff,但不是每个值都有一个字符,所以不是每个都可以作为java标识符或首字符.



  •  标识符合法性的判断

              Character类中有两个静态函数来判断标识符的合法性:

                  public void boolean isJavaIdentifierStart(char ch)

                  public void boolean isJavaIdentifierStart(int codePoint)

                  public void boolean isJavaIdentifierPart(char ch) 

                  public void boolean isJavaIdentifierPart(int codePoint)      

            其中    public void boolean isJavaIdentifierStart() 是判断对应的字符是否可以作为java的首字符的函数,

                           public void boolean isJavaIdentifierPart() 是判断对应的字符是否可以作为java的首字符或后续字符的函数.

                可以通过以上函数来验证Unicode字符集中可以作为标志符和首字符的个数,会发现可以作为标志符的有102903个,其中可以作为首字符的只有100801个.相差2102个不可以作为标志符首字符的,而非只有0-9不  可以作为首字符.


  •  标识符的最大长度

             java规范中标识符的长度是任意的,但在实际中是不可能的,java虚拟机规范中是有长度限制的,在class文件中,代表标识符的常量字符串存储在CONSTANT_Utf8_info表中其中的无符号型length(用两个字节定义)项表示其长度,所以最大长度为65535,但这个长度仅限与除null之外的ASCII字符(\u0001  ~\u007f),如果标识符含有这个范围以外的字符,最大长度将会减少.











































































               

                   


             


                       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值