JAVA入门级教学之(final关键字)

 * 1.final是一个关键字,表示最终的,不可变的
 * 
 * 2.final修饰的类无法被继承
 * 
 * 3.final修饰的方法无法被覆盖
 * 
 * 4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】
 * 
 * 5.final修饰的实例变量,必须手动赋值,不能采用系统默认值
 * 
 * 6.final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收
 * 
 * 7.final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的
 * 
 * 8.final修饰的实例变量,一般和static联合使用,被称为常量

--------------------------------------------------------------------------------------------------------------------------------------------------------------- 

 新建一个User类

package com.lbj.javase12;

public class User {
 public int id;

public User() {
	super();
}

public User(int id) {
	super();
	this.id = id;
}



 
}

 新建一个测试类

package com.lbj.javase12;
/**
 * 1.final是一个关键字,表示最终的,不可变的
 * 
 * 2.final修饰的类无法被继承
 * 
 * 3.final修饰的方法无法被覆盖
 * 
 * 4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】
 * 
 * 5.final修饰的实例变量,必须手动赋值,不能采用系统默认值
 * 
 * 6.final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收
 * 
 * 7.final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的
 * 
 * 8.final修饰的实例变量,一般和static联合使用,被称为常量
 */
public class Test01 {
/*
 * 成员变量之实例变量
 * 
 * 实例变量有默认值+final修饰的变量一旦赋值不能重新赋值
 * 
 * 综合考虑:java语言最终规定实例变量使用final修饰后,必须手动赋值,不能采用系统默认值
 * 
 * 
 */
	//final int age;编译报错
	
	//第一种解决方案
	final int age=10;
	
	//第二种解决方案
	final int num;
	public Test01(){//这里面差一点犯了错误,因为这里我用了自定义的方法,其实是要用类名才行
		this.num=10;
		//以上两种解决方案:其实本质上就是一种方式,都是在构造方法执行过程中给实例变量赋值
	}
	public static void main(String[] args) {
			int i=10;
			System.out.println(i);//10
			
			i=20;
			System.out.println(i);//20
			
//			4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】
			final int k=10;
			//k=20;
			
			final int m;
			m=10;
			
			//m=20;
			
			//------------------------
			//创建用户对象
			User u=new User(100);//User u=ox1234
			
			//又创建了一个新的User对象
			//程序执行到此处表示以上对象已经变成垃圾堆数据,等待垃圾回收器的回收
			u=new User(200);//u=nv12231
			
			//创建用户对象
			final User user=new User(30);
			//user=new User(50);//final修饰的引用,一旦指向某个对象后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收
			//相当于绑定了user这个引用只能和一个对象连接
			//final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部是可以被修改的
			user.id=50;
			
			//-----------------
			//访问国籍
			System.out.println(Chinese.GUO_JI);//已经固定,不能修改
			
	}

}
//中国人
class Chinese{
	/*
	 * 国籍
	 * 
	 * 需求:每一个中国人的国籍都是中国,而且国籍是不会发生改变的,为了防止国籍被修改,建议加final修饰
	 * 
	 * final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为常量
	 * 
	 * 常量的定义语法格式:
	 * 		public static final 类型.常量名=值;
	 * 
	 * java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接
	 */
	public static final String GUO_JI="中国";
}









package com.lbj.javase16;
/**
 * 深入final
 * 
 * final修饰的引用类型,该引用不可再重新指向其它的java对象
 * 
 * 但是final修饰的引用,该引用指向的对象的属性是可以修改的
 *
 */
public class Test02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		final Customer c=new Customer("123",12);
		
		//c是final的,无法重新赋值
		//c=new Customer("LKKK",20);
		
		c.name="321";
		c.age=25;
		
		System.out.println(c.name);
		System.out.println(c.age);
	}

}
class Customer{
	
	String name;
	int age;
	
	Customer(String name,int age){
		this.name=name;
		this.age=age;	
	}
}
发布了81 篇原创文章 · 获赞 3 · 访问量 2452

猜你喜欢

转载自blog.csdn.net/LBJ8888888/article/details/104547669