ACAC java中final关键字

java中final关键字

/*
	1、final关键字:
		java 中的一个关键字,最终的,不可变的
		可以修饰变量以及方法,还有类等。
		
		1、修饰的方法,修饰的类无法被覆盖,无法被重写,无法被继承
			 写的方法不希望被子类修改,就加final
		
		2、final控制不了能不能调用的问题,final修饰的表示最后的,不能变的,
			 
			 不是说你加了个final,就不能调用(父类中final是不能覆盖修改的,但是可以调用,子类中用final无意义,)
			 而是说你不想这个方法被修改
			 一句话概括:final修饰的方法不能被修改,可以被调用

		3、final修饰的变量:
				final int i = 100;
				i = 200;
				错误: 无法为最终变量i分配值
				说明一旦用final 修饰变量,
				则是程序员不希望,final重新赋值,
				一句话概括:final修饰的变量只能赋一次值

		b类继承A类,想当于对A类的功能进行拓展,
		如果不希望别人对A类进行拓展
		可以给A类添加final关键字,这样A类就无法继承。
		H:\Java\Javajdk\bin
		
		

		调用子类特有的方法是,要想下转型
		A  a = new B();

		if( a instanceof B){
			B b = (B) a;
			b.teyoufangfa();
			}


	*/
 class A{

	
	public final void sum(int a,int b){
		int c = a +b;
		System.out.println("final修饰方法,进行求和:"+ a + "+ " + b + "=" + c);
	}

	 public static void main(String[] args){

		 	//final int i = 100;
			//	i = 200;
			A c = new A();
			int a = 100;
			int b = 200;
			c.sum(a,b);

			B d = new B();
			d.sum(a,b);

	 }
}
class B extends A{

}

=======================================================

/*

		final 修饰的变量,如果这个变量是一个“引用”会怎样?
		”引用“是不是一个变量呢? 是的
			
			错误: 无法为最终变量p2分配值

			final修饰的引用:
						该引用只能指向一个对象,
						并且他只能永远指向该对象,无法再指向其他对象
						并且在该方法执行过程中,该引用指向对象之后,
						不会被垃圾回收器回收
						直到当前方法结束,才会释放空间

			局部变量没有初始值,只能手动赋值,成员变量有初始值

		
*/
public class FinalTest02{

	public static void main(String[] args){

		Person p1 = new Person(12);
		System.out.println(p1.age);


		//代码怎么变化,p 也是一个变量(不过这里他叫引用)
		final Person p2 = new Person(20);
		p2.age = 40;
		//这样是可以的,因为并没有指向其他对象,可以修改内部的数据
		

		/*p2.Person(40);
			错误: 找不到符号
                p2.Person(40); 
				注意:构造方法不能用对象调用
				构造方法直接new Person(123)的时候用
				*/

		//p2 = new Person(20);
		//错误: 无法为最终变量p2分配值

	}
}
class Person{

	int age;

	public Person(int age){
		this.age = age;

	}
}

=================================================

/*

		final修饰的实例变量呢?
		万变不离其宗,final修饰的变量只能赋值一次

		实例变量如果没有手动赋值的话,系统会赋默认值

		但实例变量的话,必须手动赋值
		不赋值的话:
					final int age;
					age 未在默认构造器中初始化

*/
public class FinalTest03{	

	public static void main(String[] args){
		}
	}

	class User	{

		final int age = 12; 

		final int he;

		public User(){

			//只要赶在系统赋默认值之前赋值就行
			this.he = 180;
			
			//系统什么时候赋默认值???
			//系统赋默认值是这个时候
			(是在执行系统默认的无参构造方法的时候进行赋值),
			并不是说声明 int a 的时候赋值
			// he = 0;
		}

		//这样也可以

	}
=====================================================


/*

		
		实例变量的缺点:
				实例变量在堆中,一个对象一份,声明一百个,
				每次为这个实例变量开一个空间,它本身又不能变,浪费内存

		既然实例变量用final修饰,说明该实例变量的值不会随着对象的变化而变化

		final修饰的实例变量,一般用static修饰,存储在方法区,节省内存

		结论:static final 联合修饰的变量称为“常量”
					常量名建议全部大写,每个单词间用下划线衔接
				


```j
	常量:实际上和静态变量一样,区别:常量的值不能变

		常量和静态变量都储存在方法区,都是在类加载时初始化

		常量一般是公开的:public的,因为改不了

*/

public class FinalTest04{

	public static void main(String[] args){

	}
}

class Chinese{

	public static final String COUNTRY = "中国";
}

/*
	总结:
		final 修饰的类无法继承
		final 修饰的方法无法覆盖
		final 修饰的变量只能赋一次值
		final 修饰的引用一旦指向某个对象,则不能再重新指向其他对象,
		但该引用指向的对象内部的数据可以更改
		final 修饰的实例变量不能被系统默认赋值,只能手动赋值
		final 修饰的实例变量一般和static联合,称为常量
	*/
出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值