final关键字

1    使用final修饰的变量必需要给它赋予初始值(也能够在构造函数中赋予初始值),不然编译没法经过。java

 

2    对于final关键字修饰的变量赋予初始值的方法函数

  • 直接在定义的时候  final  xxx xxx = xxx;
  • 构造函数中赋予初始值;

含有final关键字修饰的变量,对于其赋值 ,要么在定义变量的时候赋值,要么在构造函数中进行构造赋值,不管构造函数入参是什么,是否有入参,构造器中必须同时包含全部的有final关键字修饰的变量并对其进行赋值,不然编译没法经过。this

这不是从程序执行的角度来看(程序执行可能用不到类中定义的函数或者变量),而是从程序自己的角度去考虑,考虑这个程序是否有逻辑上的不通,是否能够在逻辑上被全部能使用这个程序的其余程序所调用。spa

 

3    final关键字修饰的对象变量是不变的地址值,其中的属性的值是能够变,不变的只是对象所在的地址值,只保证对象(地址)不变,不关心对象到底有什么样的属性,或者属性的值是否会变。code

 

4    final修饰的变量不能赋值两次,哪怕两次赋值的东西是同一个东西,它无论你赋的什么值,它只关心你只要赋值一次,第二次就不能再进行赋值操做。对象

下面的是具体的例子。get

public class NoteBook {
	private int num;
	private String name;

	public void setNum(int num) {
		this.num = num;
	}

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

	public int getNum() {
		return num;
	}

	public String getName() {
		return name;
	}
}

 

public class Human {
	private String name;
	private final int age;
	private String address;
	private final NoteBook notebook;

	
	//这几个构造函数的例子就是说明不管入参是什么,是否入参,又要对final关键字修饰的变量进行初始化;
	public Human() {
		age = 120;
		notebook = new NoteBook();
	}

	public Human(int age, NoteBook notebook) {
		this.age = age;
		this.notebook = notebook;
	}
	
	public Human(int xxx1, String xxx2, char xxx3) {
		age = 580;
		this.notebook = new NoteBook();
		xxx1 ++;
		this.address = xxx2;
	}



	public void setAddress(String address) {
		this.address = address;
	}

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

	// public void setNoteBook(NoteBook notebook) {
	// 	this.notebook = notebook;
	// } 由于 notebook是final修饰的,因此不能二次赋值;


	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

	public String getAddress() {
		return address;
	}

	public NoteBook getNoteBook() {
		return notebook;
	}


}

 

public class Test {
	public static void main(String args[]) {
		NoteBook notebook = new NoteBook();
		notebook.setNum(15);
		Human human = new Human(599,notebook);

		System.out.println(human.getAge());
		System.out.println(human.getNoteBook().getNum());


		notebook.setNum(9999999);//对final修饰的对象变量的属性进行二次赋值

		System.out.println(human.getNoteBook().getNum());//,编译经过,结果是9999999

	}

}
相关文章
相关标签/搜索