Java高级特性之---内部类

内部类的概念

  • 所谓内部类(inner Class) , 顾名思议,就是将一个类定义在另一个的内部。内部的类称为之为内部类。
public class Outer{
    class Inner{
        //省略
    }
}
  • 内部类的只要特点
    • 内部类可以很好的实现隐藏,可以使用protected、private修饰符。
    • 内部类可以直接访问外部类的所有成员,包括私有成员。
    • 外部类不能直接访问内部类成员,必须首先要建立内部类的对象才可访问
    • 内部类可以解决一些问题,比如间接的去实现多继承。可以避免修改接口而实现同一个类中两种同名方法的调用。

成员内部类的调用

  • 成员内部类特点:
    • 成员内部类属于内部类的实例成员,成员内部类可以有。
    • public,private ,default,protected权限修饰符。在成员内部类访问外部类的成员方法和属性,要使用“外部类名.this.成员方法”和“外部类名.this.成员属性”的形式。
    • 创建成员内部类的实例使用“外部类名.内部类名 实例名 = 外部类实例名.new 内部构造方法(参数)”的形式。
  • 成员内部类有以下限制:
    • 成员内部类与外部类重名。
    • 不能在成员内部类中定义static属性、方法和类(static final 形式的常量定义除外)。因为一个成员内部类实例必然有一个外部类实例关联,static 成员完全可以移到外部类中去。

静态内部类及应用

  • 静态内部类特点:
    • 使用static修饰的成员内部类叫静态内部类。
    • 静态内部类跟外部类没有任何关系,只是在生成类名和类定义时有影响,静态内部类可以看作是与外部类的平级类。使用方式与外部类平级的类完全相同。
    • 创建静态内部类的实例使用 外部类名.内部类名 实例名 = new 外部类名.内部类名(参数)。
  • 静态内部类有以下限制:
    • 静态内部类不能与外部类重名。
    • 静态内部类不能访问外部类的非静态属性和方法。外部类不能访问内部类非静态属性和方法。

匿名内部类及应用

  • 匿名内部类特点:
    • 匿名内部类是没有名称的内部类,没办法引用他们,必须在创建时,作为new 语句的一部分来声明并创建他们的实例。
    • 匿名内部类必须继承一个类(抽象的、非抽象的都可以)或者实现一个接口。如果父类是抽象类,匿名内部类必须实现其所有抽象方法。
    • 匿名内部类中可以定义代码块,用于实例初始化,但不能定义静态代码块。
  • 匿名内部类语法:

    new interface/superclass(){//类体}
    • 这种形式实现的new 语句声明一个新的匿名内部类,它对一个给定的类进行扩展,或者实现一个给定的接口,并同时创建该匿名内部类的一个新实例。

局部内部类及应用

  • 局部内部类的特点:
    * 定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。
    * 局部内部类访问外部类的属性和方法使用 “外部类名.this.属性名(参数)”的形式。
    * 对外部世界完全隐藏,只能在其作用域内生成对象
  • 局部内部类有以下限制:
    • 局部类不能加访问修饰符,因为他们不是类成员。
    • 成员内部类不能与外部类重名
    • 局部内部类访问作用域的局部变量,该局部变量需要使用final修饰。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的多线程编程中,线程同步是一个非常重要的概念。它用来确保多个线程在访问共享资源时不会产生冲突或竞争条件。在Java中,有几种方式可以实现线程同步,其中之一就是使用synchronized关键字。 synchronized关键字可以用于修饰代码块或方法。当我们使用synchronized修饰代码块时,需要指定一个对象作为锁对象。在代码块内部,只有获取了锁对象的线程才能执行代码块中的内容,其他线程则需要等待。 在给定的示例中,synchronized关键字被用于修饰insert方法,这意味着同一时刻只能有一个线程能够执行这个方法。这样就确保了对num变量的访问是安全的,不会出现竞争条件导致数据不一致的情况。 具体来说,当一个线程进入synchronized修饰的insert方法时,它会获取到insertData对象的锁,并执行方法内部的代码。而其他线程则需要等待,直到当前线程释放了锁。这样就保证了对num变量的操作是线程安全的。 需要注意的是,synchronized关键字只能保证同一时刻只有一个线程能够执行被修饰的代码块或方法,但并不能保证线程的执行顺序。所以在多线程编程中,我们还需要考虑到线程的调度和执行顺序的不确定性。 除了synchronized关键字,Java还提供了其他的线程同步机制,比如Lock接口,它提供了更灵活和细粒度的线程同步控制。但是在大部分情况下,synchronized关键字已经能够满足我们的需求,使用它来实现线程同步是一种简单而有效的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Java高级特性 - 多线程基础(3)线程同步](https://blog.csdn.net/weixin_52034200/article/details/130253687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [EduCoder Java高级特性 - 多线程基础(3)线程同步](https://blog.csdn.net/weixin_45981481/article/details/114494972)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值