Java易忘易混淆知识点笔记

1.Java合法标识符规则一般是:标识符由字母、数字、下划线“_”、美元符号“$”组成,并且首字母不能是数字,并且不是系统保留字。

但是由于Java是使用Unicode,因此不光是美元符号,¥、£等也都可以,中文、日文等其他国家语言也都可以出现在标识符中如:

String £="123";
float 浮点数=4.76f;
int α=110;


2.多行注释/* */之间出现的注释起始符号,例如//、/*、//*等,编译器将其自动视为普通字符,即多行注释里面的单行注释是不起作用的,不做处理。

因此对于/*  //  */这个注释是有效的,而不会因为单行注释注释掉了多行注释的闭合部分。但是多行注释不能嵌套,如下是错误的:

/*

*/*  多行注释内部嵌套的多行注释 */

*/


3.两个整数之间相除,如果除数是0那么会报错,java.lang.ArithmeticException: / by zero

但是如果有任一个是浮点数,比如1.0/0 或者1/0.0 那么就不会报错,除的结果是Infinity,而0.0/0结果是NaN。

即,在浮点数的世界里不会抛出除0错,而是会返回正无穷大或负无穷大或NaN。 
究其原因,可能是因为在浮点数运算中,不存在真正意义上的0,而是一个无限接近于0的浮点数。


4.Java中%不光可以对整数取模,也可以对浮点数进行取模。如5.2%1.2,不过结果未必很精确,结果是0.40000000000000036,这应该也是和浮点数的性质有关。


5.取反运算符“~”,对参与运算的数的各二进制位按位取反。计算机中的数是按补码形式存储,因此先表示成补码形式,然后对每一位取反,然后再由补码转换回来。

~2=-3:2的补码是0000 0000 0000 0000 0000 0000 0000 0010

 所以按位取反后是1111 1111 1111 1111 1111 1111 1111 1101

最高位符号位是1故为负数,根据负数的补码转换规则“各位取反再加1”即为000 0000 0000 0000 0000 0000 0000 0011,也就是3,所以最终结果是-3.

~(-2)=1:-2的补码是1111 1111 1111 1111 1111 1111 1111 1110

 所以按位取反后是0000 0000 0000 0000 0000 0000 0000 0001

最高位符号位是0故为正数,也就是1,所以最终结果是1.

~0=-1:0的补码是0000 0000 0000 0000 0000 0000 0000 0000

 所以按位取反后是1111 1111 1111 1111 1111 1111 1111 1111

最高位符号位是1故为负数,根据负数的补码转换规则“各位取反再加1”即为000 0000 0000 0000 0000 0000 0000 0001,也就是1,所以最终结果是-1.


6.逻辑运算符&&、||和位运算符&、|都可以作用于逻辑运算中,前者具有“短路运算”功能,即如果&&、||的前面部分已经能得出整个表达式的值就不再继续算后面的了

如:下面的程序的输出结果为a:0 b:1

int a=0,b=0;
if(true || b<a++)
	System.out.println("a:"+a);
		
if(true | a<b++)
	System.out.println("b:"+b);
其实Eclipse自动就会提示第一个if中||后面为dead code,即不可能会执行这部分的代码,而第二个if中没有提示。


7.Java中long型占64位,float占32位,但是long可以自动转换为float类型的。long型转化为float、double类型都可能会有精度损失。

float的精确位数为7位(整数位的数字个数+小数位的数字个数=7),double的精确位数为16位(整数位的数字个数+小数位的数字个数=16).


8.类变量(即用static修饰)会自动初始化,而方法中的局部变量不行,不过基本类型的数组元素也会自动初始化。

public class Dog
{
	private static int i;
    public int j=1;
    public int a;
    public static void main(String[] args)
	{
          System.out.println(i);//正确,输出0 
          //System.out.println(j);//错误!静态方法中不能引用非静态变量j 
          //public static int j=10; //错误!public和static不能用于方法内的变量定义 
          //int k;
          //System.out.println(k);//错误!变量k没有初始化 
          Dog d=new Dog();
          System.out.println(d.a);//正确,输出0
          
          int b[]=new int[3];
          System.out.println(b[2]);//正确,输出0
	}
}

9.目前(JDK1.7)switch可以使用的类型为char、short、int、enum、String。其中前三个是一开始就可以的,enum是JDK1.5加入的,String貌似是JDK1.6加入的。如果尝试用long,则提示Cannot switch on a value of type long. Only convertible int values, strings or enum constants are permitted。


10.try、catch、finally不能单独使用,必须要有try,从语法上讲,可以没有catch或没有finally。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值