最近总有杠精在Q群跟我杠JAVA的一些细枝末节的基础知识,故出一系列“科普文”来怒怼杠精
JAVA switch语句表达式支持类型
支持类型大致有六种:
int
char
byte
short
String(java 7才允许)
枚举
常见的boolean与实数性不支持
JAVA何种情况下需要强制类型转换
父类转换为子类时 基本数据类型长度不一,由长度长的向长度短的数据转换或者数据的二进制存储形式不同时举例来说
short i=2;
int j=i;
这种形式则可以,因为int数据长度比short长,可以放下short数据,而反过来
int j=2;
short i=j;
这样则会报错,这是因为short所占用的内存大小比int小,可能会放不下int数据
还有一种情况
float i=2.0f;
int j=i;
我们知道float与int长度都一样,但是却无法自动进行转换,那是因为float与int数据的二进制存储方式不同
float:二进制数据第31位存放符号位(0正,1负),30-23位存放阶码,剩下的23-0位存放尾数(小数点后小数位) int:以补码的形式存储,正数补码为其本身,负数补码为处符号位(31位)外其余位取反+1至于为什么int向float转换时可以自动转换,我个人认为这与java自带的优化机制有关,因为根据我们常人的思维来想整数转换为小数没有问题,而小数转换为整数时就会出现丢失精度的问题
父类转换子类的情况不再赘述
JAVA static 方法与普通方法的区别
main方法为什么必须是静态(static)的
因为main方法由JAVA虚拟机来调用,访问静态方法是不需要将类实例化,main方法可以有几个
在同一个类中main方法有且只有一个,在一个完整的项目中每个类都可以有一个main方法,但只有一个main方法被执行。方法重载与重写的区别
重载在同一类中,重写在不同类中。 重载是在统一类中声明多个不同参数或不同定义的同名方法abstract(抽象类)与interface(接口)的关系
相同点:
不同点:
接口子类由implements来继承,子类可以继承多个接口 抽象类子类由extends关键字来继承,只能继承一个 接口不可声明构造器 抽象类可以声明构造器 抽象类可以有普通方法、静态方法与抽象方法 接口中方法默认由public abstruct修饰为抽象方法,不可私有,从jdk8开始(在这之前不可以)也支持有普通方法,但必须由default来修饰,也是从jdk8开始支持静态方法的定义易错处:
abstract方法必须在abstract类中,而abstract类中不一定全都是abstract方法,他可以有普通方法杠精抬杠处:
接口不是(战术后仰.jpg)抽象类,为什么也有抽象方法… 为什么看上面相同点普通方法与抽象方法区别
普通方法可以被子类重写也可以不被重写 抽象方法必须被子类重写,除非该子类也是抽象类 抽象方法没有方法体 普通方法有方法体目前只能想到这些,如有谬误或者补充,可在评论处发言