写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

本博客全网唯一合法URL:https://www.cnblogs.com/acm-icpcer/p/8575721.html

Java的四种内部类包括如下:

  1、成员内部类

  2、静态内部类

  3、局部内部类

  4、匿名内部类

现一一说明:

1、成员内部类

简单的讲就是:

(1)没有使用static修饰的内部类;
(2)在成员内部类中不允许出现静态变量和静态方法的声明。static只能用在静态常量的声明上。
(3)成员内部类中可以访问外部类中所有的成员(变量,方法),包含私有成员,如果在内部类中定义有和外部类同名的实例变量,访问方法如下:

OuterClass.this.outerMember;

(4)构建内部类的实例,要求必须外部类的实例先存在。

sample code:

class MemberOuter{
private String s1 = "Outer InstanceMar";
private String s2 = "OuterStatic s2";
public void setS1(String s1) {
this.s1 = s1;
new MemberOuter().new MemberInner();
this.new MemberInner(); //此时MemberOuter已经实例化完成,所以可以使用this
new MemberInner().test2();
}
public static void test2 (){
new MemberOuter().new MemberInner();
/*
this.new MemberInner();
此时MemberOuter没有实例化完成,所以不可以使用this
static 是在MemberOuter构造器前使用,所以此时this不能使用
*/
} class MemberInner{
String s1= "Inner instanceMae ";
static final String s4 = "static final MemberInner";
void test2(){
System.out.println(" s1 =" + s1);
System.out.println(" Outter MemberOuter.this.s1 =" + MemberOuter.this.s1);
System.out.println("s2 = "+s2);
}
} } public class MemberInnerTest {
public static void main (String args []){
/* MemberOuter.MemberInner mm = new MemberOuter().new MemberInner();
mm.test2();*/
MemberOuter mo = new MemberOuter();
mo.setS1("");
}
}

2、静态内部类

  静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。

sample code:

public class StaticInnerTest {
public static void main(String[] args) { StaticOuter.StaticInner si = new StaticOuter.StaticInner();
si.test2();
//StaticOuter.StaticInner.test();
System.out.println("si.b = "+si.b);
System.out.println("si.a = "+si.a);
// System.out.println("StaticOuter.b = "+StaticOuter.b); 这里报错
} } class StaticOuter {
private int a = 100;
private static int b = 150;
public static void test(){
System.out.println("Outer static test ...");
}
public void test2(){
System.out.println("Outer instabce test ...");
} static class StaticInner {
public int a = 200;
static int b =300;
public static void test(){
System.out.println("Inner static test ...");
}
public void test2(){
System.out.println("Inner instance test ...");
StaticOuter.test();
new StaticOuter().test2();
System.out.println("StaticOuter.b = "+StaticOuter.b);
}
}
}

3、局部内部类

简单的说就是:

(1)定义在方法体,甚至比方法体更小的代码块中
(2)类比局部变量。
(3)局部内部类是所有内部类中最少使用的一种形式。
(4)局部内部类可以访问的外部类的成员根据所在方法体不同。
(5)在静态方法中:可以访问外部类中所有静态成员,包含私有;
     在实例方法中:可以访问外部类中所有的成员,包含私有;
     局部内部类可以访问所在方法中定义的局部变量,但是要求局部变量必须使用final修饰。

sample code:

public class LocalInnerTest {  

    private int a = 1;
private static int b = 2; public void test() {
final int c = 3;
class LocalInner {
public void add1() {
System.out.println("a= " + a);
System.out.println("b= " + b);
System.out.println("c= " + c);
}
}
new LocalInner().add1();
} static public void test2() {
final int d = 5;
class LocalInner2 {
public void add1() {
// System.out.println("a= " + a);
System.out.println("b= " + b);
System.out.println("c= " + d);
}
}
new LocalInner2().add1();
} public static void main(String args[]) {
// LocalInnerTest() lc = new LocalInnerTest();
new LocalInnerTest().test2();
new LocalInnerTest().test();
}
}

4、匿名内部类

(1)没有名字的局部内部类。
(2)没有class,interface,implements,extends关键字
(3)没有构造器。
(4)一般隐式的继承某一个父类或者实现某一个接口
(5)为了方便和速成而写的类,一般只使用一次,复用性不高。

sample code:

interface innerclass{
public void print();
} public class Main{ public static void main(String[] args)
{
innerclass A = new innerclass() {
public void print() {
System.out.println("匿名内部类1");
}
};
A.print(); innerclass B = new innerclass() {
public void print() {
System.out.println("匿名内部类2");
}
};
B.print();
A.print();
} }

tz@COI HZAU

2018/3/15

Java的四种内部类(含代码实例)的更多相关文章

  1. Java的四种内部类

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

  2. java的四种内部类详解

    引言 内部类,嵌套在另一个类的里面,所以也称为:嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...

  3. 类与接口(二)java的四种内部类详解

    引言 内部类,嵌套在另一个类的里面,所以也称为 嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...

  4. java的四种内部类(转)

    一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中.  1.常规内部类中的方法可以直接使用外部类的实例变量 ...

  5. Java中的四种内部类

    Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...

  6. java内部类及四种内部类的实现方式

     java内部类及四种内部类的实现方式 一.内部类定义:内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类. 二.为何要内部类?a.内部类提供了某种进入外围类的窗户.b.也是最吸引人的原因, ...

  7. Java中四种引用:强、软、弱、虚引用

    这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...

  8. java中四种引用类型(对象的强、软、弱和虚引用)

    对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...

  9. httpClient Post例子,Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete

    httpclient post方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //----1. HttpPost request = new HttpPost(ur ...

随机推荐

  1. bindpose定义

    根据常识,有: 但根据骨骼动画的定义,又有: 对比两式,可得bindpose的定义: 即骨骼bone的bindpose是:在绑定时刻,将顶点由mesh的局部空间变换到bone的局部空间的变换.

  2. [android开发教程] 一个神奇的Demo 帮你掌握所有android控件

    (本文内容来源:http://www.eoeandroid.com/thread-182392-1-1.html  转载请注明出处!) 2.jpg (23.78 KB, 下载次数: 0) 下载附件   ...

  3. 《软件测试自动化之道》读书笔记 之 基于反射的UI测试

    <软件测试自动化之道>读书笔记 之 基于反射的UI测试 2014-09-24 测试自动化程序的任务待测程序测试程序  启动待测程序  设置窗体的属性  获取窗体的属性  设置控件的属性  ...

  4. 模仿ReentrantLock类自定义锁

    简介 临近过年了,没什么需求,今天模仿ReentrantLock自定义写了一个自己锁,在这里记录一下,前提是对AQS原理有所了解,分享给大家 1.自定义锁MyLock package com.jack ...

  5. 海量数据中找top K专题

    1. 10亿个数中找出最大的1000个数 这种题目就是分治+堆排序. 为啥分治?因为数太多了,全部加载进内存不够用,所以分配到多台机器中,或者多个文件中,但具体分成多少份,视情况而定,只要保证满足内存 ...

  6. CentOS 配置集群机器之间SSH免密码登录

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远 ...

  7. Top useful .Net extension methods

    Special extension methods were released in C# 3.0. Developers have continuously been looking for way ...

  8. Oracle DBA神器之Toad

    很早就听说Toad功能很强大,一直没有使用过,因为PLSQL Developer就很好用.前几天看见同事优化Oracle就是用的Toad,有一些很强大的管理功能,于是再一次对Toad产生兴趣,收集了一 ...

  9. java-信息安全(十七)-*.PFX(*.p12)&个人信息交换文件

    原文地址 http://snowolf.iteye.com/blog/735294 与计费系统打交道,少不了用到加密/解密实现.为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺.那么需要通过什 ...

  10. nginx 自启动脚本

    nginx 自启动脚本 创建脚本 cd /etc/init.d vi nginx 脚本如下: #! /bin/bash # chkconfig: 35 85 15 # description: Ngi ...