Java学习第十一天——final关键字,权限修饰符
final关键字代表最终,不可改变
常见的四种用法
1.可以用来修饰一个类
2.可以用来修饰一个方法
3.可以用来修饰一个局部变量
4.可以用来修饰一个成员变量
final修饰变量和局部变量
对于成员变量来说,如果使用final关键字修饰,那么这个变量也照样是不可变的
1.由于成员变量是有默认值的,所以是使用final修饰后必须马上赋值,不会再给默认值
2.对于final修饰的成员变量,要么直接赋值,要么通过构造方法赋值,而且只能赋值一次
public class Demo01Final {
public static void main(String[] args) {
int num = 10;
num = 20;
System.out.println(num);
//一旦使用final用来修饰一个局部变量,那么这个变量就不能改变
//一次赋值,终身不变
final int num1 = 20;
System.out.println(num1);
// num1 = 200;
//对于基本类型来说,不可变说的是变量当中的数值不可改变
//对于引用类型来说,不可改变说的是变量当中的地址值不可改变
}
}
final用来修饰一个类
当final关键字用来修饰一个类的时候,格式
public final class 类名称{
//…
}
含义当前这个类不能有任何子类。(太监类)
内容写法和一般类没有任何变量去吧
注意:一个类如果是final的,那么其中所有成员变量都无法进行覆盖从写,因为没儿子
final可以用来修饰一个方法
当final关键字用来修饰的方法,这个方法就是最终方法,也就是不能被覆盖重新
格式
修饰符 final 返回值类型 方法名称(参数列表){
//
}
注意事项:
对于类方法来说,关键字abstract和final关键字不能同时使用,因为矛盾
四中权限修饰符
(1)public : 公共权限
修饰对象: 修饰类、方法、属性
继承: 被public所修饰的成员能被该类的所有子类继承下来。
作用域: 可以被任意类访问
public能用来修饰类,在一个java源文件中只能有一个类被声明为public,而且一旦有一个类为public,那这个java源文件的文件名就必须要和这个被public所修饰的类的类名相同,否则编译不能通过。说到这里,穿插多一点知识。一个类作为外部类的时候只能被public或者默认访问修饰符所修饰,但是一个类如果作为内部类的时候,则可以被四种访问修饰符所修饰,因为一个类作为内部类的时候,就作为外部类的一个成员属性了,因此可以有四种访问修饰符修饰,这是内部类和外部类的一个区别。
public用来修饰类中成员(变量和方法),被public所修饰的成员可以在任何类中都能被访问到。通过操作该类的对象能随意访问public成员。
public在类的继承上的体现,被public所修饰的成员能被所有的子类继承下来。
**(2)protected:**受保护的权限
修饰对象:修饰内部类,接口,属性,方法
继承: 被protected所修饰的成员能被该类的所有子类继承下来。
作用域: 可以被同包类访问,如果不是同包,必须是该类的子类才能访问
(3)default : 同包权限**(默认,缺省的)**
修饰对象:修饰类,属性,方法。
继承:被default所修饰的成员只能被该类所在同一个package中的子类所继承下来。(也就是说只有在同一个package中的子类才能访问到父类中default修饰的成员)
作用域: 只能被同包的类访问
(4) private : 私有权限
修饰对象 : 内部类,属性,方法
作用域: 只能在本类中使用
修饰的访问权限
java四中权限修饰符
public > protected > default > private
同一个类(我自己) yes yes yes yes
同一个包 (我邻居) yes yes yes no
不同包子类 (我儿子) yes yes no no
不同包非子类 (陌生人) yes no no no
注意:
(1)protected不能修饰类。
(2)priavte可以修饰类,但是该类必须是一个内部类。
在定义类时,推荐访问控制级别从严处理:
(1) 如果不允许外部直接通过 new 创建对象,构造方法必须是 private。
(2)工具类不允许有 public 或 default 构造方法。
(3)类非 static 成员变量并且与子类共享,必须是 protected。
(4)类非static成员变量并且仅在本类使用,必须是private。
(5)类 static 成员变量如果仅在本类使用,必须是 private。
(6)若是 static 成员变量,必须考虑是否为 final。
(7)类成员方法只供类内部调用,必须是 private。
(8)类成员方法只对继承类公开,那么限制为 protected。
类修饰符:
public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。
final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。
friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。
成员变量修饰符:
public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。
private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
final,最终修饰符,指定此变量的值不能变。
static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。
transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。
volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。
方法修饰符:
public(公共控制符)
private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。
final,指定该方法不能被重载。
static,指定不需要实例化就可以激活的一个方法。
synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。
native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。