美文网首页
java基础之内部类

java基础之内部类

作者: 沈默的头号狗腿 | 来源:发表于2018-06-12 20:43 被阅读0次

内部类:类里面再声明类

1》默认内部类

class Outer{

private int a = 12;

class Inner{

public void test2(){

//"内部类"可以直接访问"外部类"的成员,包括私有。

System.out.println("内部类访问外部的变量a=" + a);

}

}

}

创建内部类方式:Outer.Inner inner = new Outer().new Inner();

在内部类方法中访问外部类成员变量 Outer.this.a

访问内部类成员变量 this.a

访问方法内变量 a

2》私有内部类

class Outer{

private int a = 12;

private class Inner{

public void test2(){

System.out.println("内部类访问外部的变量a=" + a);

}

}

public void test1(){

Inner inner = new Inner();

inner.test2();

}

}

私有内部类外部无法访问

3》静态内部类

class Outer{

private int a = 12;

static class Inner{

public void test2(){

System.out.println("内部类访问外部的变量a=" + a);

}

}

}

创建方式:Outer.Inner inner =new Outer.Inner();

4》局部内部类

class Outer{

public void test1(){

final int a = 10;//局部变量

class Inner{//局部内部类

public void test2(){

System.out.println(a);

}

}

Inner inner = new Inner();

inner.test2();

}

}

面试题:局部内部类访问该方法内局部变量时,变量要加final修饰,为什么?

因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。

这里存在一个疑问,那就是它的引用如何能被传递出去,我试过在外部类中定义该内部类的引用,结果是无法找到该类。

jdk1.8,不加final代码不会报错,jdk1.7以下的版本不写final会报错

其实就是在jdk1.8的环境下,系统帮你默认添加了final关键字

匿名内部类

记住,这种匿名内部类的内部是相对于外部类而言的,不是相对于接口或者抽象类

  》抽象类的匿名内部类

  》接口的匿名内部类

  》new 抽象类 或者接口,都必须实现里面的所有未实现的方法

java接口中可以定义类,也不仅限于抽象类。只是接口本身不能被实例化,接口内部的类是可以实例化的。

调用接口的内部类有两种方法:

1.接口名.类名 Outer.Inner inner =new Outer.Inner();

2.创建实现类implements接口,再直接实例化内部类

相关文章

  • Java基础之内部类

    什么是内部类?为什么要使用内部类?  内部类是指在类的内部可以定义另一个类。内部类可以申明成public或priv...

  • java基础之内部类

    内部类:类里面再声明类 1》默认内部类 class Outer{ private int a = 12; clas...

  • Java基础之内部类

    1、内部类分类: 成员内部类 局部内部类 匿名内部类 静态内部类 2、成员内部类 1.概念: 定义在一个类内部的类...

  • Java基础之内部类

    该项目源码地址:https://github.com/ggb2312/JavaNotes/tree/master/...

  • java之内部类(InnerClass)详解

    参考文章 java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

  • Java基础之内部类(InnerClass)

    一、内部类介绍 内部类:将一个类的定义放在另一个类的定义内部。 内部类是个编译时的概念,一旦编译成功后,它就与外围...

  • 回归Java基础,详解 Java 内部类

    回归Java基础,详解 Java 内部类

  • Java之内部类

    内部类也相当于类中的成员,一般是私有的,当外部类对象拥有一个对象成员,且这个对象成员仅属于这个外部类,不会被其他类...

  • java之内部类

    一、分类: 1、静态内部类 2、成员内部类 3、局部内部类 4、匿名内部类 二、静态内部类 1、静态内部类可以等同...

  • 在Alibaba广受喜爱的“Java突击宝典”简直太牛了

    0-1年:夯实基础 1.Java基础(Java异常分类及处理+Java反射+Java注解+Java内部类+Java...

网友评论

      本文标题:java基础之内部类

      本文链接:https://www.haomeiwen.com/subject/ejhkeftx.html