static方法内部是否能发出对非static方法的调用
(1)问题分析:
考官主要相对static方法的考察,涉及到static关键词考核,如抽象的(abstract)方法是否可同时是静态的(static);static 可否用来修饰局部变量; 内部类与静态内部类的区别;java中是否可以覆盖(override) 一个private或者是static的方法。
(2)核心答案讲解:
不可以。static方法是静态方法,是属于类的方法,非static方法是属于对象的方法。因为非static方法是要与对象关联在一起的,必须在创建出一个对象后,才可以通过这个对象调用非static方法;而static方法可以直接通过类名来调用,不需要创建对象。也就是说,在一个static方法被调用时,还可能没有创建任何实例对象,此时如果从static内部发出对非static方法的调用,非static方法是无法关联到对象的。
(3)问题扩展:
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。
static修饰的变量习惯称为静态变量,static修饰的方法称为静态方法,static修饰的代码块叫做静态代码块。
static的意义在于方便在没有创建对象的情况下来进行调用(方法/变量)。
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。
(4)结合项目中使用:
1)在项目中,很多工具类会使用static定义方法 ,达到不用new对象直接类名.方法名直接调用,使用工具更方便,减少重复代码的作用。例如:项目中的UUIDUtils
2)常见的单例模式
单例模式方法定义为静态方法:达到不能用该类在其他地方创建对象,而是通过该类自身提供的方法访问类中的那个自定义对象的目的。