Static与final关键字小结

[size=medium]1.Static关键字[/size]
谈到static,我们通常会说它是一个静态修饰符,究竟什么才是静态修饰符,这个解释起来有些棘手,也很难让人理解它的意思。这就像让我们解释一个成语的意思,我们直接从成语词典里读出它的释义一样,生涩难懂,让人摸不着头脑。所以,当我们解释一个词时,往往要将其具体化——这个词有什么作用,应用在哪,会产生什么样的效果。
[size=small]Static可以用来修饰属性、方法、构造静态块。[/size]
1.当static修饰属性时,可以创建具体的对象来调用该属性,也可以直接通过类名调用该属性。当创建对象调用该属性时,每个对象共同拥有一个静态成员变量,也就是说当其中任何一个对象修改该属性的值时,其他对象的属性值也同时改变。这也就是可以直接通过类名调用该属性的原因,因为无论创建多少对象,所有对象都共用一个相同静态成员变量。既然每个对象的该属性都有相同的值,直接通过类名调用就显得更简单明了一些。
用Static修饰的属性适用于单值情况,比如简单画图板重绘时存放信息的队列,五子棋用于存储棋子坐标和其他信息的二维数组…
2.Static修饰方法时与修饰属性时相类似,可以创建具体的对象调用该方法,也可以直接通过类名调用该方法。
[color=red]值得注意的一点,当static修饰方法时,方法中的若有属性,则属性也应该是静态的,或者为常量。[/color]
public class Student {
String name;
public Student(){};
public Student(String name){
this.name=name;
}
public static void study(){
System.out.println(name+"is playing now!");
}
}
public class Teacher {
public static void main(String [] args){
Student stu=new Student("张三");
Student st=new Student("李四");
//Student.name="张三";
st.study();
stu.study();
}
}

当运行该程序时,程序报错,错误原因是因为属性name不是静态的。究其原因,我们会发现如果直接能通过类名调用一个方法,就说明用该类创建的所有对象共用一个相同的方法,方法的输出结果必须是相同的,当你改变属性值,该方法就会有不同的输出结果,与能直接用类调用该方法相矛盾。所以String name应该改为static String name。
静态的方法可以被隐藏但不能被重写,静态属性,静态方法都没有多态(可以参考一下jave的官方文档http://download.oracle.com/javase/tutorial/java/IandI/override.html)。
3.静态块在类被加载时级执行,优先于主函数。
4.关于主函数要加static的一点看法
当类被加载时,静态的属性和方法即被加载,而非静态成员只有在创建对象时才被加载,这也就是为什么主函数要加static的原因。由于非静态成员只有在创建时被加载,当一个类中没有static修饰的方法时,类加载时所有的方法都不会被加载,直接导致程序无法运行,所以必须找到一个入口,当类加载时,该入口即被加载,在方法体中才会创建对象,调用方法,程序才能正常运行。

[size=medium]2 Final关键字[/size]
[size=small] final可以修饰属性、方法、类。[/size]
1.当一个类被final修饰时,该类是一个终态类不能被继承。
2.当一个属性被final修饰时,该属性是一个常量,定义时需要赋初值,或者在所有的 构造器方法里赋值。[color=red]当以对象作为final修饰的属性时,对象的地址不能改变,但对象的内容可以改变。[/color]
3.当一个方法被final修饰时,该方法不能被重写,即override。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值