学习笔记,仅供参考


文章目录

  • 面向对象
    • final关键字
      • final关键字修饰类,方法以及变量的特点
      • final关键字修饰局部变量
      • final修饰变量的初始化时机

面向对象

final关键字

final关键字修饰类,方法以及变量的特点

  • final修饰的特点

    • 修饰类,类不能被继承
    • 修饰变量,变量就变成了常量,只能被赋值一次
    • 修饰方法,方法不能被重写
  • 举个例子(final修饰方法)
class FinalTest {public static void main(String[] args) {Son s = new Son();s.print();}
}class Father {public final void print() {System.out.println("Father");}}class Son extends Father {public void print() {System.out.println("Father");}
}

报错:

---------- javac ----------
FinalTest.java:17: 错误: Son中的print()无法覆盖Father中的print()public void print() {^被覆盖的方法为final
1 个错误Output completed (4 sec consumed) - Normal Termination
  • 举个例子(final修饰类)
class FinalTest {public static void main(String[] args) {Son s = new Son();s.print();}
}final class Father {public void print() {System.out.println("Father");}}class Son extends Father {public void print() {System.out.println("Father");}
}

报错:

---------- javac ----------
FinalTest.java:16: 错误: 无法从最终Father进行继承
class Son extends Father {^
1 个错误Output completed (5 sec consumed) - Normal Termination
  • 举个例子(final修饰变量)
class FinalTest {public static void main(String[] args) {Father f = new Father();f.print();}
}class Father {final int NUM = 10; //final修饰的变量叫做常量,一般会与public static共用public void print() {NUM = 20;System.out.println(NUM);}}

报错:

---------- javac ----------
FinalTest.java:12: 错误: 无法为最终变量NUM分配值NUM = 20;^
1 个错误Output completed (4 sec consumed) - Normal Termination

final关键字修饰局部变量

用final修饰的局部变量如果是基本类型,则它的值不能被改变;

用final修饰的局部变量如果是引用类型,则它的地址值不能被改变,但对象中的属性可以改变。

  • 举个例子(final修饰基本数据类型)
class FinalTest2 {public static void main(String[] args) {final int num = 10;num = 20;System.out.println(num);}
}

输出:

---------- javac ----------
FinalTest2.java:4: 错误: 无法为最终变量num分配值num = 20;^
1 个错误Output completed (2 sec consumed) - Normal Termination
  • 举个例子(final修饰引用数据类型)
class FinalTest2 {public static void main(String[] args) {final Person p = new Person("张三",23);p = new Person("李四",24);System.out.println(p.getName() + "..." + p.getAge());}}class Person {private String name;private int age;public Person(){}public Person(String name,int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
}

报错:

---------- javac ----------
FinalTest2.java:5: 错误: 无法为最终变量p分配值p = new Person("李四",24);^
1 个错误Output completed (2 sec consumed) - Normal Termination

虽然用final修饰过后我们不能创建新的对象,但是可以改变原对象的属性值:

class FinalTest2 {public static void main(String[] args) {final Person p = new Person("张三",23);p.setName("李四");p.setAge(24);System.out.println(p.getName() + "..." + p.getAge());}}class Person {private String name;private int age;public Person(){}public Person(String name,int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
}

输出:

李四...24

final修饰变量的初始化时机

  • 举个例子(显示初始化)
class FinalTest2 {public static void main(String[] args) {Demo d = new Demo();d.print();}}class Demo {final int num = 10;public void print() {System.out.println(num);}
}

输出:

10
  • 举个例子(构造方法中进行初始化)
class FinalTest2 {public static void main(String[] args) {Demo d = new Demo();d.print();}}class Demo {final int num ;public Demo() {num = 10;}public void print() {System.out.println(num);}
}

输出:

10

第三次学JAVA再学不好就吃翔(part33)--final关键字相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

最新文章

  1. KiFastCallEntry() 机制分析
  2. python3多个变量赋值
  3. P6466-分散层叠算法(Fractional Cascading)【模板】
  4. Properties类与IO流
  5. 八爪鱼 是java做的吗_章鱼扫描仪:Java构建工具和恶意软件
  6. c 语言多参数函数,C/C++实现多参数函数编程
  7. python列表求和显示unsupport_本地使用pip命令安装requests库,提示unknow or unsupported command install解决方法...
  8. c++builder 运行网站的api_欧美音乐网站Python爬虫项目实战
  9. Struts2配置国际化文件
  10. PHP - 后台权限
  11. Python编程之求累乘和
  12. mysql创建临时表
  13. LINGO进行灵敏度分析为何总提醒92/237错误
  14. Beats: 使用 Filebeat 进行日志结构化 - Python
  15. C++:链表(初识链表)
  16. 【论文阅读】(2022)A goal-driven ruin and recreate heuristic for the 2D variable-sized bin packing prob...
  17. FPGA - 7系列 FPGA内部结构之Clocking -03- 时钟管理模块(CMT)
  18. 行云管家堡垒机如何登录服务器 1
  19. 前端特效:Javascript,css animation,GIF,Lottie
  20. Android转发短信给QQ机器人

热门文章

  1. C++编程思想:C++string
  2. mysql超长sql查询_超长SQL怎么查询?MySQL列长度限制有哪些 | 学步园
  3. mysql源码自适应哈希索引_MySQL 自适应哈希索引
  4. redhat6.4安装nginx
  5. Python rfind()方法
  6. 《D3.js数据可视化实战手册》—— 1.1 简介
  7. redis服务部署及配置详解
  8. 一个即将步入运维的菜虫内心
  9. 2.Strings and Console Output(字符串与输出)
  10. 超级详细的教程 一步步教你Vue项目中使用axios如何进行参数拼接