java学习之局部内部类

news2024/10/6 10:31:31

目录

一、内部类简介

二、内部类的分类 

三、局部内部类

第一点

第二点

第三点

第四点

第五点

第六点

第七点


一、内部类简介

 类的五大成员:属性、方法、构造器、代码块、内部类

package com.hspedu.innerclass;

public class InnerClass01 {
    public static void main(String[] args) {

    }
}
class Outer{//外部类
    private int n1 = 100;//属性
    public Outer(int n1) {//构造器
        this.n1 = n1;
    }
    public void m1() {//方法
        System.out.println("m1()");
    }
    {//代码块
        System.out.println("代码块...");
    }
    class Inner{//内部类

    }
}

二、内部类的分类 

三、局部内部类

第一点

局部内部类是定义在外部类的局部位置,通常在方法
package com.hspedu.innerclass;

public class LocalInnerClass {
    public static void main(String[] args) {

    }
}
class Outer02{//外部类
    private int n1 = 100;
    private void m2(){
        System.out.println("外部类Outer02的private方法m2()");
    }
    public void m1(){
        //局部内部类:定义在外部类的局部位置,通常是方法
    
        class Inner02{//局部内部类

          

        }
    }
}

第二点

1.可以直接访问外部类的所有成员,包括private成员
package com.hspedu.innerclass;

public class LocalInnerClass {
    public static void main(String[] args) {

    }
}
class Outer02{//外部类
    private int n1 = 100;
    private void m2(){
        System.out.println("外部类Outer02的private方法m2()");
    }
    public void m1(){
        //1.局部内部类:定义在外部类的局部位置,通常是方法
        
        class Inner02{//局部内部类
            //2.可以直接访问外部类的所有成员,包括private成员
       
            public void f1(){
                System.out.println("n1=" + n1);
                m2();
            }

        }
    }
}

第三点

3.不能添加访问修饰符,但是可以使用 final 修饰

 

  

可以用final来修饰,这样局部内部类Inner03就不可以被继承 

 

第四点

4.作用域:仅仅在定义它的方法或代码块中,类Inner02的作用域仅仅在方法m1()中

    public void m1(){
        //1.局部内部类:定义在外部类的局部位置,通常是方法

        //3.不能添加访问修饰符,但是可以用final修饰
        //用final修饰之后,该类就不能被继承
        //4.作用域:仅仅在定义它的方法或代码块中,类Inner02的作用域仅仅在方法m1()中
         final class Inner02{//局部内部类(本质仍然是一个类)
             //2.可以直接访问外部类的所有成员,包括private成员
            public void f1(){
                
                System.out.println("n1=" + n1);
                m2();
            }
        }
    }

如果在类的代码块中定义一个局部内部类,那么这个局部内部类的作用域就在这个代码块中

 //代码块
    {
        //在代码块中写一个局部内部类,Inner03的作用域仅限于这个代码块
        class Inner04{

        }
    }

 

第五点

5. 局部内部类可以直接访问外部类的成员, 比如 下面 直接访问外部类 n1 和 m2()
class Outer02{//外部类
    private int n1 = 100;
    private void m2(){
        System.out.println("外部类Outer02的private方法m2()");
    }
    public void m1(){
        //1.局部内部类:定义在外部类的局部位置,通常是方法

        //3.不能添加访问修饰符,但是可以用final修饰
        //用final修饰之后,该类就不能被继承
        //4.作用域:仅仅在定义它的方法或代码块中,类Inner02的作用域仅仅在方法m1()中
         final class Inner02{//局部内部类(本质仍然是一个类)
             //2.可以直接访问外部类的所有成员,包括private成员
            public void f1(){
                //5. 局部内部类可以直接访问外部类的成员, 比如 下面 直接访问外部类 n1 和 m2()
                System.out.println("n1=" + n1);
                m2();
            }
        }
        
    }

   
}

第六点

6. 外部类访问内部类的成员: 在方法m1()中, 可以创建 Inner02 对象, 然后调用方法即可
package com.hspedu.innerclass;

public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
    }
}
class Outer02{//外部类
    private int n1 = 100;
    private void m2(){
        System.out.println("外部类Outer02的private方法m2()");
    }
    public void m1(){
        
         final class Inner02{//局部内部类(本质仍然是一个类)
           
            public void f1(){
                
                System.out.println("n1=" + n1);
                m2();
            }
        }

        //6. 外部类访问内部类的成员: 在方法m1()中, 可以创建 Inner02 对象, 然后调用方法即可
        Inner02 inner02 = new Inner02();
         inner02.f1();
    }


   
}

1.在方法m1()(作用域)中创建局部内部类Inner02的对象实例inner02

2.然后调用局部内部类的方法f1()

3.在main方法中创建外部类Outer02的对象实例outer02

4.调用外部类Outer02中的方法m1()

第七点

7.外部其他类不能访问局部内部类

 第八点

如果外部类和局部内部类的成员重名时, 默认遵循就近原则, 如果想访问外部类的成员,
使用  外部类名.this.成员  去访问
 

package com.hspedu.innerclass;

public class LocalInnerClass {//外部其他类
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
        System.out.println("outer02的hashCode()=" + outer02);
        //7.外部其他类不能访问局部内部类
        //Inner02 inner021 = new Inner02();
    }
}
class Outer02{//外部类
    private int n1 = 100;
    private void m2(){
        System.out.println("外部类Outer02的private方法m2()");
    }

    public void m1(){
        
         final class Inner02{//局部内部类(本质仍然是一个类)
             private int n1 = 200;
             //2.可以直接访问外部类的所有成员,包括private成员
            public void f1(){
                
                //8.如果外部类和局部内部类的成员重名时, 默认遵循就近原则, 如果想访问外部类的成        员,
                // 使用 外部类名.this.成员  去访问
                //分析:Outer02.this 本质就是外部类的对象, 即哪个对象调用了 m1, Outer02.this 就是哪个对象

                // Outer02.this指的是外部类Outer02的对象,
                // 在这个例子中对象outer02在main方法中调用了m1()方法
                //所以Outer02.this和对象outer02的hashCode值是一样的

                System.out.println("Inner02的n1=" + n1 + "\tOuter02的n1" +     Outer02.this.n1);
                m2();
                System.out.println("Outer02.this的hashCode()=" + Outer02.this);
            }
        }



        //6. 外部类访问内部类的成员: 在方法m1()中, 可以创建 Inner02 对象, 然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }

  
}

Outer02.this 本质就是外部类的对象, 即哪个对象调用了 m1, Outer02.this 就是哪个对象

           1)Outer02.this指的是外部类Outer02的对象,
          2)在这个例子中对象outer02在main方法中调用了m1()方法
          3)所以Outer02.this和对象outer02的hashCode值是一样的

运行结果如下:

 

 


                

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

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

相关文章

2023 年嵌入式世界的3 大趋势分析

目录 大家好,本文讲解了嵌入式发展的3个大趋势,分享给大家。 趋势#1 – Visual Studio Code Integration 趋势#2 –支持“现代”软件流程 趋势 #3 – 在设计中利用 AI 和 ML 结论 大家好,本文讲解了嵌入式发展的3个大趋势,分享…

1、Git使用不完全指南:GitHub的使用详解

GitHub 是一个以开源为基础的社交化编程平台,开发者可以在上面分享代码、协同开发、交流等。下面我们来讲一下如何使用 GitHub。 1. 注册 GitHub 账号 首先,我们需要在 GitHub 上注册一个账号,访问GitHub官网:GitHub: Let’s bui…

IDEA win11安装flutter环境

1.环境说明 操作系统:win11编辑器:Idea 2022.2.1Flutter:3.7.7JDK:17 2.安装 Flutter SDK 2.1安装flutter sdk flutter中文网 2.2配置环境变量 1)在环境变量path中加入flutter的安装路径:D:\DevelopT…

结合PCA降维的DBSCAN聚类方法(附Python代码)

目录 前言介绍: 1、PCA降维: (1)概念解释: (2)实现步骤: (3)优劣相关: 2、DBSCAN聚类: (1)概念解释&a…

关于镜头畸变问题的总结

1、问题背景最近在做的项目有畸变校正的需求,但测试镜头畸变时,发现畸变的形态不太正常。如下图所示中间向内凹、四周向外凸,感觉像是曲线型的。但常见的畸变就两种,一种是向内收的枕形畸变,另一种是向外凸的桶形畸变&…

SpringCloud:ElasticSearch之DSL查询文档

elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如…

第04章_IDEA的安装与使用(上)

第04章_IDEA的安装与使用(上) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 【Why IDEA ?】 【注】JetBrains官方说明: 尽管我们采取了多种…

从二叉树角度看归并排序

归并排序本质上可以看作二叉树的后序遍历 里面用到的核心思想 > 分治 分:二叉树算法思想中的分解问题思想 治:链表中双指针技巧(将两条链表合并成一条有序链表) sort首先将数组分成左半边和右半边 > 然后分别对左右两…

Log库和配置系统结构

Log库: 类关系 首先有3个大类:LogEvent、LogAppender、Logger、LogFormat; 关系如下: Logger:具体log的实现 LogAppender:将Log信息传输到不同的目的地,根据不同的需求派生出不同的类 LogF…

Java 系列 Nacos

Java 系列文章 文章目录Java 系列文章前言一、Nacas 介绍及安装1. 什么是Nacos2. 为什么使用Nacos3. Nacos 下载和安装二、Nacos服务提供者注册1. Nacos代替Eureka2. Nacos服务注册中心3. Nacos Discovery引入1. 创建新项目2. POM3. YML文件4. 启动类5. 业务类6. 测试&#xff…

Git如何推送当前代码到远程仓库

第一种方法 (建立在已经配置好用户变量和ssh基础上) 在本地创建git仓库 git init 绑定远程仓库,origin是给远程仓库起的别名,也可以起其他名字,但是如果用origin,git push时可以不指出名字,如果…

【2023 · CANN训练营第一季】昇腾AI入门课(Pytorch)——第一章学习笔记

第一章 昇腾AI基础知识介绍 第2节 昇腾AI全栈架构 昇腾 AI 全栈可以分成四个大部分: 1.应用使能层面,此层面通常包含用于部署模型的软硬件,例如 API 、 SDK 、部署平台,模型库等等。 2. AI 框架层面,此层…

【C语言】 程序员的自我修养之(程序编译过程)

在ANSI C(标准C)的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。 今天我们就讲解他们在这环境过程都做了什么。 文章目录详解编译链接翻译环境编…

【数据库原理 • 七】数据库并发控制

前言 数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。 当前…

【19】核心易中期刊推荐——人工智能 | 遥感信息处理

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

redis——优化

键值设计bigKey例子批处理单机 pipeline集群服务器持久化慢查询安全内存集群问题集群完整性集群带宽数据倾斜客户端性能命令的集群兼容性lua和事务&#xff1a;集群下不支持键值设计 长度 < 44 节省内存。string的底层数据结构中&#xff0c;编码格式embstr&#xff08;连续…

LeetCode:455. 分发饼干——贪心算法

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 贪心算法是在每个阶段选取局部最优解&#xff0c;最终得到全局最优解的一种思想。贪心算法…

操作系统论文导读(四):Minimizing Memory Utilization of Real-Time Task Sets in Single and…

目录 一、论文核心思想&#xff1a; 二、降低RAM的思想 三、基本的相关定义 四、单处理器方面 五、优化单处理器中的堆栈使用 六、多处理器方面 七、基本的相关调度 八、协议特点 Minimizing Memory Utilization of Real-Time Task Sets in Single and Multi-Processor…

算法记录 | Day29 回溯算法

491.递增子序列 思路&#xff1a; 1.确定回溯函数参数&#xff1a;定义全局遍历存放res集合和单个path&#xff0c;还需要 nums数组startindex&#xff08;int&#xff09;为下一层for循环搜索的起始位置。 2.终止条件&#xff1a;当startindex >len(nums)&#xff0c;r…

C++初阶—vector深度剖析及模拟实现

目录 ➡️0. 前言 &#x1f60a;1.简易框架实现 &#x1f414;1. 无参构造 &#x1f414;2. 容量capacity — 长度size() &#x1f414;3. 动态增长 — push_back—pop_back — reserve &#x1f414;4. 迭代器的实现 &#x1f414;4.front和back的实现 &#x1f60a;2…