Java学习13

news2024/11/15 19:24:42

目录

一.内部类:

1.概念:

2.内部类的分类:

(1)定义在外部类的局部位置上(通常在方法体中):

      1. 局部内部类(有类名)

     2.匿名内部类(无类名-重点!!!)

     3.匿名内部类的细节:

(2)定义在外部类的成员位置:

         3.成员内部类(不用static修饰)

         4.静态内部类(使用static修饰)

二.枚举:

1.定义:

2.自定义枚举:

3.使用关键字enum来实现枚举:

4.enum关键字实现枚举的注意事项:

5.enum方法介绍:

三.注解:

(1)注解细节:

(2)元注解:

1.Retention:

2.Target:

3.Document:

4.Inherited:


一.内部类:

1.概念:

一个类的内部又完整的嵌套另一个类,被嵌套的类称为内部类,嵌套其他类的类称为外部类,类的五大成员包括属性、方法、构造器、代码块、内部类。内部类的最大特点就是可以直接访问私有熟悉,并且可以体现类与类之间的包含关系。

2.内部类的分类:

(1)定义在外部类的局部位置上(通常在方法体中):
      1. 局部内部类(有类名)
  • 可以直接访问外部类的所有成员,包括私有的,作用域位于定义它的方法或代码块中。
  • 不能添加访问修饰符,因为它是局部变量,局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量可以使用final修饰。
  • 局部内部类可以直接访问外部类的成员,外部其他类不能访问局部内部类。
  • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员则可以使用【外部类名.this.成员】去访问。
class Outer{
   private int n1 = 100;
   private void m2(){
      System.out.println("Outer m2()");
   }
   public void m1(){
      final class Inner {
          private int n1 = 200;
          public void f1(){
             System.out.println("Inner"+n1);//就近原则输出200
             System.out.println("Outer"+Outer.this.n1);//输出100
             m2();
          }
      }
   }
}
     2.匿名内部类(无类名-重点!!!)
  1. 本质:匿名内部类是无名字的内部类,同时是一个对象。
  2. 基本语法:new 类或接口(参数列表){类体};
     3.匿名内部类的细节:
  • 可以访问外部类的所有成员,包括私有的
  • 不能添加访问修饰符,因为它是一个局部变量。
  • 作用域:仅仅在定义它的方法或代码块中
  • 如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员则可以使用【外部类名.this.成员】去访问。
class Outer04{
    private int n1 =10;
    public void method() {
        //tiger的编译类型是接口IA,运行类型是匿名内部类。
        //匿名内部类使用一次就不能再使用
        // class Outer04$1 implements IA{
        //public void cry() {
        //System.out.println("老虎叫");
        //}
        //}
        IA tiger = new IA() {
            @Override
            public void cry() {
                System.out.println("老虎叫");
            }
        };
        tiger.cry();
        Father father = new Father("jack");//father1编译类型Father,运行类型Father
        Father father1 = new Father("jack"){//创建匿名内部类,father1编译类型Father,运行类型Outer04$2
            //参数Jack会传递给构造器
            @Override
            public void test() {
                System.out.println("匿名内部类重写test()方法");
            }
        };
        System.out.println("father对象的运行类型"+father1.getClass());//Outer04$2
        father1.test();
        new Father("tom"){//匿名内部类返回对象,可直接调用方法
            @Override
            public void test() {
                super.test();//Father类中的test方法
                System.out.println("重写匿名内部类2");
            }
        }.test();//匿名内部类返回对象,可直接调用方法
}
}
interface IA {
    public void cry();}
class Father {
    public Father(String name){ }
    public void test(){
    System.out.println("Father类中的test方法");}
}
(2)定义在外部类的成员位置:
         3.成员内部类(不用static修饰)

(1)概念:定义在外部类的成员位置,并且没有static修饰。

(2)细节:

  • 可以直接访问外部类的所有成员,包含私有的,可以添加任意访问修饰符。外部类也可以直接访问内部类中的成员。
  • 作用域:和外部类的其他成员一样,为外部类的整体。
  • 如果外部类和成员内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员则可以使用【外部类名.this.成员】去访问。
  • 外部类访问内部类的三种方法:
public class InnerClassExercise01 {
    public static void main(String[] args) { 
       Outer08 outer08 = new Outer08;
       outer08.t1();
       //相当于把new Inner08()当做outer08成员(第一种方法得到Inner08的对象实例)
       Outer08.Inner08 inner08 = outer08.new Inner08();(第二种方法)
       Outer08.Inner08 inner08Instance = outer08.getInner08Instance();
       Outer08.m1();
       Outer08.Inner10 inner100 = new Outer.Inner10();//静态内部类可以通过类名直接访问(方法一)
       Outer08.Inner10 inner101 = outer08.getInner10();
       Outer08.Inner10 inner102 = Outer08.getInner10();
       inner10.say();
       
    } 
}
class Outer08{
      private int n1=10;
      class inner08{//成员内部类
      public double sal =99.8;
      public void say(){
             System.out.println("n1="+n1); 
      }
      }
     //第二种方法得到Inner08的实例
      public Inner08 getInner08Instance(){
             return new Inner08();
      }     
      public void t1(){
             Inner08 inner = new Inner08();
             Inner08.say();
      }
       static class Inner10{//静态内部类
              public void say(){
              System.put.println(name);
              say();
              }
       }
       public void m1(){
             Inner08 inner10 = new Inner10();
             Inner10.say();
      }
       public Inner10   getInner10(){
              return new Inner10();  
}
      
      
         4.静态内部类(使用static修饰)

(1)概念:定义在外部类的成员位置,并且有static修饰。

(2)细节:

  • 可以访问外部类的所有静态成员,包含私有的,但是不能直接访问非静态成员。
  • 可以添加任意修饰符,作用域为整个整体。
  • 如果外部类和静态内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员则可以使用【外部类名.成员】去访问。

二.枚举:

1.定义:

枚举是一组常亮的集合,属于一种特殊的类,里面只包含一组有限的特定的对象。

2.自定义枚举:

  1. 将构造器私有化
  2. 删除set相关方法,防止属性被修改
  3. 在season内部,直接创建固定的对象

3.使用关键字enum来实现枚举:

  1. 使用关键字enum来替代class
  2. 常量名(实参列表)
  3. 如果有多个常量对象,使用   ,间隔即可
  4. 如果使用enum来实现枚举要求将定义的常量对象写在前面。

4.enum关键字实现枚举的注意事项:

  • 当使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类。
  • 如果使用无参构造器创建枚举对象时,则无参构造器可以省略括号--()。
  • 当有多个枚举对象时,使用 ,间隔,最后用一个分号结尾。
  • 枚举对象必须放在枚举类的行首。
  • 使用enum关键字后,就不能再继承其他类了,enum会隐式继承Enum。
  • 枚举类和普通类一样可以实现接口。

5.enum方法介绍:

(1)values :返回当前枚举类中所有的常量

Season[] values = Season.values();
for(Season season:values){//增强for循环
   System.out.println(season);
}

(2)valuesof:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则异常

根据你输入的"AUTUMN"到Season的枚举对象去查找,找到了就返回,没找到就报错。

Season autumn1 = Season.valuesof("AUTUMN");
System.out.println("autumn1="+autumn1);//autumn1=Season{name='秋天',desc='温暖'}
System.out.println(autumn == autumn1);//true

(3)compareTo:比较两个枚举变量的编号(Season.AUTUMN--枚举对象)

三.注解:

(1)注解细节:

  • 注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
  • 修饰注解的注解称为元注解。
  • SuppressWarnings的作用范围是和你放置的位置有关

(2)元注解:

1.Retention:

2.Target:

3.Document:

4.Inherited:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 基础命令使用创建用户

浏览网站的时候图片,看到一个小练习。创建用户分别位于不同的用户组。 解答下面的题目 2、建立用户使用 useradd,设置密码使用passwd的命令。大概不会使用命令可以借助man来解答。 先建立用户组: groupadd group1 # group1 不存在先建立&…

Redis底层数据结构之ZSkipList

目录 一、概述二、ZSkipList结构三、和平衡树和哈希表的对比 redis底层数据结构已完结👏👏👏: ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️redis底层数据结构之Dict☑️redis…

可替代IBM DOORS的现代化需求管理解决方案Jama Connect,支持数据迁移及重构、实时可追溯性、简化合规流程

作为一家快速发展的全球性公司,dSPACE一直致力于寻找保持领先和优化开发流程的方法。为推进其全球现代化计划,dSPACE开始寻找可以取代传统需求管理平台(IBM DOORS)的需求管理解决方案。 通过本次案例,您将了解dSPACE为…

【YOLO 系列】基于YOLO V8的火灾烟雾监控检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

摘要: 火灾烟雾的及时检测对于人们的生命财产安全至关重要。然而,在大多数情况下,火灾往往在被发现时已经进展到了难以控制的阶段,这导致了严重的后果。为了解决这一问题,我们提出了基于深度学习技术的火灾烟雾检测系…

前端开发攻略---介绍HTML中的<dialog>标签,浏览器的原生弹框。

1、演示 2、介绍 <dialog> 标签用于定义对话框&#xff0c;即一个独立的窗口&#xff0c;通常用来显示对话框、提示框、确认框等弹出式内容。在对话框中&#xff0c;可以包含文本、表单元素、按钮等内容&#xff0c;用户可以和这些内容进行交互。 3、兼容性 4、示例代码 …

03-MVC执行流程-参数解析与Model

重要组件 准备Model&#xff0c;Controller Configuration public class WebConfig {ControllerAdvicestatic class MyControllerAdvice {ModelAttribute("b")public String bar() {return "bar";}}Controllerstatic class Controller1 {ResponseStatus(H…

现代永磁同步电机控制原理pdf及全套matlab仿真模型

现代永磁同步电机控制原理pdf及matlab仿真模型。全书包含SVPWM, DTC, Lun, smo, EKF, HFI等经典控制算法。将书中10章节涉及到的模型复原搭建模型。 模型获取链接&#xff1a;现代永磁同步电机控制原理pdf及全套matlab仿真模型

电商API数据采集接口||大数据的发展,带动电子商务产业链,促进了社会的进步

最近几年计算机技术在诸多领域得到了有效的应用&#xff0c;同时在多方面深刻影响着我国经济水平的发展。除此之外&#xff0c;人民群众的日常生活水平也受大数据技术的影响。 主流电商API数据采集接口||在这其中电子商务领域也在大数据技术的支持下&#xff0c;得到了明显的进…

windows环境下DVWA靶场搭建

目录 一&#xff0c;安装PHPstudy 二&#xff0c;DVWA靶场上传 一&#xff0c;安装PHPstudy 具体安装步骤&#xff0c;请看上篇文章https://blog.csdn.net/m0_72210904/article/details/138258609?spm1001.2014.3001.5501 二&#xff0c;DVWA靶场上传 压缩包&#xff1a;&…

计算机混合运算(计算器)

学习贺利坚老师,计算机混合运算, 做出处理混合运算 数据结构例程——表达式求值&#xff08;用栈结构&#xff09;_用栈表达式求值-CSDN博客文章浏览阅读1.5w次&#xff0c;点赞14次&#xff0c;收藏61次。本文针对数据结构基础系列网络课程(3)&#xff1a;栈和队列中第5课时栈…

工业异常检测

工业异常检测在业界和学界都一直是热门&#xff0c;近期其更是迎来了全新突破&#xff1a;与大模型相结合&#xff01;让异常检测变得更快更准更简单&#xff01; 比如模型AnomalyGPT&#xff0c;它克服了以往的局限&#xff0c;能够让大模型充分理解工业场景图像&#xff0c;判…

与 Apolo 共创生态:Apolo 7周年大会我的启示与心得分享

文章目录 前言一、Apolo加速企业自动驾驶解决方案落地二、应用X企业预制套件&#xff1a;启示与心得三、Studio X企业协同工具链&#xff1a;共创心得分享 前言 本篇文章我将围绕Apolo 7周年来给大家分享我所学习到的内容和一些心得。 Apolo 7周年活动链接&#xff1a;https:…

2024年【陕西省安全员C证】报名考试及陕西省安全员C证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年陕西省安全员C证报名考试为正在备考陕西省安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的陕西省安全员C证考试资料祝您顺利通过陕西省安全员C证考试。 1、【多选题】下列做法正确的有&#…

模块化兼容性

模块化兼容性 由于webpack同时支持CommonJS和ES6 module&#xff0c;因此需要理解它们互操作时webpack是如何处理的 同模块化标准 如果导出和导入使用的是同一种模块化标准&#xff0c;打包后的效果和之前学习的模块化没有任何差异 不同模块化标准 不同的模块化标准&#x…

Vue入门到关门之计算属性与监听属性

一、计算属性 1、什么是计算属性 计算属性是基于其它属性计算得出的属性&#xff0c;就像Python中的property&#xff0c;可以把方法/函数伪装成属性&#xff0c;在模板中可以像普通属性一样使用&#xff0c;但它们是基于响应式依赖进行缓存的。这意味着只有在依赖的响应式数…

jsp servlet 学生信息管理系统

一、角色划分 1、超级管理员 2、学生 二、模块展示 1、登录 2、列表页面【超级管理员展示所有用户信息、学生只展示当前登录用户信息】 3、新增 4、编辑 三、数据库【mysql】 四、运行演示 jsp servlet 学生信息管理系统

Django模型继承之多表继承

在Django模型继承中&#xff0c;支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表&#xff0c;并且可以被独立查询和创建。在继承关系中&#xff0c;子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

新闻稿的正文应该怎样写?纯干货

新闻稿作为传播信息的重要载体&#xff0c;正文的撰写至关重要。新闻稿的正文应该怎样写&#xff1f;伯乐网络传媒来给大家揭秘高质量新闻稿的写作结构与技巧&#xff01; 一、新闻稿正文的结构 1. 导语 a. 概括新闻事件的核心内容&#xff1a;导语是新闻稿的开篇&#xff0c;…

纯血鸿蒙APP实战开发——预渲染实现Web页面瞬开效果

介绍 为了便于大家在使用本案例集时能够更详细的了解各个案例&#xff0c;本案例基于Web预渲染实现了案例介绍功能&#xff0c;即应用右下角的问号icon。 效果图预览 使用说明 因为直接加载的线上README&#xff0c;因此本功能需联网使用点击icon&#xff0c;即会弹出对应案…

跟TED演讲学英文:The secret ingredient of business success by Pete Stavros

The secret ingredient of business success Link: https://www.ted.com/talks/pete_stavros_the_secret_ingredient_of_business_success? Speaker: Pete Stavros Date: April 2024 文章目录 The secret ingredient of business successIntroductionVocabularyTranscriptSu…