一、final关键字

1.概述

   学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了final关键字,用于修饰不可改变内容。

   final属于一个修饰符,用来修饰类、成员方法、变量(成员变量、局部变量)。被它修饰的类不能被继承,被它修饰的方法不能重写,被它修饰的变量不能被重新赋值。

2.格式

   修饰类:

java 静态变量是不可以修改的 java静态变量可以修改吗_成员变量

修饰方法:

java 静态变量是不可以修改的 java静态变量可以修改吗_静态方法_02

   修饰变量:

java 静态变量是不可以修改的 java静态变量可以修改吗_成员方法_03

   注意事项:

   1.被final修饰的变量,在生成的.class文件中已经变为了常量。

   2.final修饰的引用数据类型的变量,是地址值不能被改变,类中的成员变量的值可以改变。

   3.final修饰的变量变为常量,为了和变量区分,一般建议final修饰的变量名都大写 。

二、static关键字

1.概述

       static是静态修饰符,一般修饰成员。被static修饰的成员属于类,不属于单个这个类的某个对象。static修饰的成员被多个对象共享。static修饰的成员属于类,但是会影响每一个对象。被static修饰的成员又叫类成员,不叫对象的成员。注意:static不能修饰类 构造方法 局部变量。

2.格式

       static 数据类型 变量名=数据;

java 静态变量是不可以修改的 java静态变量可以修改吗_成员方法_04

之前我介绍过,只要使用不同类中的成员变量有以下几种方式:

       (1)

       (2) 继承,使用super调用      

       (3)

       所以,如果一个成员变量被static修饰变为静态成员变量了,那么直接可以使用类名调用即可。

java 静态变量是不可以修改的 java静态变量可以修改吗_static变量_05

3.stati修饰成员变量的注意事项

   (1)静态方法可以直接访问类变量和静态方法。

       (2)

       (3)

       解释一下第二点,主要是因为先加载类到方法区,直接使用类名调用静态方法了,而此时还没有对象,而非静态方法必须有对象才可以运行。所以静态方法中不能使用非静态成员。但是非静态方法可以使用静态成员,因为对象已经有了,说明类肯定存在了(先有类后有对象)。看下面图解:

java 静态变量是不可以修改的 java静态变量可以修改吗_static变量_06

4.static修饰成员方法

       格式:

java 静态变量是不可以修改的 java静态变量可以修改吗_static变量_07

       被static修饰的方法称为静态方法,直接使用类名调用,和对象无关;没有被static修饰的方法称为非静态方法,和对象有关。

java 静态变量是不可以修改的 java静态变量可以修改吗_成员变量_08

5.static修饰成员方法的注意事项

   (1)静态方法中不能使用非静态的成员变量和成员方法

java 静态变量是不可以修改的 java静态变量可以修改吗_静态方法_09

   (2)非静态成员方法可以调用静态成员变量和方法,因为先有类后有对象

java 静态变量是不可以修改的 java静态变量可以修改吗_静态方法_10

三、权限修饰符

       在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。

       public 公共的权限,最大的权限 :1)同一类 2)同一包不同类 3)不同包的子类 4)不同包之间没有关系的类

       protected 受保护权限 修饰的内容访问范围:1)同一类 2)同一包不同类 3)不同包的子类

       默认权限(什么都不书写,空的) 修饰的内容可以在本类中使用,也可以在同一包下不同类中使用

       private 私有的权限,最小的权限,修饰的内容只能在本类使用

说明:

       1)四种权限修饰符能够跨包访问的只有:public protected必须是子类

       2)四个权限修饰符从大到小:public > protected > .默认权限(什么都不书写,空的) > private

public

protected

默认

private

同一类中

同一包中(子类与无关类)

不同包的子类

不同包中的无关类