当前位置: 首页 > news >正文

面向对象编程(十二)——final关键字



final关键字

Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

回到顶部

final修饰变量

  • final修饰变量:该变量变成常量

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

上面的一段代码中,对变量i和obj的重新赋值都报错了。

回到顶部

final修饰方法

  • final修饰方法:该方法不能被子类重写,但可以被重载!

 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 
使用final方法的原因有二: 
    第一、把方法锁定,防止任何继承类修改它的意义和实现。 
    第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

回到顶部

final修饰类

  • final修饰类:final修饰类则说明:这个类不能被继承!不能有子类。比如:String,Math.

Math类:

 

String类:

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

回到顶部

Final && Static 

static和final一块用表示什么 ?
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”! 
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 
对于方法,表示不可覆盖,并且可以通过类名直接访问。

回到顶部

总结

JAVA中final 与 static 总结
 finalstatic
修饰类该类不可被继承只能修饰内部类,该类不需要new,是静态加载(嵌套顶层类)
修饰接口××
修饰构造函数××
修饰语句块×虚拟机按声明顺序初始化static成员字段和static语句块
修饰字段属性表示属性初始化后不能修改(实例常量)是类变量,所有实例共享该变量值(类变量)
在定义时或构造函数中赋值(每个实例拥有一份拷贝)
修饰方法该方法不能被覆盖(只可继承)是类方法,所有实例共享该方法(类方法)
修饰函数参数参数值不能被函数修改×
修饰函数局部变量局部变量初始化后不能修改(局部常量)×
   
用途1).为了防止方法被覆盖或改写;1).定义全局变量或常量;
2).提高运行效率,JAVA对final方法调用采用内嵌机制;2).定义类方法;
二、JAVA类加载顺序
JAVA类加载顺序:1).按代码顺序递归加载静态成员/代码块,先父类再本类;
 2).按代码顺序递归加载非静态成员/代码块,先父类再本类;
 3).按代码顺序递归调用构造函数,先父类再本类;
  
JAVA类加载时机:1).调用静态成员时,加载静态成员所在的类及父类;
 2).第一次new对象时加载(第二次new不再加载)
 3).加载子类会先加载父类.有static和final修饰的成员不会被加载;当成常量使用;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考文章:

面向对象编程(七)——Static关键字

 

from: http://www.cnblogs.com/Qian123/p/5177167.html

相关文章:

  • 【Unity笔记】获得鼠标点击屏幕的位置,并转成世界坐标
  • Win7下不能查看xp系统共享的文件,解决方法
  • 加载 xib 文件 UIView
  • 最优化局部极小点的条件(二)
  • 如何从Apache官网下载windows版apache服务器
  • SparseArrayE详解
  • Ubuntu 12.04安装ssh出现“unable to locate package apenssh-server”
  • 我也来开发2048之主界面设计
  • 独立GPSamp;50米防水 华为运动手环上手体验
  • PowerShell处理RSS信息
  • HTML友情链接代码
  • DOM中的动态NodeList与静态NodeList
  • springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询
  • ceph学习笔记之三Object
  • 第七章 对称加密算法--DES
  • $translatePartialLoader加载失败及解决方式
  • 「译」Node.js Streams 基础
  • CSS 专业技巧
  • emacs初体验
  • input实现文字超出省略号功能
  • JS题目及答案整理
  • Lucene解析 - 基本概念
  • MaxCompute访问TableStore(OTS) 数据
  • PAT A1050
  • ReactNative开发常用的三方模块
  • Redis学习笔记 - pipline(流水线、管道)
  • Sass 快速入门教程
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue--为什么data属性必须是一个函数
  • Web Storage相关
  • 电商搜索引擎的架构设计和性能优化
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 人脸识别最新开发经验demo
  • 微信小程序--------语音识别(前端自己也能玩)
  • raise 与 raise ... from 的区别
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #QT(串口助手-界面)
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Nginx简介和安装教程
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (分布式缓存)Redis持久化
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)为什么要选择C++
  • .htaccess 强制https 单独排除某个目录
  • .NET Core WebAPI中封装Swagger配置
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET是什么
  • @RequestBody与@ResponseBody的使用