/*
 1.关键字(keyword)和保留字
 *所有关键字都是小写的;
 *保留字:现有的Java版本尚未使用,但是以后的版本可能会用:goto,const。
 
 2.标识符--identifier
 *凡是可以自己起名字的地方都叫标识符。类名,变量名,方法名,接口名,包名...
 *命名规则:*由26位英文字母大小写,0-9,_或$组成。
             *数字不能开头;不可使用保留字和关键字;
             *无长度限制,不能包含空格
 *如果不遵守命名规则,编译不通过
 
 命名规范:
     >包名:所有字母都小写
     >类名、接口名:多单词组成时首字母大写
     >变量名、方法名:多单词组成时,第一个单词首字母小写,第二个开始大写
     >常量名:所有字母都大写,单词间用_链接,如XXX_YYY
 最后,命名时,要“见名知意”
 
 3.变量
 *变量类型 变量名=变量存储的值
 
 *基本数据类型* 整数数值型 byte short int long 
             1byte=8bit(-128~127); 1short=2byte; 1int=4byte(约21亿); 1long=8byte;
             
             * 浮点数型 float double 
             float=4byte; double=8byte;
             浮点型表示数据范围远大于整数型;但是精度有限,float精确到小数点后7位,double精度是float的两倍。
             
             * 字符型 char
             1char=2byte;
             
             *布尔型 boolean
             只能取true或false;
             
             
 *引用数据类型:*类class  (字符串在这)
                *接口interface
                *数组[]
 
 
 >变量必须声明并初始化后才能使用;
 >变量都定义在其作用域内,变量只在作用域内有效;
 >变量不可在同一个作用域内反复定义,但是可以反复赋值;
 
 4.运算符
 5.程序流程控制
 */
// int 学号 = 1002 编译通过,因为java用的是Unicode编码,但是不建议使用

/*
数字开头
class 1Hello_${
    
}
*/

/*
关键字做变量名
class static {
    
}
*/
class IdentifierTest{
    public static void main(String[] agrs) {
        int myNumber = 1001;
        int myAge = 12;
        System.out.println(myNumber);
        System.out.println(myAge);
        //System.out.println(myClass);变量myClass作用域在method类里
        
        //整型变量
        byte b1=12;
        //byte b2=128;超过范围
        System.out.println(b1);
        short s1=128;
        //定义整型变量常用int
        int i1=1234;
        long l1=12341234L; //定义long型变量,必须以l或L结尾。
        
        //浮点型变量
        float f1=12.3f;//定义float变量时,要以f或F结尾;
        double d1=123.4;//通常定义浮点型变量时,使用double,因为他范围更大,精度更高
        
        //字符类型
        char c1='a';//定义char变量通常使用一对单引号'',且引号内只能有一个字符;
        char c2='\n';//换行符
        char c3='\t';//制表符
        System.out.println(s1+c2);
        System.out.println(i1+c3);
        System.out.println(l1+f1+d1+c1);
        
        //布尔类型,多用于判断语句
        boolean isMarried=true;
        if(isMarried) {
            System.out.println("你不能参加'单身'party了");
        }
        else {
            System.out.println("你应该多谈朋友");
        }
        
        //基本数据类型直接的运算(不包含布尔型)
        //1.自动类型提升:容量小的与容量大的变量做运算,自动往容量大的类型转换
        //****byte、short、char->int->long->float->double****
        byte b=2;
        int i=12;
        float f=234;
        char c='a';//97
        short s=12;
        System.out.println(b+i);
        System.out.println(f+i);//输出246.0
        //************特别的,当byte、char、short运算时,结果变成int***********
        System.out.println(c+s);//输出109,变成int类型
        System.out.println(c+b);//输出97+2=99,变成int型
        //******************************************************************
        
        //2.强制类型转换
        double d=100.3;
        int ii=(int)d;//强制类型转换例子
        char b2=(char)ii;
        System.out.println(ii);
        System.out.println(b2);//输出d(97为a)
        
        //*************************特例1
        long l=123231;//结尾没加l,编译通过,默认123232为int型,再自动类型转换成long.
        System.out.println(l);
        //long ll=123475624589890;结尾没加l,编译不通过,因为这个数超过了Int的范围.
        
        //*************************特例2
        byte b=12;
        //byte b1=b+1;编译失败,因为整型常量1默认为int类型,int型不能自动转换成byte型。
        
    }
    public void method() {
        int myClass=1;
        System.out.println(myClass);
    }
}