1. final关键字

1.概述

为了避免子类出现随意改写父类的情况,java提供了关键字final,用于修饰不可改变内容

  • final:不可改变,可以修饰类,方法和变量

    • 类:被修饰的类,不能用于继承
    • 方法:被修饰的方法,不能被重写
    • 变量:被修饰的变量,不能重新赋值

2.使用方式

修饰类

格式如下:

public final class 类名{

}
含义: 当前这个类不能拥有任何的子类. (太监类)
注意: 一个类如果是final的, 那么其中的所有的成员方法都无法进行覆盖重写(没有儿子)

String,Math,Scanner这些类都是被final修饰的,目的是供我们使用,而不让我们改变内容

修饰方法

格式:

修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
//注意: 对于类,方法来说, abstract关键字和关键字final 不能同时使用,矛盾

重写final修饰的方法,编译时就会报错

修饰变量
1.局部变量—基本类型

基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改.

public class FianlDemo{
public static void main(String[] args){
// 声明变量,被final修饰
final int a;
//第一次赋值
a = 10;
//第二次赋值直接报错
final int b = 10;
}
}
写法一
final int c = 0;
for(int i=0;i<10;i++){
c = i;
System.out.println(c);
}
写法二
for(int i=0;i<10;i++){
final int c = i;
System.out.println(c);
}

写法二不会报错,因为每一次循环都是一个新的变量

2.局部变量--引用类型数据

引用类型的局部变量,被final修饰之后,只能指向一个对象,地址不可以更改.但是不影响对象内部的成员变量值得修改

public class FinalDemo2{
public static void main(String[] args){
// 创建User对象
final User u = new User();
// 创建另一个对象
u = new User(); //报错
//调用方法
u.setName("张三"); //可以修改
}
}
3.成员变量

成员变量设计到初始化的问题,初始化两种二选一:

  1. 显示初始化

    public class User{
    final String UserName = "张三";
    private int age;
    }
  2. 构造方法初始化

    public class User{
    final String UserName;
    private int age;
    public User(String username, int age){
    this.UserName = username;
    this.age = age;
    }
    }
    // 注意: 被final修饰的常量名称,一般全部大写

2.权限修饰符

在java中四种访问权限,使用不同的权限修饰符修饰时,被修饰的内容会有不同的访问权限

  1. public: 公共的
  2. protected:受保护的
  3. default:默认的
  4. private:私有的

1.不同权限的访问能力

  public protected default private
同一个类中 yes yes yes yes
同一个包中(子类与无关类) yes yes yes  
不同包的子类 yes yes    
不同包的无关类 yes      

public是最大权限,private是最小权限

编译代码建议:

  1. 成员变量使用 private, 隐藏细节
  2. 构造方法使用 public,方变创建对象
  3. 成员方法使用 public ,方便调用

不加修饰符,其访问能力就是default相同

3.引用数据用法总结

1.class作为成员变量

类作为成员变量的时候,对他进行的赋值操作,实际上是赋值给类的一个对象

2.interface作为成员变量

接口作为成员变量的时候,对他进行的赋值操作,事假上,就是赋值给借口的一个子类对象

3.interface作为方法参数和返回值类型

接口作为参数的,传递的是子类对象

接口作为返回值类型的时候,返回它的子类对象

final,权限,引用类型数据的更多相关文章

  1. Java中final修饰的数据

    目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...

  2. EffectiveC#6--区别值类型数据和引用类型数据

    1. 设计一个类型时,选择struct或者class是件简单的小事情,但是,一但你的类型发生了改变, 对所有使用了该类型的用户进行更新却要付出(比设计时)多得多的工作. 2.值类型:无多态但性能佳. ...

  3. U813.0操作员功能权限和数据权限的设置

    操作员的权限有功能权限.数据权限.金额权限. 1. 给操作员设置功能权限,操作员才能进入系统进行相关业务操作. Admin用户登录无法修改账套,但可以新建.引入.输出.Demo用户每次只能进入一个账套 ...

  4. 中小型WEB系统权限日志数据表设计

    中小型WEB系统权限日志数据表设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc1MDU3OA==/font/5a6L5L2T/fontsi ...

  5. python之路--MySQL权限管理 数据备份还原

    一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...

  6. vue组件父子组件传递引用类型数据

    今天在写分页功能时,发现父子组件传值时,子组件监听不到父组件中数据的变化,传递的是一个引用类型的数据 其原因是引用类型共用一个内存地址,父子组件用的是同一个对象,故子组件监听不到变化,此时就需要做一个 ...

  7. Java从入门到放弃——05.修饰符static,final,权限修饰符

    本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ...

  8. python--MySQL权限管理 数据备份还原

    一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...

  9. Dynamics CRM制作报表的时候让用户可以用自己的权限浏览数据

    我们做SSRS报表的时候最头疼的问题就是用Sql查出来的数据都是全部数据没有做权限过滤,导致不同用户看到的数据是一样的. 确实Dynamics CRM产品的数据库时有对这个做处理的,其中每个实体都会有 ...

随机推荐

  1. 基于缓存或zookeeper的分布式锁实现

    缓存锁  我们常常将缓存作为分布式锁的解决方案,但是却不能单纯的判断某个 key 是否存在 来作为锁的获得依据,因为无论是 exists 和 get 命名都不是线程安全的,都无法保证只有一个线程可以获 ...

  2. 【Spring容器】项目启动后初始化数据的两种实践方案

    早期业务紧急,没有过多的在意项目的运行效率,现在回过头看走查代码,发现后端项目(Spring MVC+MyBatis)在启动过程中多次解析mybatis的xml配置文件及初始化数据,对开发阶段开发人员 ...

  3. Hash的应用2

    代码: #include <stdio.h> #define OFFSET 500000//偏移量 ];//记录每个数是否出现,出现为1,不出现为0 int main(){ int n,m ...

  4. Linux 提升逼格之 命令别名 分享

    1, 使用场景 Linux下开发 肯定是日常要用命令行的,命令行里包含了众多的命令和工具,例如: git.shell.以及一众系统命令等. 举个例子,码农最常用的 git add ,如果加上别名 可设 ...

  5. Spring Boot 2.x (十八):邮件服务一文打尽

    前景介绍 在日常的工作中,我们经常会用到邮件服务,比如发送验证码,找回密码确认,注册时邮件验证等,所以今天在这里进行邮件服务的一些操作. 大致思路 我们要做的其实就是把Java程序作为一个客户端,然后 ...

  6. Java线程安全与数据同步

    import java.util.HashMap; import java.util.concurrent.TimeUnit; public class Test { public static vo ...

  7. Flutter学习笔记(8)--Dart面向对象

    如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...

  8. textarea 绕过jq验证的方法,提交空值

    <textarea placeholder=" aria-required="true" aria-describedby="OtherNotes-err ...

  9. Java面试题必备知识之ThreadLocal

    老套路,先列举下关于ThreadLocal常见的疑问,希望可以通过这篇学习笔记来解决这几个问题: ThreadLocal是用来解决什么问题的? 如何使用ThreadLocal? ThreadLocal ...

  10. 个人永久性免费-Excel催化剂功能第61波-快速锁定解锁单元格及显示隐藏公式

    Excel的所有功能都是需求导向的,正因为有客户在企业管理的过程中,有这样的需求出现了,然后相应的Excel就出现了相应的功能来辅助管理,学习Excel的功能,其实真的可以学习到先进企业的许多的管理思 ...