【Java】内部类【主线学习笔记】

Android14到Android16源码移植中的Bluetooth模块规范适配指南 本文详细解析了从Android14到Android16源码移植过程中Bluetooth模块的规范适配挑战,重点介绍了Android.bp配置差异及常见编译报错解决方案。针对代码规范检查、final字段声明、静态方法优化等核心问题提供实用修复方法,帮助开发者高效完成版本升级适配工作。 阅读详情


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


内部类

在Java中,将一个类A定义在另一个类B的里面,里面那个类A就称为内部类,类B则称为外部类。
当一类事务A的内部,还有一个部分需要一个完整的结构B进行描述,而这个内部的完整的结构B又只为外部事物A提供服务,不在其他地方单独使用,那么这个内部的完整结构B最好使用内部类。遵循高内聚,低耦合的面向对象开发原则。

内部类的使用举例

Thread类内部声明了state类,表示线程的生命周期。
HashMap类中声明了Node类,表示封装的key和value.

内部类的分类

  • 成员内部类:直接声明在外部类的里面。其中有可以根据是否被static修饰而分为静态的成员内部类和非静态的成员内部类。

  • 局部内部类:声明在方法内、构造器内、代码块内。其中又可以分为匿名的局部内部类和非匿名的局部内部类。

成员内部类:

class OuterClass {
    private String outerField = "Outer field";

    // 非静态成员内部类
    class InnerClass {
        void display() {
            System.out.println("Accessing from InnerClass: " + outerField);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建外部类对象
        OuterClass outer = new OuterClass();
        // 通过外部类对象创建内部类对象
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.display();  // 输出: Accessing from InnerClass: Outer field
    }
}

静态成员内部类:

class OuterClass {
    private static String staticOuterField = "Static Outer field";

    // 静态成员内部类
    static class StaticInnerClass {
        void display() {
            System.out.println("Accessing from StaticInnerClass: " + staticOuterField);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建静态内部类对象,不需要外部类实例
        OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();//直接声明内部静态 类
        staticInner.display();  // 输出: Accessing from StaticInnerClass: Static Outer field
    }
}

局部内部类:

class OuterClass {
    void outerMethod() {
        // 定义局部内部类
        class LocalInnerClass {
            void display() {
                System.out.println("This is a local inner class.");
            }
        }
        // 使用局部内部类
        LocalInnerClass localInner = new LocalInnerClass();
        localInner.display();
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.outerMethod();  // 输出: This is a local inner class.
    }
}

匿名局部内部类:

public class OuterClassTest {
    
    //开发中常见情况
    //Comparable是一个接口
    //方式1:提供了接口的实现类的对象
    public Comparable getInstance1(){

        //提供了实现了comparable接口的类
        class myCompare implements Comparable{

            @Override
            public int compareTo(Object o) {
                return 0;
            }
        }
        myCompare c = new myCompare();
        return c;
    }
    
    //方式2:提供了接口的实现类的匿名对象
    public Comparable getInstance2(){

        //提供了实现了comparable接口的类
        class myCompare implements Comparable{

            @Override
            public int compareTo(Object o) {
                return 0;
            }
        }
        return new myCompare();
    }
    
    //方式3:提供了接口的匿名实现类的对象
    public Comparable getInstance3(){
        Comparable c = new Comparable() {
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        };
        return c;
    }

    //方式4:提供了接口的匿名实现类的匿名对象
    public Comparable getInstance4(){
        return new Comparable() {
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        };
    }
    
}

对于成员内部类的理解

从类的角度:可以声明属性、方法、构造器、内部类、代码块等结构;可以声明父类,可以实现接口;可以使用final修饰;可以使用abstract修饰;
从外部类的角度看:在内部可以调用外部类的结构,如属性、方法等;除了使用public、缺省外,还可以用private、protected修饰


遇到一个诡异的WiFi网络问题:同一个办公室苹果电脑上不了网,其他电脑都可以 先来把问题掰开揉碎地看清楚:在一个普通的办公室WiFi网络中,所有设备——Windows电脑、安卓手机、甚至是那台老旧的Linux服务器——都能正常联网,唯独苹果电脑(可能是MacBook、iMac或者Mac mini)像被下了魔咒一样,连不上网。这种情况不仅让人抓狂,还透着一股神秘感。为什么偏偏是苹果电脑?难道WiFi路由器对苹果有“偏见”?这些症状都指向一个核心问题:苹果电脑与办公室WiFi之间,似乎存在某种“沟通障碍”。但这障碍到底出在哪里呢?是苹果电脑自己的问题,还是网络设置在“针对”它? 阅读详情

相关推荐

在Jetson orin板卡上部署ocr模型遇到错误

摘要:安装ONNX Runtime GPU版本时遇到问题,直接pip install onnxruntime-gpu会报错。解决方案是从test.pypi.org下载对应的.whl文件(如ort_nightly-1.14.0...aarch64.whl),本地安装后还需降级NumPy版本(如pip install numpy==1.26),以解决NumPy版本兼容性问题。整个过程涉及三个关键步骤:下载正确架构的wheel文件、本地安装、调整NumPy版本。

xdxd3c的博客 1526

JAVA主线程

Java主线程 当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面: 它是产生其他子线程的线程; 通常它必须最后完成执行,因为它执行各种关闭动作。 尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个

你只管努力, 4229

schrodinger 薛定谔

链接: https://pan.baidu.com/s/1Duh4GsoytIklvZp7TdHpWg 密码: wmr1 Linux系统版 进入 Schrodinger_Suites_2021-2_Linux-x86_64 sudo ./INSTALL 中间按默认的来即可,也可以自己调整安装目录。安装目录一定要记住。 安装完,把patcher 拷贝到安装目录 sudo ./patcher 点击Patch即可。 启动程序,进入安装目录 ./maestro ...

周迪新的博客 1万+

Java主线程

当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:· 它是产生其他子线程的线程;· 通常它必须最后完成执行,因为它执行各种关闭动作。尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThread()是...

慧心的眼眸的博客 4147

PotPlayer播放4K HDR电影时,如何正确设置LAV解码器与MadVR渲染器避免色彩失真?

本文详细介绍了如何在PotPlayer中正确配置LAV解码器与MadVR渲染器,以解决播放4K HDR电影时的色彩失真问题。从组件安装、参数设置到显卡协同配置,提供了一套完整的端到端解决方案,帮助影音爱好者获得最佳的视觉体验。

weixin_28732953的博客 440

新手3dslicer手动肝脏切割及体积测量(详细图文)

刚接手软件的时候,我一直想用自动分割工具,试验了Med sam,依赖安装不了;试验了英伟达的AI,NvidiaAIAssis,传服务器根本没反应,所有只有用了手动切割。不要求所有层面勾画,但是最好是典型层面都勾画一下,特别是有毗邻脏器密度相近的层面。点击3D后可能三维窗口未显示,可以调整一下窗口大小,有可能显示在我们看见的范围之外。早就准备更新这篇了,由于懒癌发作,一直早葛优躺,今天刚好有点时间,就简单写下来。

linjianping513的博客 5924

Java中的主线程

文章目录概览主线程怎么来控制主线程主线程和main()函数的关系主线程中的死锁(单个线程) 概览 前段时间有同事提到了主线程这个名词,但当时我们说的主线程是指Java Web程序中每一个请求进来时处理逻辑的线程。当时感觉这个描述很奇怪,所以就来研究下这个主线程的确切语义。 Java提供了内置的多线程编程支持,多线程包括两个或多个可并发执行的部分,每一部分叫做线程,每个线程定义了单独的执行部分。 主线程 当一个Java程序启动的时候,会有一个线程立即开始运行,这个线程通常被我们叫做程序中的主线程,因为它是在我

靖哥哥的博客 1266

5G物理层基础知识

1、关于RB和RE (1) RB(Resource Block,资源块)频率上连续12个子载波,时域上一个slot(时隙,14个ofdm符号) (2) RE(Resource Element,资源单元)频率上一个子载波,及时域上一个ofdm符号 注意:协议规定,5G每个时隙(非扩展CP)的符号数为14个(扩展CP情况下每个时隙有12个符号),而LTE(非扩展CP)每个时隙的符号数为7个。 简单说:一个12X14的方格,大的整个叫一个RB,每一个小块叫一个RE。另外,一个RE可存放一个调制符号(mo.

qq_39074243的博客 2万+

在主线程执行_Java中的主线程

概览前段时间有同事提到了主线程这个名词,但当时我们说的主线程是指Java Web程序中每一个请求进来时处理逻辑的线程。当时感觉这个描述很奇怪,所以就来研究下这个主线程的确切语义。Java提供了内置的多线程编程支持,多线程包括两个或多个可并发执行的部分,每一部分叫做线程,每个线程定义了单独的执行部分。主线程当一个Java程序启动的时候,会有一个线程立即开始运行,这个线程通常被我们叫做程序中的主线程,...

weixin_39801475的博客 657

前端开发 - 完美解决video.js和flv.js视频同时播放数量限制的问题,即浏览器针对同一域名的请求限制问题(解决flv.js/video.js在页面播放最多不超过6个问题、浏览器并发请求限制数

flv.js,video.js,vue,reactive,uniapp,前端开发,flv视频同时播放有限制怎么办,浏览器限制多个视频同时播放怎么办,使用flv.js在前端播放,最多只能播放6个视频,突破浏览器域名并发限制,如何解决flvjs与videojs视频播放同时播放数量限制,video.js 一个页面同时播放多个视频的实例代码,解决网页视频最大只能播放6路的问题,浏览器只能播放6路http-flv流的解决方法,一个浏览器播放5个或者6个flv的视频就不能播放了,video.js 无法在页面同时播放多个

✅ 精选推荐文章 4995

【Conda虚拟环境】新建 + 激活 + 安装 + 查看 + 退出 + 删除 + 复制 + 导出 + 导入 + 更改

(1)创建虚拟环境(2)激活虚拟环境(4)查看虚拟环境(3)退出虚拟环境(5)删除虚拟环境(6)复制虚拟环境(7)导出虚拟环境(8)导入虚拟环境(9)更改虚拟环境的安装路径(10)在指定路径下,配置虚拟环境

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 4万+

java 主线程_Java中的主线程

概览前段时间有同事提到了主线程这个名词,但当时我们说的主线程是指Java Web程序中每一个请求进来时处理逻辑的线程。当时感觉这个描述很奇怪,所以就来研究下这个主线程的确切语义。Java提供了内置的多线程编程支持,多线程包括两个或多个可并发执行的部分,每一部分叫做线程,每个线程定义了单独的执行部分。主线程当一个Java程序启动的时候,会有一个线程立即开始运行,这个线程通常被我们叫做程序中的主线程,...

weixin_39517859的博客 581

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

这篇论文介绍了一种名为PointCNN的方法,旨在从点云(point cloud)数据中学习特征。传统卷积神经网络(CNN)在处理规则网格数据(如图像)时非常有效,但由于点云是无序且不规则的,直接在其上应用卷积操作会导致形状信息丢失,并对点的排列顺序敏感。为了解决这一问题,论文提出了一种X-Conv操作。该方法通过学习一种来重新排列点云中的点并加权输入特征。然后,将典型的卷积操作应用于转换后的特征。这种方法将传统的 CNN 扩展到点云特征学习,并命名为PointCNN。

u012901740的博客 2300

Java 程序中主线程是什么

主线程(Main Thread)是程序启动时,由操作系统自动创建并且默认执行的线程。它是程序中第一个被创建并执行的线程,负责启动程序并通常用于管理程序的主要流程。所有 Java 程序在启动时都会有一个主线程,除非显式地创建新的线程。

weixin_44594317的博客 1026

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java 主线程_java主线程是什么

java主线程是什么java应用程序中会有一个main函数,是作为某个类的方法出现的。当程序启动时,该函数就会第一个自动得到执行,并成为程序的主线程。就是说,main函数是一个应用的入口,也代表了这个应用主线程。下面是小编为大家搜索整理的java主线程是什么,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!需要弄清的问题如同程序和进程的区别,要掌握多线程编程,第一要弄清的问题是:...

weixin_39865866的博客 571

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java主线程等待子线程、线程池

public class TestThread extends Thread { public void run() { System.out.println(this.getName() + "子线程开始"); try { // 子线程休眠五秒 Thread.sleep(5000); } catch (InterruptedException e) {

叉叉哥的BLOG 4万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

什么是java 主线程_什么是java主线程

什么是java主线程java应用程序中会有一个main函数,是作为某个类的方法出现的。当程序启动时,该函数就会第一个自动得到执行,并成为程序的主线程。就是说,main函数是一个应用的入口,也代表了这个应用主线程。下面是小编为大家搜索整理的java主线程是什么,希望能给大家带来帮助!更多精彩内容请及时关注我们考试网!需要弄清的问题如同程序和进程的区别,要掌握多线程编程,第一要弄清的问题是:线程对象和...

weixin_34440860的博客 337

java主线程结束和子线程结束之间的关系

最近在和同事讨论java主线程和子线程之间的关系,自己也到网上搜索了下,发现各种答案都有,有些还是互相矛盾的。经过测试自己得出以下几个结论,跟大家分享下,如果有错误,欢迎大牛指正,帮助我这只小菜鸟。废话不多说,直接上结论: (一)Main线程是个非守护线程,不能设置成守护线程。               这是因为,main线程是由java虚拟机在启动的时候创建的。main方法开始执行的时候,

aty 2万+

【Java】注解【主线学习笔记】

注解;Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。元注解就是对现有的解释进行解释说明的注解。使用@interface关键字来定义注解。可以指定一些元注解(如@Target和@Retention)来控制注解的使用范围和生命周期。可以在类或方法上使用自定义注解。

CBCY_csdn的博客 1030

java什么是主线程_java主线程是什么

java应用程序中会有一个main函数,是作为某个类的方法出现的。当程序启动时,该函数就会第一个自动得到执行,并成为程序的主线程。就是说,main函数是一个应用的入口,也代表了这个应用主线程。下面是小编为大家搜索整理的java主线程是什么,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!需要弄清的问题如同程序和进程的区别,要掌握多线程编程,第一要弄清的问题是:线程对象和线程的区别...

weixin_39665762的博客 351

java内部类引用外部变量

今天学习AQS时,发现在main方法中实例一个ReentrantLock,在线程内部类能够直接使用,当时就很奇怪,因为按照自己的理解,想要使用外部的变量,一般都是通过类的方法传递。 后来查了下资料,方法中的内部类是可以直接使用外部变量的。 但是有个前提就是该变量必须是final或者effectively final的。 effectively final就是指变量初始化后没有被更改。 对于基础数据类型,就是值不能被更改。 对于引用类型,就是指向不能更改。 也就是说我们可以在内部类直接使用lock,但是不能更

codecuter的博客 2608

java 主线程与子线程

在JAVA的main函数中,开启一个子线程时,主线程会执行下去,不会等待子线程执行,但是只有子线程执行完毕后,JVM才退出。 ==调用 join 方法,可以使主线程等待 子线程运行完毕之后再执行 == public class ThreadTest { static public int a = 0; //定义一个静态变量 public static void main(Str...

water drop的博客 2207

java中如何从主线程传参数到子线程

下面这个例子和上面一样,除了说是子线程要join主线程。本例中还教会了大家,如何从主线程传参数到子线程。 例:1.5.3_2 class ThreadMark_to_win extends Thread { Thread mainT; Test t; public void run() { try { mainT.join(); ...

mark_to_win的专栏 3303

java应用的主线程_Java主线程

当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:它是产生其他子线程的线程;通常它必须最后完成执行,因为它执行各种关闭动作。尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThread()是Thre...

weixin_39781209的博客 287

为什么Android主线程与java主线程不同,不会退出?

Q:为什么Android主线程不会像普通Java程序那样执行完就退出?A:Android主线程不会自动退出的核心原因是其事件驱动架构和消息循环机制1. 事件驱动模型Android应用需要持续响应系统事件(如Activity生命周期回调、用户输入、系统广播等),主线程必须保持活跃等待事件。2. Looper消息循环主线程启动时通过// 无限循环在此发生该循环持续从中取出消息当队列空时,主线程在中阻塞等待(不消耗CPU)3. 消息持续注入发送生命周期事件分发用户输入Handler。

qq_45906596的博客 968

java 主线程_Java主线程

当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:它是产生其他子线程的线程;通常它必须最后完成执行,因为它执行各种关闭动作。尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThread()是Thre...

weixin_42516490的博客 318
上一篇: 【论文翻译】AFLGuard: Byzantine-robust Asynchronous Federated Learning
下一篇: 【Java】枚举类【主线学习笔记】
虫本初阳
博客等级 码龄6年 746粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫本初阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值