一、final关键字概述

 final关键字具有最终或不可改变的含义,可用于修饰类、变量、方法。因此被final修饰的类、变量、方法具有以下特征:
    --final修饰的类不能被继承;
    --final修饰的方法不能被子类重写;
    --final修饰的变量(成员变量和局部变量)是常量,只能赋予一次。

 二、使用方式
  1)修饰类,格式如下:

public final class 类名称 {
// ...
}

  2)修饰方法,格式如下:

修饰符 final 返回值类型 方法名称(参数列表) {
// ...
 }

  3)修饰变量

  成员变量

  final修饰的成员变量初始化(赋值)有两种方式,一种是直接赋值,另一种是通过构造方法赋值,二者选其一。
  a.直接赋值代码示例:

package cn.sjk.study.java.final;

public class Person {

    //方法1:直接赋值
private final String name = "sjk"; }

  b.通过构造方法赋值代码示例:

package cn.sjk.study.java.final;

public class Person {

    //方法2:定义时没有赋值,通过构造方法来赋值
private final String name; public Person(String name) {
this.name = name;
}
}

  注意:当使用构造方法对final修饰的成员变量赋值时,必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值,代码示例:

package cn.sjk.study.java.final;

    public class Person {

        private final String name;
//下面的无参构造方法和带参构造方法里都必须对final的成员变量进行赋值,否则编译不通过
public Person() {
name = "sjk";
}
public Person(String name) {
this.name = name;
} }

  实际开发中,初始化非final修饰的成员变量除了上面两种方式外,我们还会通过set()方法对其赋值,但是对final修饰的成员变量,只能通过上面两种方法中的任意一种,否则赋值编译会报错。如以下操作不合法:

package cn.sjk.study.java.final;

public class Person {

    private final String name;

    //对于final修饰的变量使用这种赋值方式不可行
public void setName(String name) {
this.name = name;
}
}

  局部变量-基本类型

  基本类型的局部变量,被final修饰后,只能复制一次,不能再改变。代码示例如下

package cn.sjk.study.java.final;

public class FinalDemo {
public static void main(String[] args) {
//声明变量,使用final修饰
final int age;
//第一次赋值
age = 18;
//第二次赋值
age =28; //报错,不可重复赋值 //声明变量,直接赋值,使用final赋值
final int age = 18;
//第二次赋值
age = 28; //报错,不可重复赋值 }
}

  局部变量-引用类型
  引用类型的局部变量,被fianl修饰后,只能指向一个对象,地址不能再改变。但不影响对向内部的成员变量值的修改,代码示例如下:

public class FinalDemo2 {
public static void main(String[] args) {
//创建Person对象
final Person p = new Person();
//创建另一个person对象
p = new Person(); //报错,指向了新对象,地址改变 //调用setName方法
p.setName("sjk"); //可以修改
}
}

  思考,下面两种写法,哪一种可以编译通过?
  写法1:

final int age = 0;
for (int i = 0; i < 10; i++) {
age = i;
System.out.println(age);
}

  写法2:

for (int i = 0; i < 10; i++) {
final int age = i;
System.out.println(age);
}

  根据 final 的定义,写法1报错!写法2,为什么通过编译呢?因为每次循环,都是一次新的变量age。这也是大家 需要注意的地方。

fianl关键词的更多相关文章

  1. 微软“.Net社区虚拟大会”dotnetConf2015:关键词:.NET 创新、开源、跨平台

    去年 11 月的时候,微软开源了 .NET CoreFX,然后是今年 2 月份的 .NET CoreCLR.自那时以来,已经有大约 3500 人在 GitHub 上进行了提交,而且贡献者的人数还在持续 ...

  2. JavaScript中‘this’关键词的优雅解释

    本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...

  3. dede织梦批量导入关键词

    在后台替换对应的文件件即可. 注意:如果你的关键字长度超过16个字符的话,需要更改 dede 中 keywords 表中的keyword 字段字符长度 article_keywords_main.ph ...

  4. 使用python抓取百度搜索、百度新闻搜索的关键词个数

    由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...

  5. SEO优化---学会建立高转化率的网站关键词库

    想要优化好一个网站,行业的分析,以及关键词的挖掘是必要的,有一定的关键词排名了,但是转化率和流量方面却很不理想这种情况大部分是只注重了有指数的关键词排名,而忽略了长尾关键词和一些没有指数但是可以带来巨 ...

  6. 该不该在C#中使用var关键词

    作为一个并不勤快的程序猿,在项目开发过程中总是想尽办法少写代码,对var关键词的使用自然不会放过,几乎在每个能使用var的地方都用了var,对此,很多朋友同事给出了不同的建议,觉得能不使用var关键词 ...

  7. SEO:避免关键词内部竞争带来的无法收录问题,

    站内关键词相互竞争在未经过搜索引擎优化的网站中常出现.许多人不理解搜索引擎对关键词的索引原理,以为在整站内频繁布局某几个热门关键词能提升这些词的排名. 一.搜索引擎希望展现多种多样的搜索结果 搜索引擎 ...

  8. TF-IDF提取行业关键词

    1. TF-IDF简介 TF-IDF(Term Frequency/Inverse Document Frequency)是信息检索领域非常重要的搜索词重要性度量:用以衡量一个关键词\(w\)对于查询 ...

  9. MS SQLServer的关键词BETWEEN的一些注意事项

    近段时间在程序中写到有关搜索的功能.其中有使用到MS SQLServer的关键词BETWEEN,它是搜索数值范围(包括本身)之间的数据. 在使用它时,一些情况还需要注意的.如果时间的数据. 搜索时间数 ...

随机推荐

  1. C# 类 (7) - 抽象 Abstract

    Abstract 抽象类,关键字Abstract ,最典型的应用就是在 继承机制里 作为base类,抽象类是不能被实例化的(前面说的static 类也不能被实例化)它必须作为 基类,被别人继承,然后必 ...

  2. ZOJ 2563 Long Dominoes(状压DP)题解

    题意:n*m的格子,用1 * 3的矩形正好填满它,矩形不能重叠,问有几种填法 思路:poj2411进阶版.我们可以知道,当连续两行的摆法确定,那么接下来的一行也确定.当第一行还有空时,这时第三行必须要 ...

  3. github gist 无法访问

    转自这里 以管理员身份在hosts文件: Windows: C:\Windows\System32\drivers\etc Ubuntu: /etc/hosts 添加: 192.30.253.118 ...

  4. js code review

    js code review https://codereview.stackexchange.com/ refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只 ...

  5. JavaScript 实现 (ECMAScript 6)

    JavaScript 的核心 ECMAScript 描述了该语言的语法和基本对象: DOM 描述了处理网页内容的方法和接口: BOM 描述了与浏览器进行交互的方法和接口. ECMAScript.DOM ...

  6. Vue 3 In Action

    Vue 3 In Action $ yarn add vue https://v3.vuejs.org demos refs https://v3.vuejs.org/guide/migration/ ...

  7. CSS style color all in one

    CSS style color all in one https://developer.mozilla.org/en-US/docs/Web/CSS/color_value /* Hexadecim ...

  8. Python Web Frameworks

    Python Web Frameworks top 10 Python web frameworks Django (Full-stack framework) Flask (Micro framew ...

  9. rem & 16px & 62.5%

    rem & 16px & 62.5% 浏览器的默认字体大小都是16px 兼容性:IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem 对不支持的浏 ...

  10. taro ref & wx.createSeletorQuery

    taro ref & wx.createSeletorQuery https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.cr ...