java中的内部类

  1. 静态内部类
  2. 成员内部类
  3. 方法内部类
  4. 匿名内部类

1.静态内部类

    class Outer {

    	private static String outer = "outer";

    	/**
* 静态内部类只能访问外部类的静态成员
*/
public static class StaticInner {
public void show() {
System.out.println(outer);
}
} public void test() {
StaticInner si = new StaticInner();
si.show();
}
} class Other { public static void main(String[] args) {
/**
* 静态public内部类的创建对象的方式
*/
Outer.StaticInner si = new Outer.StaticInner();
si.show();
}
}

jdk中LinkedList使用了Nodo内部类表示存储的节点信息。

2.成员内部类

    class Outer {
private static String outerStatic = "outer";
private int outerNum = 666; /**
* 成员内部类可以访问外部类的所有成员
*/
public class Inner {
/**
* 成员内部类中不可以定义静态变量和方法,只能定义常量。这样的原因可能是直接在外部类中其实就可以定义这些静态属性
*/
private static final int innerNum = 233333; public void show() {
System.out.println(outerStatic);
System.out.println(outerNum);
System.out.println(innerNum);
/**
* 同名时调用的当前类的test方法
*/
test();
/**
* 访问外部类的方法
*/
Outer.this.test();
} public void test() {
System.out.println("inner test method");
}
} public void test() {
// Inner inner = new Inner();
// inner.show();
System.out.println("outer test method");
}
} class Other { public static void main(String[] args) {
/**
* 成员内部类的创建对象的方式
*/
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
}
}

jdk中LinkedList中的listIterator和descendingIterator接口通过成员内部类的方式进行了实现

3.方法内部类

    class Outer {
private int a = 100; public void test(final int param){
/**
* 访问方法局部成员,该成员需为final
*/
final String str = "hello";
class Inner {
public void innerMethod(){
System.out.println("outer a " +a);
System.out.println("param " +param);
System.out.println("local var " +str);
}
}
Inner inner = new Inner();
inner.innerMethod();
}
}

4.匿名内部类

    class AnonymousClass {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Collections.sort(list, new Comparator<Person>() { @Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
} });
} class Person { private String name; public Person(String name) {
this.name = name;
} public String getName() {
return this.name;
}
}
}

参考资料

【09-04】java内部类学习笔记的更多相关文章

  1. Java内部类学习笔记

    20160923 定义:将一个类的定义放在另一个类的内部: 从外部类的非静态方法之外,创建某个内部类的对象:OutClassName.InnerClassName: 内部类拥有所有其外部类的成员的访问 ...

  2. Java内部类——学习笔记

    参考:http://blog.csdn.net/aaronsi/article/details/187322 和 http://openhome.cc/Gossip/JavaGossip-V1/Inn ...

  3. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  4. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  5. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  6. Android(java)学习笔记211:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  7. Kotlin for Java Developers 学习笔记

    Kotlin for Java Developers 学习笔记 ★ Coursera 课程 Kotlin for Java Developers(由 JetBrains 提供)的学习笔记 " ...

  8. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  9. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. Win Server 2008 RD案例:Client通过Server的浏览器上网

    一.简介 RD是Windows Server远程桌面服务,可以实现从客户端运行服务器上的软件.首先在Server安装软件,设置能远程访问的应用和账号,并且创建.rdp快捷方式文件,然后Client打开 ...

  2. J2EE基础之JavaBean

    J2EE基础之JavaBean 1.什么是JavaBean? JavaBean本质上来说就是一个Java类,它通过封装属性和方法成为具有独立功能.可重复使用的,并可以与其他控件通信的组件对象.通过在J ...

  3. 移动端报表JS开发示例--获取定位

    上次分享了移动端报表JS开发的系统概念,后来我又回去摸索了一些案例.之前接触到的FineReport的APP客户端可以用来打卡签到,就好奇研究了以下,这次就来聊一聊报表移动端开发如何实现定位功能. 1 ...

  4. 贪吃蛇(Java实现)

    程序效果: 代码: //Snake.java 1 package snake; import javax.swing.*; import java.awt.*; import java.awt.eve ...

  5. CentOS安装MySQL

    好记性不如烂笔头,记录一下 yum list installed | grep mysql #检查是否安装了mysql yum -y remove mysql-libs.x86_64 #卸载已经安装的 ...

  6. Java 线程同步

    线程同步 1.线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏. 2.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的 ...

  7. jquery的css详解(一)

    通过阅读源码可以发现css是jq的实例方法.而在内部调用jq的工具方法access来实现的,对该方法不了解的朋友请点击 -> jquery工具方法access详解 在access的回调中做了一个 ...

  8. css 实现未知图片垂直居中

    1.demo html部分 <div class="demo">      <a href="#"><img src=" ...

  9. Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50511172 本文出自:[lxk_1993的博客]:   3个错误non-zero e ...

  10. Linux下Nginx+Tomcat负载均衡和动静分离配置要点

    本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...