有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

匿名内部类,任意作用域中嵌入的内部类都属于局部内部类的范畴。

<局部内部类>

 interface Destination {
String readLabel();
} class Test003Sub { public Destination destination(String s) {
class Test003Inner1 implements Destination {
private String s; private Test003Inner1(String s) {
this.s = s;
} @Override
public String readLabel() {
return s;
}
}
return new Test003Inner1(s);
}
} public class Test003 {
public static void main(String[] args) {
Test003Sub test003 = new Test003Sub();
System.out.println(test003.destination("Hello World").readLabel());// Hello World
}
}

<匿名内部类>

上例也可以改成匿名内部类。在匿名类内部使用的参数推荐加final。

 interface Destination {
String readLabel();
} class Test003Sub {
public Destination destination(final String s) {
return new Destination() {
private String sin = s; @Override
public String readLabel() {
return sin;
}
};
}
} public class Test003 {
public static void main(String[] args) {
Test003Sub test003 = new Test003Sub();
System.out.println(test003.destination("Hello World").readLabel());// Hello World
}
}

<任意作用域中嵌入的内部类>

内部类还可以嵌入到方法的任意作用域中。代码中内部类嵌入if内,并不是说该类创建是有条件的,它与其他类一样是一起编译过的。

 class Test004Sub {
String internalTracking(boolean b) {
String s = "";
if (b) {
class TrackingSlip {
private String s; private TrackingSlip(String s) {
this.s = s;
} String getSlip() {
return s;
}
}
TrackingSlip ts = new TrackingSlip("Hello World!");
s = ts.getSlip();
} else {
s = "No Data!";
}
return s;
}
} public class Test004 {
public static void main(String[] args) {
Test004Sub test004 = new Test004Sub();
System.out.println(test004.internalTracking(true)); // Hello World!
System.out.println(test004.internalTracking(false)); // No Data!
}
}

Java内部类(3):局部内部类的更多相关文章

  1. C#的匿名委托 和 Java的匿名局部内部类

    .NET:C#的匿名委托 和 Java的匿名局部内部类 目录 背景实验备注 背景返回目录 这几天重温Java,发现Java在嵌套类型这里提供的特性比较多,结合自身对C#中匿名委托的理解,我大胆的做了一 ...

  2. .NET:C#的匿名委托 和 Java的匿名局部内部类

    背景 这几天重温Java,发现Java在嵌套类型这里提供的特性比较多,结合自身对C#中匿名委托的理解,我大胆的做了一个假设:Java的字节码只支持静态嵌套类,内部类.局部内部类和匿名局部内部类都是编译 ...

  3. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  4. Java中的局部内部类

    package Smoke; public class Inner { private int num = 3; class Limian{ public void show(){ //内部类可以访问 ...

  5. day04(权限修饰符,内部类,局部内部类,匿名内部类)

    权限修饰符, Public  >protected >default > private public 公共权限   随便都可以访问 protected  子类可以访问权限  (子类 ...

  6. Java 内部类(成员内部类、局部内部类、静态内部类,匿名内部类)

    一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用publ ...

  7. JAVA面向对象-----局部内部类

    局部内部类 局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类. 访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员. 注意:局部内部类只能访问所在函数的fana ...

  8. Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类

    1. 成员内部类分为  静态内部类 和 非静态内部类. 非静态内部类 和 外部类的其他成员一样处理, 非静态内部类可以访问外部类的private的属性,而外部类不能访问非静态内部类的属性,需要实例非静 ...

  9. Java的四种内部类

    Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...

  10. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

随机推荐

  1. 说说lock到底锁谁(I)?

    写在前面 最近一个月一直在弄文件传输组件,其中用到多线程的技术,但有的地方确实需要只能有一个线程来操作,如何才能保证只有一个线程呢?首先想到的就是锁的概念,最近在我们项目组中听的最多的也是锁谁,如何锁 ...

  2. HAL库 TIM计数器及中断开启过程

    1.初始化TIM基本计数器参数 void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {}; TIM_Master ...

  3. 数字证书注册审批机构(RA)

    1.证书注册审批机构 RA(Registration Authority),数字证书注册审批机构.RA系统是CA的证书发放.管理的延伸.它负责证书申请者的信息录入.审核以及证书发放等工作:同时,对发放 ...

  4. HTML table 边框双线变单线

    table{border-collapse:collapse;border-spacing:0;border-left:1px solid #888;border-top:1px solid #888 ...

  5. 牛客国庆集训派对Day6 && CCPC-WannaFly-Camp #1 F. kingdom(DP)

    题目链接:https://www.nowcoder.com/acm/contest/206/F 题意:一棵 n 个点的树,根为 1,重儿子到父亲的费用为 0,其余为 1,问所有点到 1 的最大总费用是 ...

  6. 2018多校第九场 HDU 6416 (DP+前缀和优化)

    转自:https://blog.csdn.net/CatDsy/article/details/81876341 #include <bits/stdc++.h> using namesp ...

  7. Java项目笔记01

    1 Tomcat问题 1 今天用了Ecplise和MyEcplise想着用同一个路径下的Tomcat,但是却发现配置完Ecplise后MyEcplise却不能用了,并且后面在bin里启动Tomcat还 ...

  8. PHP mysqli_get_client_version() 函数

    定义和用法 mysqli_get_client_version() 函数将 MySQL 客户端库版本作为整数返回. MySQL 客户端库版本将按照以下格式返回: 主要版本*10000 + 次要版本*1 ...

  9. GitLab 如何在 Web 界面中 Merge branch

    希望在 GitLab 中对 2 个 branch 进行合并,如何创建 Pull Request 并且如何进行合并呢? 在 GitLib 的 Web 界面中选择 Merge Requests 然后再界面 ...

  10. import torch错误解决

    import torch出现 ”from torch._C import * ImportError: DLL load failed: 找不到指定的模块“错误这里torch=1.0.1,torchv ...