final,权限,引用类型数据
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.成员变量
成员变量设计到初始化的问题,初始化两种二选一:
- 显示初始化 - public class User{
 final String UserName = "张三";
 private int age;
 }
 
- 构造方法初始化 - public class User{
 final String UserName;
 private int age;
 public User(String username, int age){
 this.UserName = username;
 this.age = age;
 }
 }
 // 注意: 被final修饰的常量名称,一般全部大写
 
2.权限修饰符
在java中四种访问权限,使用不同的权限修饰符修饰时,被修饰的内容会有不同的访问权限
- public: 公共的
- protected:受保护的
- default:默认的
- private:私有的
1.不同权限的访问能力
| public | protected | default | private | |
|---|---|---|---|---|
| 同一个类中 | yes | yes | yes | yes | 
| 同一个包中(子类与无关类) | yes | yes | yes | |
| 不同包的子类 | yes | yes | ||
| 不同包的无关类 | yes | 
public是最大权限,private是最小权限
编译代码建议:
- 成员变量使用 private, 隐藏细节
- 构造方法使用 public,方变创建对象
- 成员方法使用 public ,方便调用
不加修饰符,其访问能力就是default相同
3.引用数据用法总结
1.class作为成员变量
类作为成员变量的时候,对他进行的赋值操作,实际上是赋值给类的一个对象
2.interface作为成员变量
接口作为成员变量的时候,对他进行的赋值操作,事假上,就是赋值给借口的一个子类对象
3.interface作为方法参数和返回值类型
接口作为参数的,传递的是子类对象
接口作为返回值类型的时候,返回它的子类对象
final,权限,引用类型数据的更多相关文章
- Java中final修饰的数据
		目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ... 
- EffectiveC#6--区别值类型数据和引用类型数据
		1. 设计一个类型时,选择struct或者class是件简单的小事情,但是,一但你的类型发生了改变, 对所有使用了该类型的用户进行更新却要付出(比设计时)多得多的工作. 2.值类型:无多态但性能佳. ... 
- U813.0操作员功能权限和数据权限的设置
		操作员的权限有功能权限.数据权限.金额权限. 1. 给操作员设置功能权限,操作员才能进入系统进行相关业务操作. Admin用户登录无法修改账套,但可以新建.引入.输出.Demo用户每次只能进入一个账套 ... 
- 中小型WEB系统权限日志数据表设计
		中小型WEB系统权限日志数据表设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc1MDU3OA==/font/5a6L5L2T/fontsi ... 
- python之路--MySQL权限管理 数据备份还原
		一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ... 
- vue组件父子组件传递引用类型数据
		今天在写分页功能时,发现父子组件传值时,子组件监听不到父组件中数据的变化,传递的是一个引用类型的数据 其原因是引用类型共用一个内存地址,父子组件用的是同一个对象,故子组件监听不到变化,此时就需要做一个 ... 
- Java从入门到放弃——05.修饰符static,final,权限修饰符
		本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ... 
- python--MySQL权限管理 数据备份还原
		一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ... 
- Dynamics CRM制作报表的时候让用户可以用自己的权限浏览数据
		我们做SSRS报表的时候最头疼的问题就是用Sql查出来的数据都是全部数据没有做权限过滤,导致不同用户看到的数据是一样的. 确实Dynamics CRM产品的数据库时有对这个做处理的,其中每个实体都会有 ... 
随机推荐
- c++学习书籍推荐《C++沉思录》下载
			百度云及其他网盘下载地址:点我 编辑推荐 经典C++图书,应广大读者的强烈要求再版 目录 第0章 序幕第一篇 动机第1章 为什么我用C++第2章 为什么用C++工作第3章 生活在现实世界中 第二篇 类 ... 
- java学习笔记(基础篇)—抽象与接口的区别
			抽象与接口的区别 一.抽象(abstract) 1. 抽象方法 1) 作用:定义规范 2) 抽象方法用来描述具有什么功能,但不提供实现. 3) 如果类中一个方法没有实现就要定义一个抽象方法. 2. 抽 ... 
- 网页缓存相关的HTTP头部信息详解
			前言 之前看完了李智慧老师著的<大型网站技术架构-核心原理与案例分析>这本书,书中多次提起浏览器缓存的话题,恰是这几天生产又遇到了一个与缓存的问题,发现自己书是没少看,正经走心的内容却不多 ... 
- RabbitMQ实战(三)-高级特性
			0 相关源码 1 你将学到 如何保证消息百分百投递成功 幂等性 如何避免海量订单生成时消息的重复消费 Confirm确认消息.Return返回消息 自定义消费者 消息的ACK与重回队列 限流 TTL ... 
- Excel催化剂开源第49波-Excel与PowerBIDeskTop互通互联之第三篇
			在PowerBIDeskTop开启的SSAS服务,和Sqlserver所开启的一个本质的区别是,前者其端口号是随机生成的,即上一次打开获得的端口号,下一次关闭后再打开,系统分配给它新的端口号,而后者因 ... 
- 第一个C# Winform实例
			前面我们准备好了相关的库,现在开始搭建环境,本人自动化行业,就用Windorm开发吧,例子仅仅做引导,希望大家能深入.VS版本VS2017 1:打开VS建立一个WInform 项目.拉入两个控件,gr ... 
- Number() 与 parseInt()解析
			在 Python 中,将字符串转为整型变量的函数是 int() ,直接使用 int("123")就可以得到 123的输出结果,这样可以比较快速的得到我们想要的结果,在 js 中将 ... 
- 287. 寻找重复数 Java解法
			287. 寻找重复数 这题的难点就在于下面的说明了,我们先不管下面的那些说明的要求,用常规的解法来解答下上的题目. 排序思想解法 先把原来的数组进行排序,然后逐个遍历,一旦发现后一个元素和当前的元素相 ... 
- JDBC教程
			JDBC代表Java与数据库的连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API. JDBC库包含的API为每个通常与数据库的使用相关联的任务: 使得连接到数据库 创 ... 
- 终极CRUD-2-用lombok提高开发效率
			目录 1 lom介绍与基本使用 2 lombok 注意点 2.1 lombok自动生成方法可以混合自己写的方法 2.2 尽量不要使用@Data 2.3 属性不要使用基本类型 2.4 小心@ToStri ... 
