final关键字

代表最终、不可改变的

常见四种用法:

  1. 可以用来修饰一个类

    不能使用一个final类来作为父类

    格式:

    public final class 类名称{}//当前这个类不能有任何的子类
    

    注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写。

  2. 可以用来修饰一个方法

    这个方法就是最终方法,也就是不能被覆盖重写。

    格式:

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

    注意:对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。

  3. 还可以用来修饰一个局部变量

    一旦使用final用来修饰局部变量,那么这个变量就不能进行改变(只能赋值一次),只需要保证有唯一一次赋值即可(final int num; num = 30;正确)

    对于基本类型来说,不可变说的是变量当中的数据不可改变

    对于引用类型来说,不可变说的是变量当中的地址值不可改变(内容可变,就是不能再new了)

  4. 还可以用来修饰一个成员变量

    对于成员变量来说,如果final关键字修饰,那么这个变量也照样是不可变的。

    1. 由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了。
    2. 对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选一。
    3. 必须保证类当中所以重载的构造方法,都最终会对final的成员变量进行辅助。

权限修饰符

Java中有四种权限修饰符:public > protected > (default) > private

在同一个类中四种权限修饰符都可以访问

在同一个包内除private(私有)都可以访问

在不同包,子类中,除private和(default)都可以访问

在不同包非子类中,只有public(公共)可访问

内部类

如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。

成员内部类

修饰符 class 外部类名称{

​ 修饰符 class 内部类名称{

​ //…

​ }

​ //…

}

注意:内用外,随意访问;外用内,需要内部类对象。

如何使用成员内部类?

  1. 间接方式:在外部类的方法中,使用内部类;然后main只是调用外部类方法

  2. 直接方式:公式

    类名称 对象名 = new 类名称();

    外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();

局部内部类

如果一个类是定义在一个方法内部的,那么这就是一个局部内部类

“局部”:只有当前所属的方法才能 使用它,除了这个方法外面就不能用了

格式:

修饰符 class 外部类名称{

​ 修饰符 返回值类型 外部类方法名称(参数列表) {

​ class 局部内部类内存{

​ // …

​ }

​ }

}

定义一个类的时候,权限修饰符规则:

  1. 外部类 :public / (default)
  2. 成员内部类: public / protected / (default) / private
  3. 局部内部类:什么都不能写

局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final的

备注:从Java 8+开始, 只要局部变量事实不变,那么final关键字可以省略。

原因:

  1. new出来的对象在堆内存当中。
  2. 局部变量是跟着方法走的,在栈内存当中。
  3. 方法运行结束后,立刻出栈,局部变量就会立刻消失。
  4. 但是new出来的对象会在堆当中持续存在,直到垃圾回收消失。

匿名内部类

如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。那么这种情况下就可以省略掉该类的定义,而改为使用匿名内部类(把实现类改为匿名内部类)

匿名内部类的定义格式:

接口名称 对象名 = new 接口名称(){

​ //覆盖重写所有抽象方法

​ //大括号内是一个没有名字的类,匿名内部类

};

注意事项:

对格式"new 接口名称(){…}"进行解析:

  1. new代表创建对象的对象
  2. 接口名称就是匿名内部类需要实现那个接口
  3. {…}这才是匿名内部类的内容

另外:

  1. 匿名内部类,在创建对象的时候,只能使用唯一一次。

    如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类。

  2. 匿名对象,在调用方法的时候,只能调用唯一一次。

    如果希望同一个对象,调用多次方法,那么必须给对象起个名字。

  3. 匿名内部类是省略了实现类/子类名称,但是匿名对象是省略了对象名称

强调:匿名内部类和匿名对象不是一回事!

类作为成员变量类型

作为成员变量的类中有成员变量,构造方法,get/set方法。

调用这个类作为成员变量,private 类名 成员变量名;其他和普通的成员变量一样。

在方法中,其他直接成员变量,这个类作为的成员变量是类名.get其中的成员变量()。

接口作为成员变量类型

作为成员变量的接口中有一个抽象方法

创建一个实现类重写接口中的抽象方法(或者不创建,在main方法中时用匿名内部类的写法)

调用这个接口做成员变量,private 接口名 成员变量名;

在方法中调用这个接口作为的成员变量,成员变量名.实现类其中的抽象方法();

Java_Day10 final关键字、权限修饰符、内部类相关推荐

  1. java内部类的权限符,static介绍、内部类、final、权限修饰符的作用范围,

    static介绍.内部类.final.权限修饰符的作用范围,static 关键字:(可用于修饰方法.变量) static 特点: static是静态修饰符,一般修饰成员变量.被static修饰的属于全 ...

  2. JAVA面向对象:相关基础知识(带包编译--权限修饰符--内部类)

    目录 1.带包编译 2.权限修饰符 3.内部类 1.带包编译 解决使用notepad++ 等文本编辑器编写的java类中如果需要 package 的解决方案: 手动式:手动建包,.java文件放在包外 ...

  3. JAVA-------封装+Private关键字+权限修饰符+This关键字

    封装 封装就是隐藏对象的属性和实现细节,仅对外提供公共的访问方式 为什么要封装: ​ 提高代码的安全性 ​ 提高代码的维护性 ​ 隐藏代码细节,只提供公共的访问方式 如何实现封装: ​ 利用Priva ...

  4. 每日加瓦,终成栋房4-final、内部类、权限修饰符

    今天份内容:final 权限修饰符 内部类 一.final 1.意思:最终的.不可变的 2.作用:修饰成员变量.修饰方法.修饰符.修饰局部变量 3.特点:final修饰基础数据类型的值的时候是不可改变 ...

  5. Java基础(10)接口、方法的参数类型以及返回值类型、权限修饰符

    1.接口 1. 接口的由来:为了体现事物功能的扩展性,Java通过接口来定义这些额外的扩展功能.但是并不给出具体实现,需要类来重写 2. 接口的特点 (1)定义接口:interface 定义格式:in ...

  6. java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)

    final关键字: final表示最终的不可变的,在java中可以用来修饰类或方法.局部变量.成员变量. // 1.final关键字修饰类需要放在class关键字前面,表示不可变的类,需要注意,这里表 ...

  7. final关键字概念及其四种用法、四种权限修饰符的优先级以及内部类的相关概念

    一.final关键字代表最终.不可改变的. 常见的四种用法: ①.可以用来修饰一个类. ②.可以用来修饰一个方法. ③.还可以用来修饰一个局部变量. ④.还可以用来修饰一个成员变量. (1).修饰一个 ...

  8. java基础2:this、static、final、abstract关键字、代码块、生成API工具包、继承、多态、方法重载和重写,抽象类、接口、常见异常、java权限修饰符、选择排序思想和程序和内部类

    1.this关键字 this表示当前类对象的地址空间值的引用.就是说,this代表了new出来的对象 其最大作用就是解决了构造器中局部变量隐藏成员变量.即用this.变量名 = 变量名 区分. 2.s ...

  9. 包 权限修饰符 final 常量 枚举 抽象类 接口 多态 内部类 常用API 正则表达式 Lambda

    包 什么是包? 包是用来分门别类的管理各种不同类的,类似于文件夹.建包利于程序的管理和维护. 建包的语法格式:package 公司域名倒写.技术名称.报名建议全部英文小写,且具备意义. package ...

最新文章

  1. 200919阶段一C++STL容器
  2. sublime代码整理
  3. 【转】使用ant来调用Jmeter,并定制运行时参数
  4. spring-boot-maven-plugin插件
  5. 95-134-114-源码-维表-Hbase维表关联:LRU策略
  6. Java中上转型对象数组
  7. 学习笔记(1):JDBC连接池
  8. [词性] 四、形容词
  9. 三角函数诱导公式一:奇变偶不变,符号看象限
  10. 寒霜朋克计算机丢失,Frostpunk寒霜朋克冰汽时代已停止工作修复补丁(Windows6.1-KB2670838-x64)...
  11. Java整合FFmpeg截取视频某一帧为图片
  12. mysql table already_MySQL优化表时提示 Table is already up to date的解决方法
  13. 网址导航哪个好(最好的导航网站)
  14. 误删了efi分区,怎么样恢复,使电脑开机回到windows
  15. 5G安全,5G防御,5G网络安全,5G信息安全
  16. Android与鸿蒙系统安全(三)
  17. 黑马程序员 面向对象总结2
  18. Pygame 官方文档 - pygame.mouse
  19. windows下boost的安装与初试
  20. antd的栅格系统使用

热门文章

  1. LRU算法原理及实现
  2. AppleWatch有什么好用的软件?这6款watch软件让你的Apple Watch更实用
  3. 如何恢复回收站中清空的文件
  4. 2022/09/07 day04:命令3
  5. nodejs入门(五)
  6. 利用js跳转页面与返回页面
  7. 稳压二极管的应用及注意事项
  8. C语言实现swap函数
  9. linux修改用户密码
  10. 文本框下载jQuery UI Datepicker精美的日期选择组件