Java之static与final关键字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之static与final关键字相关的知识,希望对你有一定的参考价值。
static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类
static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量值也会随之发生变化,如果一个成员变量是static的,那么我们可以通过类名.成员变量名来的方式来使用它(Java推荐使用这种方式)
package com.yuanzijian01; class MyStatic{ static int a; } public class StaticTest { public static void main(String[] args) { // TODO 自动生成的方法存根 /* MyStatic myStatic = new MyStatic(); MyStatic myStatic2 = new MyStatic(); myStatic.a = 10; System.out.println(myStatic2.a); */ //java 推荐使用的方式 MyStatic myStatic = new MyStatic(); MyStatic.a = 10; System.out.println(myStatic.a); } }
3.static修饰方法:static修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名来访问
package com.yuanzijian02; class MyStatic2{ public static void output(){ System.out.println("output"); } } public class StaticTest2 { public static void main(String[] args) { MyStatic2 myStatic = new MyStatic2(); MyStatic2.output(); } }
package com.yuanzijain03; class M{ public static void output(){ System.out.println("M"); } } class N extends M{ public static void output(){ System.out.println("N"); } } public class StaticTest3 { public static void main(String[] args) { // TODO 自动生成的方法存根 M m = new N(); extracted(m); } private static void extracted(M m) { M.output(); } }
4.静态方法只能继承,不能重写(Override)
注意:只要有静态,就不要覆盖
5.final关键字:final可以修饰属性,方法,类
6.final修饰类:当一个类被final修饰时,表示该类是一个终态类,既不能被继承
final class E{ //表示该类不能被继承 } class F extends E{ //提示错误。E是终态类,不能被继承 } public class FinalTest { public static void main(String[] args) { // TODO 自动生成的方法存根 F f = new F(); } }
7.final修饰方法:当一个方法被final修饰时,该方法是一个终态方法,即不能被重写
package com.yuanzijian05; class G{ public final void output(){ System.out.println("G"); } } class H extends G{ //此行的多个标记, - 不能覆盖 G 中的终态方法, - 覆盖 public void output(){ System.out.println("H"); } } public class FinalTest2 { public static void main(String[] args) { // TODO 自动生成的方法存根 H h = new H(); h.output(); } }
8.final修饰属性:当一个属性被修饰时候,也不能被重写
package com.yuanzijian06; class People{ final int age = 10; } public class FinalTest { public static void main(String[] args) { People people = new People(); people.age = 20; // 不能对终态字段 People.age 赋值 } }
9.当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化,如果final修饰一个引用类型时,表示该引用类型不能指向其他对象了,但是该引用所指向的对象的内容是可以发生变化的
以上是关于Java之static与final关键字的主要内容,如果未能解决你的问题,请参考以下文章
一脚踩进java之基础篇19——面向对象 (final,static关键字)