摘要

教你如何使用final关键字,以及权限修饰符

正文

一、final关键字

final关键字代表最终、不可改变的的。

常见四种用法:

  1. 可以用来修饰一个类
  2. 还可以修饰一个方法
  3. 还可以用来修饰一个局部变量
  4. 还可以用来修饰一个成员变量

修饰类

当final关键字用来修饰一个类的时候,

格式:

text
1
2
3
public final class 类名称 {
//...
}

含义:当前这个类,不能有任何子类,也就是太监类(继承就会报错)

注意:一个类如果是final的,那么其中的所有的成员方法都不能进行覆盖重写(因为没有儿子)

修饰方法

当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。

格式:

text
1
2
3
修饰符 final 返回值类型 方法列表(参数列表){
//方法体
}

注意事项:

对于类、方法来说,abstract和final关键字不能同时使用,因为矛盾(abstract是一定要被重写的,final关键字是不能被重写的)

修饰局部变量

Student.java

text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
public class Student {
	private String name;

	public Student() {

	}

	public Student(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

Main.java

text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static void main(String[] args) {
		int num=10;
		System.out.println(num);//10
		num=20;
		System.out.println(num);//20
		
		
		//一旦使用final来修饰局部变量,那么这个变量就不能进行更改
		//一次赋值,终身不变
		final int num1=10;
		System.out.println(num1);//10
		//num1=20;//错误写法,不能改变
		//num1=10;//即使数值一样也是错误写法,只能赋值一次
		
		final int num2;
		num2=10;//这个是正确写法,只要保证赋值一次即可
		System.out.println(num2);
		
		//对于基本类型来说,不可变,指的是变量当中的值不可改变
		//对于引用类型来说,不可变,指的是变量当中的地址值不可改变,但是存储的值是可以变的
		Student stu1 = new Student("哈哈");
		System.out.println(stu1);
		System.out.println(stu1.getName());//哈哈
		stu1=new Student("呵呵");
		System.out.println(stu1);
		System.out.println(stu1.getName());//呵呵
		
		final Student stu2=new Student("娃哈哈");
		System.out.println(stu2+stu2.getName());//地址不变+娃哈哈
//		stu2=new Student("哦呵呵");//报错
//		System.out.println(stu2+stu2.getName());
		
		stu2.setName("哦呵呵");
		System.out.println(stu2+stu2.getName());//地址不变+哦呵呵
	}

修饰成员变量

对于成员变量来说,如果使用final关键字来修饰,那么这个变量也不可变

  1. 由于成员变量具有默认值,所以用了final之后,必须手动赋值,不然就是默认值,且无法改变
  2. 对于final的成员变量,要不直接赋值,要不通过构造方法赋值。二者选其一
  3. 必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值,如果不能用,就直接赋值
text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
public class Person {
	//方案一
	//private final String name="八戒";
	
	
	//方案二
	private final String name;


	public Person() {
		this.name="八戒";
	}

	public Person(String name) {
		this.name = name;
	}
	
}

二、权限修饰符

Java中有四种权限修饰符

publicprotected(default)private
同一个类(我自己)YesYesYesYes
同一个包(我邻居)YesYesYesNo
不同包子类(我儿子)YesYesNoNo
不同包非子类(陌生人)YesNoNoNo

注意事项:

(default)不是关键字,而是根本不写