目录
引言
final修饰类
final修饰方法
final修饰变量
final修饰局部变量
final修饰成员变量
final修饰变量注意点
引言
今天我们重点来讲解一下Java中的final关键字,首先我们可以通过字面意思理解final关键字——“最终,最后”,因此被final关键字修饰的类、方法、变量将被赋予最终的含义:类:修饰过后的类不能被子类继承;方法:修饰过后的方法不能被重写;变量:修饰过后的变量不能被二次修改。接下来对其详细地讲解:
今天我们重点来讲解一下Java中的final关键字,首先我们可以通过字面意思理解final关键字——“最终,最后”,因此被final关键字修饰的类、方法、变量将被赋予最终的含义:类:修饰过后的类不能被子类继承;方法:修饰过后的方法不能被重写;变量:修饰过后的变量不能被二次修改。接下来对其详细地讲解:
final修饰类
❤️❤️❤️ final修饰的类,类不能被继承❤️❤️❤️
//未被final修饰的father类
public class son extends father{
}
public class father{
}
//被final修饰的father类
public class son extends father{
//son无法继承father类,会出现报错!
}
public final class father{
}
final修饰方法
final修饰的方法,方法不能被重写
//未被final修饰的方法
public class son extends father{
//可以正常重写say()方法
@Override
public void say(){
System.out.println("可以给零花钱吗?");
}
}
public class father{
public void say(){
System.out.println("Hello!");
}
}
//被final修饰的方法
public class son extends father{
//由于say()被final修饰,所以无法重写,会报错!
@Override
public void say(){
System.out.println("可以给零花钱吗?");
}
}
public class father{
public final void say(){
System.out.println("Hello!");
}
}
final修饰变量
final修饰的变量,有且仅有一次机会赋值
首先应该明确,在Java中有以下两种变量:
1、局部变量
2、成员变量
i>实例成员变量
ii>静态成员变量
因此变量类型不同,final所造成的影响也会不同
❤️❤️❤️ final修饰的类,类不能被继承❤️❤️❤️
//未被final修饰的father类
public class son extends father{
}
public class father{
}
//被final修饰的father类
public class son extends father{
//son无法继承father类,会出现报错!
}
public final class father{
}
final修饰的方法,方法不能被重写
//未被final修饰的方法 public class son extends father{ //可以正常重写say()方法 @Override public void say(){ System.out.println("可以给零花钱吗?"); } } public class father{ public void say(){ System.out.println("Hello!"); } } //被final修饰的方法 public class son extends father{ //由于say()被final修饰,所以无法重写,会报错! @Override public void say(){ System.out.println("可以给零花钱吗?"); } } public class father{ public final void say(){ System.out.println("Hello!"); } }
final修饰变量
final修饰的变量,有且仅有一次机会赋值
首先应该明确,在Java中有以下两种变量:
1、局部变量
2、成员变量
i>实例成员变量
ii>静态成员变量
因此变量类型不同,final所造成的影响也会不同
final修饰的变量,有且仅有一次机会赋值
首先应该明确,在Java中有以下两种变量:
1、局部变量
2、成员变量
i>实例成员变量
ii>静态成员变量
因此变量类型不同,final所造成的影响也会不同
final修饰局部变量
第一种情况是在main函数中使用final对任意变量进行修饰:
//final未修饰变量
double Pi = 3.1415;
pi = 3.14;
//final修饰变量
final double Pi = 3.1415;
//Pi二次赋值,会报错!
pi = 3.14;
濾第二种情况是在定义的函数中将final修饰的变量作为参数进行传递:
//未使用final对变量修饰
test(3);
public satic void test(int a){
a = 1;
}
//使用final对变量修饰
test(3);
public satic void test(final int a){
//由于在传值的时候已经赋过值了,所以不能二次赋值
a = 1;
}
final修饰成员变量
第一种情况是修饰静态成员变量(public satic final 修饰的也称为常量)
public satic final String name = "石原里美";
//由于final修饰name,所以不能对name二次赋值
name = "工藤静香";
女第二种情况是修饰实例成员变量(由于实例对象属于每个对象,若值无法改变则毫无意义,基本不用)
public final String name = "石原里美";
//由于final修饰,所以不能改变其值
name = "工藤静香";
final修饰变量注意点
- final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
- final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
class actress{
private String name;
public actress(String name){
this.name = name;
}
public getName(){
return name;
}
public setName(String name){
this.name = name;
}
}
actress a = new actress("石原里美");
a = null;//第二次赋值所以报错
System.out.prinyln("a.getName()");
a.setName("工藤静香");//改变的是指针所指向的数据
System.out.prinyln("a.getName()");
//输出结果:
//石原里美
//工藤静香
第一种情况是在main函数中使用final对任意变量进行修饰:
//final未修饰变量 double Pi = 3.1415; pi = 3.14; //final修饰变量 final double Pi = 3.1415; //Pi二次赋值,会报错! pi = 3.14;
濾第二种情况是在定义的函数中将final修饰的变量作为参数进行传递:
//未使用final对变量修饰
test(3);
public satic void test(int a){
a = 1;
}
//使用final对变量修饰
test(3);
public satic void test(final int a){
//由于在传值的时候已经赋过值了,所以不能二次赋值
a = 1;
}
第一种情况是修饰静态成员变量(public satic final 修饰的也称为常量)
public satic final String name = "石原里美"; //由于final修饰name,所以不能对name二次赋值 name = "工藤静香";女第二种情况是修饰实例成员变量(由于实例对象属于每个对象,若值无法改变则毫无意义,基本不用)
public final String name = "石原里美"; //由于final修饰,所以不能改变其值 name = "工藤静香";
final修饰变量注意点
- final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
- final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
class actress{
private String name;
public actress(String name){
this.name = name;
}
public getName(){
return name;
}
public setName(String name){
this.name = name;
}
}
actress a = new actress("石原里美");
a = null;//第二次赋值所以报错
System.out.prinyln("a.getName()");
a.setName("工藤静香");//改变的是指针所指向的数据
System.out.prinyln("a.getName()");
//输出结果:
//石原里美
//工藤静香
- final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
- final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
class actress{ private String name; public actress(String name){ this.name = name; } public getName(){ return name; } public setName(String name){ this.name = name; } } actress a = new actress("石原里美"); a = null;//第二次赋值所以报错 System.out.prinyln("a.getName()"); a.setName("工藤静香");//改变的是指针所指向的数据 System.out.prinyln("a.getName()"); //输出结果: //石原里美 //工藤静香
创作不易,给个三连吧!



