java基础知识注意点

163 阅读2分钟

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");
     }
}
解析:编译没有任何问题,因为父类的方法是对子类不可见的,
所以子类不能覆写到父类的方法,那为什么子类又出现了一个一样的方法?
这个方法是子类自身定义的,并不是覆写来的,两者的性质不同。