package Demo20;
/*
final关键字代表最终,不可改变的
常见的四种用法:
1、可以修饰一个类
2、可以修饰一个方法
3、可以修饰一个局部变量
4、可以用来修饰一个成员变量
//对于基本数据类型来说,不可改变的是变量中的数据不可改变
//对于引用数据类型来说,不可改变是变量中的地址值不可改变,
*/
public class DemoFinal {
public static void main(String[] args){
final int num = 10;
System.out.println(num);
//不能改变
//num = 20;
//正确写法,只要保证有唯一赋值即可
final int num1;
num1 = 20;
Student stu1 = new Student("赵丽颖");
System.out.println(stu1);
System.out.println(stu1.getName());
stu1 = new Student("霍建华");
System.out.println(stu1);
System.out.println(stu1.getName());
System.out.println("=================");
final Student stu2 = new Student("高圆圆");
//错误写法! final的引用类型变量,其中地址值不可改变
//stu2 = new Student("赵又廷");
//地址值不可一改变,但是可以修改具体的名字
System.out.println(stu2.getName());//高圆圆
stu2.setName("高圆圆圆圆圆圆圆");
System.out.println(stu2.getName());}}
package Demo20;
/*
对于成员变量来说,如果使用了final关键字修饰,那么这个变量也不可以改变
1、由于成员变量具有默认值,所以用了final之后必须手动赋值,不能再给默认值了。
2、对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值,二者选其一。
3、必须保证类当中所有的重载的构造方法,都最终会对final的成员变量进行赋值。
*/
public class Person {
//如果是这样赋值,就不能通过构造方法赋值了
private final String name /*="鹿晗"*/;
public Person(){
name ="关晓彤";}
public Person(String name){
this.name = name;}
public String getName(){return name;}
// public void setName(String name){
// this.name = name;
// }}
package Demo20;
public class Student {
private String name;
public Student(){}
public Student(String name){
this.name = name;}
public String getName(){return name;}
public void setName(String name){
this.name = name;}}
package Demo20;
/*
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写
格式:
修饰符 final 返回值类型 方法名称(参数列表){
//方法体
}
注意事项:
对于类】方法来说,abstract 和final关键字不能同时使用
*/
public class Fu {
public final void method(){
System.out.println("父类方法");}}
package Demo20;
public class Zi extends Fu {
//不能重写父类中final的方法
// @Override
// public void method(){
// System.out.println("覆盖父类方法");
// }}
package Demo20;
/*
当final关键字用来修饰一个类时,
格式:
public final class 类名称{
//
}
注意事项:
1、不能有任何子类
2、一个类如果是final的,那么其中所有的成员方法都是无法进行重写的
*/
public final class MyClass {
public void method(){
System.out.println("方法执行!");}}
package Demo20;
//不能使用一个final类来作为父类
public class MySubClass /*extends MyClass*/{}
package Demo20;
/*
java有四种权限修饰符:
public > protected >(default)> private
同一个类 yesyesyesyes
同一个包 yesyesyes No
不同包子类 yesyes No No
不同包非子类 yes No No No
注意事项:(default)并不是"default",而是根本不写
*/
public class DemoMain {}