Java之static与final关键字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之static与final关键字相关的知识,希望对你有一定的参考价值。

  1. static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类

  2. 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中static与final关键字归纳总结

一脚踩进java之基础篇19——面向对象 (final,static关键字)

一脚踩进java之基础篇19——面向对象 (final,static关键字)

java学习笔记之面向对象static,final关键字

Java基础之final和static关键字

final与static关键字的区别?(skycto JEEditor)