最近总有杠精在Q群跟我杠JAVA的一些细枝末节的基础知识,故出一系列“科普文”来怒怼杠精
JAVA switch语句表达式支持类型
支持类型大致有六种:
int
char
byte
short
String(java 7才允许)
枚举
常见的boolean与实数性不支持
JAVA何种情况下需要强制类型转换
- 父类转换为子类时
- 基本数据类型由精度高向精度低转换时
(精度排序由低到高:byte short char int long float double)
JAVA static 方法与普通方法的区别
- static方法被称为静态方法,调用类中的静态方法时,不需要将此类进行实例化就可以直接调用,static方法不可以调用this对象,也不可以调用类中的非静态方法与非静态属性,而非static方法则可以调用static方法,static方法或属性属于整个类不属于某个实例
生存周期:全局
main方法为什么必须是静态(static)的
- 因为main方法由JAVA虚拟机来调用,访问静态方法是不需要将类实例化,
且如果main方法不声明为静态的,JVM就必须创建main类的实例,
因为构造器可以被重载,JVM就没法确定调用哪个main方法。故main方法必须为静态的
main方法可以有几个
- 在同一个类中main方法有且只有一个,在一个完整的项目中每个类都可以有一个main方法,但只有一个main方法被执行。
方法重载与重写的区别
- 重载在同一类中,重写在不同类中。 重载是在统一类中声明多个不同参数或不同定义的同名方法
重写是父类与子类之间的多态性,若子类中有与父类完全相同(具有相同的方法名、返回类型和参数表)的方法,则子类中的新方法将覆盖父类中的旧方法
abstract(抽象类)与interface(接口)的关系
相同点:
- 都无法被直接实例化
- 一个类如果继承并要实现一个接口/抽象类的话,就必须对其中的抽象方法进行实现,否则依然得声明为抽象类
- 接口是特殊的抽象类,比抽象的概念更进一步
不同点:
- 接口子类由implements来继承,子类可以继承多个接口
- 抽象类子类由extends关键字来继承,只能继承一个
- 接口不可声明构造器
- 抽象类可以声明构造器
- 抽象类可以有普通方法、静态方法与抽象方法
- 接口中方法默认由public abstruct修饰为抽象方法,不可私有,从jdk8开始(在这之前不可以)也支持有普通方法,但必须由default来修饰,也是从jdk8开始支持静态方法的定义
易错处:
- abstract方法必须在abstract类中,而abstract类中不一定全都是abstract方法,他可以有普通方法
杠精抬杠处:
- 接口不是(战术后仰.jpg)抽象类,为什么也有抽象方法…
- 为什么看上面相同点
普通方法与抽象方法区别
- 普通方法可以被子类重写也可以不被重写
- 抽象方法必须被子类重写,除非该子类也是抽象类
- 抽象方法没有方法体
- 普通方法有方法体
目前只能想到这些,如有谬误或者补充,可在评论处发言