使用final修饰变量定义:该变量一旦被初始化以后就不容许再被修改。函数
final修饰引用类型:一旦为其赋值,将不可以从新用来引用另外一个对象,不过能够修改其引用对象的成员 变量。this
final修饰成员变量:其值不能改变,必须进行初始化。spa
public class YourClassNameHere { final String color; // 若是后面没有在构造函数中初始化,则错误。 final String color1 = "红色"; //正确,进行显示初始化 String color2 = "蓝色"; public YourClassNameHere(String color){ this.color = color; } public static void main(String[] args) { String color = "黄色"; YourClassNameHere test = new YourClassNameHere(color); System.out.println(test.color); String color1 = "绿色"; YourClassNameHere test1 = new YourClassNameHere(color1); System.out.println(test1.color); System.out.println(test1.color1); // test1.color = "改变颜色"; //错误,不能修改final变量 test1.color2 = "改变颜色2"; System.out.println(test1.color2); } }
final修饰的局部变量:code
final修饰局部变量能够只声明不初始化,可是被修饰的局部变量一旦被赋值后就不能进行修改了。若是在建立时没有对其赋值,那么在使用前仍是能够对其赋值的。对象
final修饰的方法:blog
被修饰的方法能被该类的子类所继承,但不能重写,这样保护了父类某些特殊的数据。继承
//重写父类方法,但没有用final修饰 class bike { String color = "黄色"; public void getMes() { System.out.println("父类的成员变量color" + color); } } public class test extends bike { String color = "绿色"; //重写父类方法 public void getMes() { System.out.println("子类的成员变量color" + color); } public static void main(String[] args) { test t = new test(); t.getMes(); } }
//重写父类方法,用final修饰 class bike { String color = "黄色"; public final void getMes() { System.out.println("父类的成员变量color" + color); } } public class test extends bike { String color = "绿色"; //不能重写父类方法 /* public void getMes() { System.out.println("子类的成员变量color" + color); } */ public static void main(String[] args) { test t = new test(); t.getMes(); } }
final修饰类:说明该类不能有子类,即该类不能被继承,该类的成员变量在这里不起做用。内存
final修饰类里的方法默认被修饰为final。get
静态:在内存中只能有一份。class
静态变量:只能存在一份,它属于类,不属于对象,不随着对象的建立而创建副本。若是不想在建立对象的时候就须要知道一些相关信息,那么就声明为static类型。
public class test { static String color = "绿色"; public test(String color) { this color += color; } public static void main(String[] args) { test t1 = new test("黄色"); test t2 = new test("红色"); System.out.println(t1.color); // 绿色黄色红色 System.out.println(t2.color); //绿色黄色红色 System.out.println(color); //绿色黄色红色 } }
静态变量的访问:
静态常量:惟一的、不可变的、只存在一份的数据。系统不会分配默认值,必须初始化。
public:声明被它修饰的成员变量为公共类型,这个成员变量在任何包里都能访问,包括子类也能访问到。
private:除了本类外任何类都不能访问到这个成员变量,具备很好的保护性。
default:若是不给成员变量添加任何修饰符,就表示这个成员变量被修饰为default类型。在同一个包里的类或子类是可以访问的,至关于public类型。可是在不一样包里的类或子类没有继承该成员变量,是访问不到它的。
若是子类在另外一个包里,而成员变量或方法没有添加修饰符,子类是访问不到的。
protected:在同一个包里和public类型是同样的,可访问到。若是在不一样包里的protected类型的成员变量就只能经过子类来访问。子类能够访问父类protected权限的成员是指集成到子类中后在子类是可见的,而非子类内部创建一个父类的实例后该实例能够访问自身的protected成员。
与final含义彻底相反。抽象类里最少要含有一个抽象方法,让子类去实现这个抽象方法