final关键字

1    使用final修饰的变量必须要给它赋予初始值(也可以在构造函数中赋予初始值),否则编译无法通过。

 

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

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

含有final关键字修饰的变量,对于其赋值 ,要么在定义变量的时候赋值,要么在构造函数中进行构造赋值,无论构造函数入参是什么,是否有入参,构造器中必须同时包含所有的有final关键字修饰的变量并对其进行赋值,否则编译无法通过。

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

 

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

 

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

下面的是具体的例子。

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

	}

}

 

转载于:https://my.oschina.net/u/3544275/blog/1036916

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值