在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
好比你设计类 B 的目的只是为了给类 A 使用,那么,我们就可将其设定为内部类,没有必要将类 B 设置成单独的 Java 文件,防止与其他类产生依赖关系.

成员内部类

如下,内部类可以访问外部类的成员变量,但是外部类不可以访问内部类的成员变量!!

public class Demo_1 {public static void main(String[] args) {Outter out = new Outter();Outter.Inner in = out.new Inner();in.show();in.fun();}
}class Outter {private int num = 5;class Inner {int tt = 2;public void show() {System.out.println(num);}public void fun() {Inner in = new Inner();in.show();}}
}

静态内部类

静态内部类不可以使用任何外部类的非static成员变量和方法,而内部类则都可以

public class Demo_1 {public static void main(String[] args) {Outter.Inner in = new Outter.Inner();in.show();in.fun();}
}class Outter {private static int num = 5;static class Inner {public void show() {System.out.println(num);}public void fun() {Inner in = new Inner();in.show();}}
}

局部内部类

局部内部类就是定义在方法中的类了,较少用

public class Demo_1 {public static void main(String[] args) {Outter out = new Outter();out.fun();}
}class Outter {public void fun() {class Inner {public void show() {System.out.println("hello world");}}Inner in = new Inner();in.show();}
}

匿名内部类

匿名内部类是为了简化实现接口的写法.lambda是为了进一步简化写法.并无别的高深之处.
一般情况下实现一个方法时如下的

public class Demo_2 {public static void main(String[] args) {Test test =new Test();test.show();}}interface inter{void show();
}class Test implements inter{@Overridepublic void show() {System.out.println("show");}
}

为了简化书写,引入了匿名内部类

public class Demo_2 {public static void main(String[] args) {new inter() {@Overridepublic void show() {System.out.println("this is anonymous class");}}.show();}
}interface inter {void show();
}

还可以进一步简化书写

public class Demo_2 {public static void main(String[] args) {((inter) () -> System.out.println("this is anonymous class")).show();}
}interface inter {void show();
}

内部类的应用

以hadoop的MRAPPMaster类为例,其有多个内部类

以成员内部类 RunningAppContext为例,其成员变量不可以被外部类MRAPPMaster所访问到. 可以通过idea作图了解一个类的概况.

 public class RunningAppContext implements AppContext {private final Map<JobId, Job> jobs = new ConcurrentHashMap<JobId, Job>();private final Configuration conf;private final ClusterInfo clusterInfo = new ClusterInfo();private final ClientToAMTokenSecretManager clientToAMTokenSecretManager;public RunningAppContext(Configuration config) {this.conf = config;this.clientToAMTokenSecretManager =new ClientToAMTokenSecretManager(appAttemptID, null);}@Overridepublic ApplicationAttemptId getApplicationAttemptId() {return appAttemptID;}@Overridepublic ApplicationId getApplicationID() {return appAttemptID.getApplicationId();}@Overridepublic String getApplicationName() {return appName;}@Overridepublic long getStartTime() {return startTime;}@Overridepublic Job getJob(JobId jobID) {return jobs.get(jobID);}@Overridepublic Map<JobId, Job> getAllJobs() {return jobs;}@Overridepublic EventHandler getEventHandler() {return dispatcher.getEventHandler();}@Overridepublic CharSequence getUser() {return this.conf.get(MRJobConfig.USER_NAME);}@Overridepublic Clock getClock() {return clock;}@Overridepublic ClusterInfo getClusterInfo() {return this.clusterInfo;}@Overridepublic Set<String> getBlacklistedNodes() {return ((RMContainerRequestor) containerAllocator).getBlacklistedNodes();}@Overridepublic ClientToAMTokenSecretManager getClientToAMTokenSecretManager() {return clientToAMTokenSecretManager;}@Overridepublic boolean isLastAMRetry(){return isLastAMRetry;}@Overridepublic boolean hasSuccessfullyUnregistered() {return successfullyUnregistered.get();}public void markSuccessfulUnregistration() {successfullyUnregistered.set(true);}public void resetIsLastAMRetry() {isLastAMRetry = false;}@Overridepublic String getNMHostname() {return nmHost;}}

java内部类简单解析相关推荐

  1. java在线打开xml文件_java实现简单解析XML文件功能示例

    本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOExcept ...

  2. Java内部类引用外部类中的局部变量为何必须是final问题解析

    Java内部类引用外部类中的局部变量为何必须是final问题解析 今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来 ...

  3. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  4. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  5. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  6. java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml

    一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...

  7. Java内部类的四种分类以及作用

    本文转载自:Java内部类的四种分类以及作用 一.内部类内容解析 1. 内部类的区分 内部类分别有成员内部类.局部内部类.匿名内部类.静态内部类,接下来将分别介绍. 2. 成员内部类 就是位于外部类成 ...

  8. Java 面试全解析:核心知识点与典型面试题

    课程背景 又逢"金九银十",年轻的毕业生们满怀希望与忐忑,去寻找.竞争一个工作机会.已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇.更大的平台. 然而,面试人群 ...

  9. Java选择题简单的考试系统

    Java选择题简单的考试系统 做前声明: 此系统包括了Java中:面向对象-封装.String-StringBuilder.ArrayList集合.继承-抽象-final.static-接口-多态.四 ...

最新文章

  1. TensorFlow 2.2.0-rc0,这次更新让人惊奇!
  2. nrf52832的p09,p10 配置为 普通的gpio口
  3. 【C语言】switch中无break的情况
  4. WebService部署服务器调试时提示 “测试窗体只能用于来自本地计算机的请求”解决方法...
  5. vue里ref ($refs)用法
  6. Tomcat server launch debug - OrderAnalytics
  7. java的简单工厂模式_java设计模式之简单工厂模式
  8. shell的建立与执行实验报告_实验七 Shell脚本运行的优化
  9. 「S-A-L-T-A」项目失败总结!
  10. numpy 辨异(一) —— reshape 与 resize
  11. mysql5.7 yum 密码,CentOS 7.7解决yum方式安装的MySQL 5.7 root用户密码丢失问题
  12. Wonderware-InTouch用脚本实现*邮件*发送功能
  13. 安装sas9.4版本sid过期问题
  14. deap dataset的不同分类模型的实现(2)-认识数据
  15. 金融投资理财基础知识
  16. Linux连接荣耀路由器pro2,荣耀路由器Pro2与路由存储、远程访问、家庭共享
  17. 1.5黄金白银最新行情走势分析预测,黄金实时操作建议
  18. IPA转APP的方法和APP转IPA的方法
  19. 微信公众号用户与网站用户的绑定方案
  20. Mac的app store打开白屏解决方法

热门文章

  1. maya刀剑神域 建模_王者玩家最想联动的动漫——刀剑与铠甲勇士,如果实现会联动谁?...
  2. 安装pkgconfig_一个R包怎么也安装不上,憋着急!
  3. python分布式计算框架_分布式计算框架Spark
  4. dreamweaver 正则表达式为属性值加上双引号_IT兄弟连 HTML5教程 HTML5表单 新增的表单属性3...
  5. http-server搭建web服务器
  6. easyui 常用的属性
  7. oracle静态,oracle静态sql和动态sql
  8. python super()方法的作用_详解python的super()的作用和原理
  9. 百度怎么进行模糊搜索_怎么在百度上准确搜索,提高10倍效率?
  10. 搭建gradle环境