嵌套类

本文探讨了内部类的概念及其在Java中的应用,重点介绍了静态内部类的特点和使用场景,包括如何在main()方法中调用静态成员,以及如何在接口内部放置静态内部类。此外,还展示了如何在类中放置测试代码并通过嵌套类实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你不需要内部类对象与其外围类对象之间的联系,那你可以将内部类声明为static。这
通常称为嵌套类(nested class)4。想要理解static应用于内部类时的含义,你就必须记
住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部
类是static的时,就不是这样了。嵌套类意味着:


1. 要创建嵌套类的对象,并不需要其外围类的对象。
2.不能从嵌套类的对象中访问非静态的外围类对象。


嵌套类与普通的内部类还有一个区别。普通内部类的属性与方法,只能放在类的外部层次
上,所以普通的内部类不能有 static 数据和 static 属性,也不能包含嵌套类。但是嵌套类
可以包含所有这些东西:


//: c08:Parcel10.java
// Nested classes (static inner classes).


public class Parcel10 { 
private static class ParcelContents implements Contents {
private int i = 11;
public int value() { return i; } 
  }
protected static class ParcelDestination 
implements Destination { 

private String label;

private ParcelDestination(String whereTo) { 
      label = whereTo;
    }
public String readLabel() { return label; } 
// Nested classes can contain other static elements:
public static void f() {}
static int x = 10;
static class AnotherLevel { 
public static void f() {}
static int x = 10; 
    }
  }
public static Destination dest(String s) {
return new ParcelDestination(s); 
  }
public static Contents cont() {
return new ParcelContents();
  }
public static void main(String[] args) { 
    Contents c = cont(); 
    Destination d = dest("Tanzania");
  }
} ///:~


在 main()中,没有任何 Parcel10 对象是必需的;取而代之的是,你要使用选取一个 static
成员的普通语法,来调用返回 Contents 和 Destination 引用的方法。


你将会看到,在一个普通的(非静态)内部类中,通过一个特殊的 this 引用,可以链接到
其外围类对象。嵌套类就没有这个特殊的 this 引用,这使得它类似于一个 static 方法。


正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它
是 static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则:


//: c08:IInterface.java
// Nested classes inside interfaces.


public interface IInterface { 
static class Inner {
int i, j, k; 
public Inner() {}
void f() {} 
  }
} ///:~
我曾在本书中建议过,在每个类中都写一个 main()方法,以用来测试这个类。这样做有一
个缺点,你必须带着那些编译了的额外代码。如果这对你是个麻烦,你可以使用嵌套类来
放置测试代码。


//: c08:TestBed.java
// Putting test code in a nested class.


public class TestBed {
public TestBed() {}
public void f() { System.out.println("f()"); }
public static class Tester { 
public static void main(String[] args) {
      TestBed t = new TestBed();
      t.f();
    }
  }
} ///:~


这生成了一个独立的类 TestBed$Tester(要运行这个程序,执行 java TestBed$Tester
即可)。你可以使用这个类来做测试,但是你不必在发布的产品中包含它,只需简单地在
将产品打包前删除 TestBed$Tester.class。


内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值