黑马程序员技术交流社区
标题:
static 修饰的方法默认都是 final 类型的?
[打印本页]
作者:
帅哥哥
时间:
2014-4-19 12:04
标题:
static 修饰的方法默认都是 final 类型的?
本帖最后由 帅哥哥 于 2014-4-20 22:34 编辑
今天看书看到一句话 “由于 static 修饰的方法默认都是 final 类型的,所以在 main() 方法前加上 final 修饰符也是可以的”,拜托各位给详细解释一下,感觉有点乱。。。3q!!!
作者:
job
时间:
2014-4-19 13:42
final定义的方法不能被覆盖,而static 修饰的方法也不能被覆盖。main方法也是被static修饰,一个程序里面也只有一个main方法,不会出现一个main覆盖另外一个main,所以用不用final修饰都一样,加上也无妨,只是多此一举。
在普及一下final与static的区别
final类 :final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。
final方法:如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
final变量(常量) :用final修饰的成员变量表示常量,值一旦给定就无法改变!
final参数 :当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
static:被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
作者:
土突突
时间:
2014-4-19 23:46
本帖最后由 土突突 于 2014-4-19 23:49 编辑
你这句话肯定前边还有什么前提条件,否则的话这句话是不完全正确的
首先由static修饰的方法不可能默认都是final类型的,因为被final修饰的方法不能被重写,但是被static修饰的方法是可以被重写的,有实例为证:
class Test
{
public static void main(String[] args)
{
new SonDemo().show();
}
}
class Demo
{
public static void show()
{
System.out.println("父类方法运行了");
}
}
class SonDemo extends Demo
{
public static void show()//重写了父类方法
{
System.out.println("子类方法运行了");
}
}
复制代码
运行结果如下:见下图
C:\Documents and Settings\Administrator\桌面\QQ截图20140419233800.png
被static修饰的方法只是限制了方法只能调用类中的静态成员变量和静态函数
其好处是和静态成员变量一样,随着类的加载而加载,可以直接用类名调用而无需建立对象。
另外在 “main() 方法前加上 final 修饰符是可以的”是正确的。因为一个程序只可能有一个main方法。所以main方法无需也不能被重写。所以加上final修饰符是可以的。但是也是没必要的。
QQ截图20140419233800.png
(2.91 KB, 下载次数: 9)
下载附件
2014-4-19 23:48 上传
作者:
帅哥哥
时间:
2014-4-20 22:33
嗯,基本搞明白了,感觉好多东西都大有深度可言啊,越来越感觉自己太嫩了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2