Java内部类

标签: java 内部类
4人阅读 评论(0) 收藏 举报
分类:

Java 内部类
分四种:成员内部类、局部内部类、静态内部类和匿名内部类。
成员内部类
成员内部类中不能定义静态变量,静态方法和静态代码块
可以访问外部类的所有成员(包括静态和私有的,引用是如果外部类有泛型不能声明泛型: 外部类.this.属性或方法,静态的不用this.)
成员外部类不可以访问内部类中的私有方法,属性(因为内部类还么没有实例化)
成员外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量
必须实例化外部类才可以实例化内部类,所以外部类构造不内部类构造方法快
成员内部类编译后文件名是: 外部类名$内部类名.class
成员内部类的访问权限可以是public 默认 protected private 可以有abstract类 final类
成员内部类中不可以定义接口,枚举, 但可以定义无数个抽象类,内部类,内部类中的内部类中的内部类…….
成员内部类可以实现接口和继承(可以继承内部类 /神经病/)
实例内部类: 外部实例对象.new 内部类() 或者在外部类中定义一个返回内部类实例的方法(静态方法不可以实例内部类)
外部类可以访问内部类中的private(其他内部类一样)
结论:内部中不可有静态,可以访问外部类所有,必须有外部类才可以有内部类,外部类不可以访问内部类除构造方法,构造块外的所有

局部内部类
局部类可以定义在所有方法中(包括静态方法,构造方法,构造代码块和静态代码块 就像一个成员变量一样)
不可以声明权限,可以声明为final和abstrace其他不可以,其实和成员变量一样(abstract除外)
静态方法中的成员内部类不可以使用外部类中中非静态
局部内部类可以访问外部类所有
只有声明局部内部类中的方法才可以实例化局部内部类
不可以声明静态和外部类一样
可以访问外部方法中的局部变量
this.变量名访问内部类中的变量 外部类类名.this.变量名访问成员变量,方法同理(和成员内部类一样)
不可以在局部内部类未声明前实例它,必须在声明后面实例它
可以实现接口,继承类
11.局部内部类访问形参和成员变量必须声明形参和实参为final 不过jdk1.8中不用声明为final只要不多次复制就可以了 (因为局部变量生命周期和方法一样,当栈帧(方法)出栈时有可能内部类对象可能存在于堆中,那是变量已经不存在了,但final修饰的局部变量在堆(heap)中)

结论:局部内部类就是一个局部变量(但它可以声明为abstract)

静态内部类
实例不需要外部类”帮忙” new 外部类名.内部类名();
静态内部类不能直接访问外部类的非静态成员,静态内部类可以直接访问外部类的静态成员数据
静态内部类可以有静态方法和静态属性和静态代码块
实例化静态内部类不会调用外部类中的静态代码块

结论:相当余一个独立的类,但它可以访问外部类中的静态属性和静态方法

匿名内部类:只可以使用一次,没变量名
形式: new 接口或抽象类(抽象类的构造参数){
成员变量…..
复写方法……
自定义方法….
};

匿名类部类不可以添加构造方法可以添加普通代码块
匿名内部类不可以有static
匿名内部类如果实例抽象类会先执行匿名内部类中的构造代码快
匿名内部类访问形参和成员变量必须声明形参和实参为final 不过jdk1.8中不用声明为final只要不多次复制就可以了(和局部内部类一样)

总结
成员内部类规则看成普通方法
静态内部类规则看成静态方法
局部内部类规则看成局部变量(可以声明为abstract)
匿名内部类看成是一个实现类
局部内部类和匿名内部类只可以使用一次赋值的成员变量和形参
只有匿名内部类不可以定义构造方法

查看评论

java 四种内部类 使用细节(含代码)

一: 内部类     定义在类体部,方法体部,甚至比方法体更小的代码块内部的类(if 语句里面等)     1.静态内部类(内部类中最简单的形式)         1.声明在类体部,方法体外,并...
  • qq_33599978
  • qq_33599978
  • 2017年04月27日 23:28
  • 4987

JAVA和C++内部类

JAVA和C++内部类的异同
  • qq78442761
  • qq78442761
  • 2016年11月21日 22:52
  • 577

Java内部类的实现原理与可能的内存泄漏

在使用java内部类的时候要注意可能引起的内存泄漏 代码如下package com.example;public class MyClass { public static void mai...
  • qq_22706515
  • qq_22706515
  • 2016年05月05日 11:57
  • 3155

【java】内部类例子

1.内部类是在类的内部定义的类 2.内部类分为成员内部类,局部内部类,匿名内部类。 3.内部类中可以直接调用其所在类的私有变量以及方法,但是外部类不可以调用内部类的成员。 4.内部类的实例一定要...
  • NeoAdrian
  • NeoAdrian
  • 2016年04月11日 14:10
  • 1564

【Java】内部类(Inner Class)如何创建(new)

简单来说,内部类(inner class)指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类...
  • u010983881
  • u010983881
  • 2016年01月02日 21:13
  • 4393

关于Java内部类的初始化

Java类的位置1、在同个Java文件中,但不是内部类public class Test {} class T{}
  • w1lgy
  • w1lgy
  • 2017年01月07日 11:18
  • 977

java学习日记_49:内部类的位置和访问方式

/* 内部类位置 成员位置:在成员位置定义的类,被称为成员内部类。 局部位置:在局部位置定义的类,被称为局部内部类。 成员位置:在成员位置定义的类,被称为成员内部类。 */ class Ou...
  • qq_31539817
  • qq_31539817
  • 2016年10月17日 20:02
  • 402

java内部类的四大作用

放在一个类的内部的类我们就叫内部类。 二、 作用 1.内部类可以很好的实现隐藏  一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所...
  • mid120
  • mid120
  • 2016年12月14日 19:25
  • 5582

最安全的单例模式--java使用内部类实现单例模式

实现类 public class Singleton {     private static class LazyHolder {            private static fina...
  • qq_22912803
  • qq_22912803
  • 2016年10月10日 12:57
  • 6692

Java日记——获取内部类的几种方式

内部类用于增强类与类的耦合关系,也是经常会用到的,下面是几种在静态方法中获取内部类的方式1.内部类设为静态类public class TestInnerClass { public stati...
  • qq_32198277
  • qq_32198277
  • 2017年05月21日 08:31
  • 2036
    个人资料
    等级:
    访问量: 680
    积分: 68
    排名: 165万+
    文章分类
    文章存档