JAVA关于静态static的面试题
1.静态(static)
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。
static修饰的变量习惯称为静态变量,static修饰的方法称为静态方法,static修饰的代码块叫做静态代码块。
static的意义在于方便在没有创建对象的情况下来进行调用(方法/变量)。
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
2.静态的具体用法
参考:
https://www.cnblogs.com/0mbiubiu/p/5331390.html
补充:静态内部类
https://blog.csdn.net/cd18333612683/article/details/79129503
https://baijiahao.baidu.com/s?id=1593244425455663032&wfr=spider&for=pc
3.静态的注意事项
4.静态的优缺点
优点:
对对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份
可以直接被类名调用,不用在堆内存创建对象
静态成员可以通过类名直接访问,相对创建对象访问成员方便
弊端:
访问出现局限性。(静态虽好,但只能访问静态)
5.关于静态的面试题
(1)Q:抽象的(abstract)方法是否可同时是静态的(static)?
A:抽象方法将来是要被重写的,而静态方法是不能重写的,所以这个是错误的。
(2)Q:是否可以从一个静态(static)方法内部发出对非静态方法的调用?
A:不可以,静态方法只能访问静态成员,非静态方法的调用要先创建对象。
(3) Q:static 可否用来修饰局部变量?
A:static 不允许用来修饰局部变量
(4)Q:内部类与静态内部类的区别?
A:静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;
普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。
如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。
如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性
如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。
(5)Q:Java中是否可以覆盖(override) 一个private或者是static的方法?
A:Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。