java知识易忽略点

java学习笔记

:>>带符号右移。正数右移高位补0,负数右移高位补1。
比如:
4 >> 1,结果是2;-4 >> 1,结果是-2。-2 >> 1,结果是-1。

:>>>无符号右移。无论是正数还是负数,高位通通补0。

对于正数而言,>>和>>>没区别。
对于负数而言,-2 >>> 1,结果是2147483647(Integer.MAX_VALUE),-1 >>> 1,结果是2147483647(Integer.MAX_VALUE)。

以下代码可以判断两个数的符号是否相等
return ((a >> 31) ^ (b >> 31)) == 0

count = count++
原理是 temp = count; count = count+1 ; count = temp;

因此count始终是0 这仅限于java 与c是不一样的

静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行

执行顺序优先级:静态块>main()>构造块>构造方法

例子2:
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);

语句:b3=b1+b2编译出错

被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;
在编译时就已经变为b6=10了
而b1和b2是byte类型,
java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,
赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。

Java中的byte,short,char进行计算时都会提升为int类型。
byte short char运算时都会转为int类型

char型在进行计算时,是自动转化为int类型的,是转换成ASCII码来计算的,如a=97

例子3:

我们在执行URL u =new URL(“http://www.123.com”);
这句话的时候确实要抛出异常,但是这个异常属于IOException,

不管网址是否存在,最后都会返回该网址的一个连接,打印出来就是该网址。


对于-7而言:
原码:1000 0111
反码:1111 1000
补码:1111 1001
补码就是反码加一


父类静态域——》子类静态域——》父类成员初始化——》
父类构造块——》1父类构造方法——》2子类成员初始化——》
子类构造块——》3子类构造方法;
普通成员变量和普通代码块是同级的 执行按照先后顺序进行


double d1=-0.5;

System.out.println(“Ceil d1=”+Math.ceil(d1));

System.out.println(“floor d1=”+Math.floor(d1));

Ceil d1=-0.0
floor d1=-1.0
ceil:大于等于 x,并且与它最接近的整数。
floor:小于等于 x,且与 x 最接近的整数。

至于为什么是-0.0,而不是0.0,
因为源码注释:“If the argument value is less than zero but greater than -1.0, then the result is negative zero ”,
翻译过来就是:如果参数是-1.0到0.0之间的数,结果是-0.0。


使用反射可以看出子类是继承了父类的私有方法的(不管是否是final),
只是直接调用父类的私有方法是不可以的,但是利用反射的方式可以调用。字段同理


你可能感兴趣的:(java,java)