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的)