1、java中byte,short,char在进行计算时会自动提升为int类型,加上final后则不会自动提升。
例:
byte b1=1, b2=2, b3=3;
b3=(b1+b2);//会进行报错,b3为byte类型,b1,b2自动转为int类型,不兼容。
final byte b1=1, b2=2, b3=3;
b3=(b1+b2);//通过
2、三目运算符会自动提升精度(跟着Float大哥跑)。
例:
Object obj = true?new Integer(1):new Float(5);
System.out.println(obj);//结果为1.0;
3、两数取余,根据前面一个数的符号来决定结果值的正负。
例:
System.out.println(-1%-2);//结果为-1。
4、调用类方法时'实例对象.方法'在系统底层自动转换为'类名.方法'。
例:
public class Hello
{
public static void fun()
{
System.out.println("调用成功");
}
public static void main(String[] args)
{
Hello hello = null;//为什么不报空指针异常?
hello.fun();//这里会转换为Hello.fun();输出"调用成功"
}
}
5、宏变量。
例1:
final int a=5;
System.out.println(a);
解析:执行第二条语句时变量a根本不存在,实际上会变成System.out.println(5)这条语句,
所有用到该变量的地方都会替换成'值',这个值也就是5。
例2:
String s1 = "sss";
String s2 = "ss"+"s";
System.out.println(s1==s2);//true
String v1 = "ss";
String v2 = "s";
String v3 =v1+v2;
System.out.println(v3==s1);//false
final String x1="ss";
final String x2="s";
String x3 =x1+x2;//这条语句实际上是 String x3="ss"+"s";
System.out.println(v3==s1);//true
6、如果父类用private修饰的方法,则不存在覆写这一概念。
例:
class Vehicle
{
private final void run()
{
System.out.println("Vehicle");
}
}
public class Car extends Vehicle
{
public static void main(String[] agrs)
{
new Car().run();
}
private final void run()
{
System.out.println("Car");
}
}
解析:编译没有任何问题,因为父类的方法是对子类不可见的,
所以子类不能覆写到父类的方法,那为什么子类又出现了一个一样的方法?
这个方法是子类自身定义的,并不是覆写来的,两者的性质不同。