Java final以及static用法簡單demo

Java Final 修飾符

final 終結的,最終的。final 可以修飾類,方法和變量。

修飾類

final修飾類時表示類不可以被繼承,是最終類。
public final class FinalTest {
	
}

//error ChildFinalTest class can not extends FinalTest, because it is final class
class ChildFinalTest extends FinalTest
{
	
}

修飾方法

package javaecho;

public  class FinalTest {
	public final void FinalMethod()
	{
		
	}
	
	public void NonFinalMethod()
	{
		
	}
		
}

//error ChildFinalTest class can not extends FinalTest, because it is final class
class ChildFinalTest extends FinalTest
{
	 
	public final void NonFinalMethod()
	{
		
	}

	//error, can not override final method
	public void FinalMethod()
	{
		
	}

}

修飾變量

變量只能被初始化一次,就不能改變, final 變量可以先申明,後初始化。

public  class FinalTest {
	private final int money;
	private final int cost =100;
	FinalTest()
	{
		money = 10;
	}
		
}

final作爲內部類參數

變量作爲內部類參數時,必須使用final修飾。其原因是非final變量和內部類的作用域不一樣,final 提示編譯器拷貝一份,並且保持值不變,這樣就不會影響返回的內部類。
public  class FinalTest {
	public static void test(final int cost)
	{
		FinalTestAbstract ft =  new FinalTestAbstract(cost){
			public void AbstractMethod()
			{
				System.out.println(cost);
			}
		};
		ft.AbstractMethod();
	}
	
	public static void main(String[] args)
	{
		FinalTest.test(30);
	}
		
}

abstract class FinalTestAbstract{
	private int cost;
	FinalTestAbstract(int costvar)
	{
		this.cost = costvar;
	}
	public abstract void AbstractMethod();
}

Java Static 修飾符

static 修飾符提示編譯器把類,方法和變量放在靜態存儲區域還是非靜態區域。

修飾內部類

Statc 內部類的好處是,不必擁有對應的java對象,便可以使用該類,同時其他類中的靜態方法也可以使用該內部類。
public  class StaticTestClass {
	
	public static class InnerClass
	{
		private int cost;
		public int getCost() {
			return cost;
		}
		public void setCost(int cost) {
			this.cost = cost;
		}
		public InnerClass(int costvar) {
			this.cost = costvar;
		}
	}
	
	public static InnerClass getInner(int cost)
	{
		return new InnerClass(cost);
	}
	
	public static void main(String[] args)
	{
		System.out.println(getInner(100).getCost());
		InnerClass ic =new StaticTestClass.InnerClass(18);
	}
		
}

修飾方法

靜態方法可以使得,不需要實例化類也可以訪問該方法。
public  class StaticTestClass {
	
	public static void test()
	{
		System.out.println("test");
	}
	
		
	public static void main(String[] args)
	{
		StaticTestClass.test();
	}
		
}

修飾變量

public靜態變量可以直接暴露訪問,private 靜態變量可以由類中內部靜態方法訪問。
public class MainClass
{
	public static void main(String[] args)
	{
		System.out.println(StaticClass.cost);
		//error,can not visit private static var
		//System.out.println(StaticTestClass.save);
		System.out.println(StaticClass.GetSave());
	}
}

class StaticClass {
	
	private static int save;
	public static int cost;
	public static int GetSave()
	{
		return save;
	}
		
}

Static final變量

相當於一個全局變量(前提是public的)


發佈了45 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章