JavaSE复习_1 Java的基本格式和运算符

时间:2022-05-30 02:27:00
△.代表在当前目录.classpath能在任何路径下访问类文件.
△单行注释可以嵌套,多行注释不能嵌套
△java中的标识符只能有数字,字母,$和_,其他的符号都是错误的,不合法的.其中数字不能是开头.
△快捷打开命令窗口.按住shift,右键此处打开命令窗口.
△跨平台原理:只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
△字符常量:''单引号中必须放的是单个数字(0~9),10代表的是2个字符.''不放字符也不可以.
△计算机内部以源码的形式存储,在运算的时候以补码的形式去运算.
△java中,除了char和boolean其他数据类型都是从负数开始取到正数,如int -2^31~2^31 byte:-128~127
 char占两个字节:0~65535,boolean没有明确指定大小.(sun官方文档),float占四个字节,double占8个字节.
△>>>运算符将用0填充高位,而>>用符号位填充高位.在对于整数进行移位运算符的操作的时候,需要对移位运算符右侧的参数进行模以32的运算.例如:1<<35和1<<3和8是相同的.
△整数默认的类型是int类型,因此不能直接用long x=999999999;这样会显示数据类型错误(out of range).需要long x=9999999999l才可以.标识最好加L.
△小数的默认类型是double类型.因此如果float f=1.32;会直接报错.显示可能会损失精度.需要标识float f=3.12f;
△输出一个整数除以0的数值将会报错ArithMeticException异常.但是用浮点数除以0则不会报异常,会得到NAN或者Infinity.
△byte b=2;不会出现和float/double一样的错误,这是因为整数类型(常量在编译的时候就能确定了.但是如果是变量的话另当别论(short同理).如:
 byte b=3+4;          //编译时已经确定,不会报错.直接数字相加直接转换为byte.注意!!float不同.
 byte b1=3;
 byte b2=4;
 b=b1+b2;          //报错,两个byte变量相加会直接转化为int.java编译器有常量优化机制.
另外:
int x=32;
byte b=32;
b=b+x;
System.out.println(b);     //编译错误.这是因为b+x后转化为了int字节.再转换为byte会出现错误.
△小的数据类型在和大的数据类型运算时会补成大的数据类型.
△byte b=1;b+=1;//编译通过,隐藏了一个类型的转换,b++同理,不会报错.而b=b+1;则是将int类型转换为byte类型,会报错(Can not convert from int to byte)
 byte b=(byte)129;会得到负数.因为截断.
而byte b=(byte)300;不会得到负数,因为300>256,因此最高位是0
△float f=123l; //编译成功,因为float比long大.因此倒过来也是不对的. float使用ieee754格式存储。只有24位精度,两个float之间的距离可能很大。 
举个简单的例子,2000000000和2000000050用float表示的话这两个数是相同的 。 
整数是精确表示的。0位代表符号位,8位代表指数位,23位代表尾数位.
△System.out.println('a'+1);     //输出98.因为在转换为int
 System.out.println("hello"+'a'+1)//输出helloa1
 System.out.println('a'+1+"hello")//输出98hello
△System.out.println((float)(10/3))//输出3.0,因为10/3已经事先算好
△当两个数值进行想加的操作的时候,先将两个操作数转化为同一种类型,再进行计算.
  • 如果两个操作数中有一个是double类型,另一个操作数会转化为double类型.
  • 否则,如果有一个是float类型,另一个操作数会被转化为float类型.
  • 否则,如果有一个是long类型,另一个操作数将会被转化为long类型.
  • 否则,两个操作数均被转化为int类型(终点).
△Math.round方法方法代表对浮点数采用最接近的整数的舍入运算.如果参数是double类型,返回long.如果参数是float类型,返回int.
△常见的结合性从右向左的运算符:+=,-=,*=,/=,=.对于这类运算符,从右向左进行计算.a+=b+=c等价于a+=(b+=c).
△异或^:两边相同就是false两边不同则为true,&&是短路的,同时单与也有位运算符的作用.
△if语句和三元运算符的区别,a?b:c;三元运算符的b和c必须要要有明确的结果,因为三元运算符是运算符,要有明确的结果.
if(x<2)
     int z=3;//错误.因为int z=3;实际上是两个语句.
△switch(表达式){
     case 语句:语句1;
                    break;
}
在switch括号内的表达式byte,short,char,int 枚举(jse 1.5),字符串(jse 1.7).
case一旦成功匹配,其后的语句都不在判断.default:即使放在任意位置,也是最后去执行.
        
 int x =4;
switch(x )
{
case 1:System.out.println("a");
case 2:System.out.println("c"); case 3:System.out.println("b");
default:System.out.println("d"); }
此时输出d.当default在最后面时,没有break也可以正常结束.
当default在最前面时,执行完default后,会继续向下.直到碰到break或者大括号
case 1:
case 2:
case 3:
          语句;
这样的格式也是可行的.
△break可以带标签: 
 U:
for( int x=0; x<=4; x++) {
for( int y=0; y<=3; y++) {
if( y==2)
break U;
System. out.println( "x="+ x+ ",y="+ y);
}
}
   实际上带break的标签可以用在if语句中,跳出if语句块.
   还有带标签的continue语句,其作用与break近似.
△静态导入:将类导入,以便使用类中的静态方法或者静态变量,如:import static java.lang.math.*;
△UTF-8一个中文三个字节,GBK码表一个中文两个字节.