Java学习笔记Day02

来源:互联网 发布:织梦cms手机版模板 编辑:程序博客网 时间:2024/05/18 03:04
day02 
一。标识符
1.命名规则:以字母、下划线、美元符$开头(常犯错误:以数字开头);
标识符不能包含除了字母、数字、下划线、美元符$之外的符号;
不能是Java关键字
2.Java采用Unicode国际字符集


二.基本数据类型
1.Java是一种强类型语言,每个变量都必须声明其类型
2.数据类型:基本数据类型(8)(数值型(整数类型(byte,short,int,long),浮点类型(float,double),字符型(char),布尔类型(boolean)),引用数据类型(类(class),接口(interface),数组)
java的整型常数默认为int型,生命long型可以在末尾添加L用以表示,如long space=47744774L。
BigDecimal(Java.math包):对超过16位有效位的数进行精确的运算。
BigInteger:对超过long类型的数据进行精确运算。
(1)整数类型
1.数据范围:byte(1字节):-128~127short(2字节):-32768~32767
int(4字节):约正负21亿long(8字节):约正负2的63次方
2.int a=10(十进制:10); 
  int a0=010(八进制:8); 
  int a1=0x10(十六进制:16);
  Integer.toBinaryString(a): //将十进制10转换为二进制字符串,输出为1010
  Integer.toOctalString(a);//转换为8进制
  Integer.toHexString(a);//转换为16进制
  3.因为整型常数默认为int类型,所以在对byte、short进行赋值操作时,如果所赋值没有超过二者的表示区间,则被自动转化为byte和short类型,如果超出,则丢失精度报错。
 (2)浮点型
  1.float(4字节):-3.403E38~3.403E38 ,float f=0.134F
   double(8字节):-1.798E308~1.798E308,double d=1.0/10
  2.java的浮点数类型常量默认类型是double
   float是单精度类型,double是双精度类型。浮点数存在舍入误差(这也是为什么都是4字节,float却比int表示的数据更多,因为浮点数的存储方式不同于整数类型),很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字进行计算,需要使用BigDecimal类。(最好避免比较中使用浮点数)
 (3)字符类型
  1.char类型用来表示在Unicode编码表中的字符,范围在0~65535之间,运算时直接当作整数进行运算,即可以把0~65535之间的整数直接转型为char。
  如:char c='a';
  int i=c+2;//将a的ASCII值作为整数类型加到i上,最后的输出结果为i=99
  char c1=(char)i;//此处需要做强制转型,因为整数是4字节,char是2字
  2.Java语言中还允许使用转义字符'\',来将其后的字符转换为其它的含义。
   如:char c='\n';//代表换行符
     char c0='\\';//输出\
     char c1='\t';//输出制表符
 (4)布尔类型(一位,不是一个字节)
  1.boolean(true 、false) 
 三。类型转换
  1.自动类型转换 :容量(表示范围)小的数据类型可以自动转换为容量大的数据类型
  (大转小不做处理可以自动转,但是会发生精度丢失;int转换为byte、short、char只要不超过数据表示范围就可以自动转换)
  2.强制类型转换:显式地转换一个数值的类型,在有可能丢失信息的情况下进行的转换是通过强制类型转换来实现的,但是可能造成精度降低或溢出。当一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同、没有任何意义的值,即强制转换需要转换到目标数据类型的表示范围之内。
  3.运算时类型提升问题
  如:int a=3;
  long b=4;
  int c=(int)a+b;//做所有的二元运算都会有类型提升问题,此时的a+b为long型,所以需要强转
  double d=5.3;
  float f=(float)a+d;//double类型需要强制转换为float
  4.基本数据运算时常犯的错误  
  (1).操作比较大的数据时,要留意是否溢出,尤其是证书操作时
  int money =1000000000;//10亿
  int years=20;
  int total=money*years;//返回的是负数


  long total1=money*yars;//返回的仍然是负数。默认是int,因此结果会先得出int值,再转换成long,但是已经发生了数据丢失


  long total2=(long)money*years;//先将一个因子变成long类型,整个表达式发生呢个提升,全部用long来进行计算;
  尽量将(long)放在第一个数据处,以防在处理到进行了转换的数据时前面的运算已经发生了溢出


  (2).L和l的问题

  不要命名名字为l的变量;long类型使用大写L不要用小写

四。二进制数
    如:int a= 0b00000000000000000000000000000011;//二进制表示形式
        输出结果为a=3
      JDK7新加特性:下划线分隔符(便于理解长数字)
      如:int a= 0b0000_0000_0000_0000_0000_0000_0000_0011;   
         int b=123_123_132;

五。变量和常量
    定义变量=声明+初始化
    1.Java是一种强类型语言,每个变量都必须声明其类型
    2.Java变量是程序中最基本的存储单元,其要素包括变量名(必须是合法的标识符),变量类型和作用域。
    3.变量在使用前必须对其进行声明,只有在巴黎声明以后,才能为其分配相应长度的存储单元
    4.每个变量都有类型,类型可以是基本类型,也可以是引用类型
    5.局部变量(local variable):方法或语句块内部定义的变量,在使用前必须先声明和初始化
    6.实例变量(成员变量):方法外部、类的内部定义的变量。如果不自行初始化,Java会自动初始化为该类型的默认初始值(数值类型变量初始化成0或0.0,字符变量的初始化值为16位的0,布尔类型默认是false)。
    7.final常量:只能被初始化一次,且一般都是用大写字母,
    如:final double PI=3.16152;
    final int MAX_SPEED=120;//多个单词为了便于阅读可以加下划线
    8.命名规范(严格遵守,保持良好的编码风格):
    变量、方法名:首字母小写和驼峰原则,如:run(),runRun(),ageShawNew(),ageLeeNew
    常量:大写字母和下划线,如:MAX_VALUE
    类名:首字母大写和驼峰原则,如:GoodMan

六。运算符(Operator) 
  1.算术运算符:二元(注意数据类型提升问题;小数也可以取余)、
   一元:自增(注意先赋值和后赋值的问题,如:int a=3;
   int b=a++;//先把a=3赋值给b,然后a+1,此时b=3,a=4
   int c=++a;//先执行a+1=5,然后把a=5赋值给c)、
       自减原理同自增
   赋值运算符:
   关系运算符:
   逻辑运算符:&&(与)、||(或)、!(非)
     逻辑与和逻辑或采用短路的方式。从左到右依次计算,一旦确定了值,就不会再计算下去。如:boolean a=1>2&&2>(3/0); &&不会抛出异常,因为不会执行后半部分
   位运算符:~(取反),&(按位与),|(按位或),^(按位异或),<<(左移),>>(右移)
    右移一位相当于除2取商,左移一位相当于乘2
    如:int a=3<<2;//a=12,等价于int a=3*2*2
    int b=12>>2;//b=3,等价于int b=12/2/2;
    例如:Q:3*4怎么计算速度最快
     A:移位运算(左移两位)
   条件运算符:
   扩展赋值运算符:+=、-=、*=、/=、%= 
  2.字符串连接符:“+”,两侧只要有一个是字符串类型,系统会自动将结果转换为字符串类型
  eg:String str="5";
  int s=4;
  System.out.println(4+str);
  3.三元运算符: x?y:z
  其中x为noolean类型表达式,先计算x的值,若为true,则整个三目运算符的结果为表达式y的值,否则整个运算结果为表达式z的值。经常用来代替比较简单的if-false判断。
  如:int a=3;                int a=3;
  int b=5; int b=5;
  String str=""; 等价于 String str=(a<b)?"a<b":"a>=b";
  if(a<b){
  str="a<b";
  else
  str="a>=b";
  }
  4.运算符优先级的问题
  不需要可以去记忆优先级关系,表达式里面优先使用小括号来组织!