博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中几个特殊的类
阅读量:5008 次
发布时间:2019-06-12

本文共 2818 字,大约阅读时间需要 9 分钟。

1 内部类-----是在其他类中的类

1.1 内部类的定义

  • 将类定义为 class xxxx{... ...}置于某个类的内部即可‘
  • 内部类编译时生成 xxxx$xxxx的class文件
  • 内部类不能够与外部类同名

1.2 内部类的使用

  • 在封装其类本省的类中使用该类,与普通类的使用方式相同
  • 在其他地方使用该类:a 类名前要冠以外部类的类名; b 在用new创建内部类对象时,外部类名.内部类名 内部类对象名=外部类对象名.new 内部类名(参数)

1.3 在内部类中使用外部类的成员

  • 内部类可以直接使用外部类的所有字段和方法;private也可以
  • 如果内部类与外部类有同名的字段方法,则:外部类名.this.字段或方法

代码示例:

public class TestInnerClass {    public static void main(String[] args){        ExternalClass  extern = new ExternalClass();        ExternalClass.InnerClass inner = extern.new InnerClass();        inner.outPut("方法的字段");    }}class ExternalClass{    private String s = "外部类字段";        class InnerClass{        private String s = "内部类字段";        public void outPut(String s){            System.out.println("s的值为 " + s);            System.out.println("this.s的值为 " + this.s);            System.out.println("ExternalClass.s的值为 " + ExternalClass.this.s);        }    }    }
View Code

输出结果:

s的值为 方法的字段this.s的值为 内部类字段ExternalClass.s的值为 外部类字段
View Code

1.4 内部类的修饰符

内部类与外部类的字段和方法一样,作为外部类的成员而存在,其前面可以有访问控制符与其他修饰符

  • 访问控制符public,protected,默认、private
  • final、abstract、static等

1.5 static修饰的内部类也叫作嵌套类(nested class)

static修饰的内部类,表面该内部类实际上是一种外部类,他与外部类的实例无关;

static修饰的内部类在使用时:

  • 实例化static类时,在new前不需要增减外部类对象实例变量
  • static类中不能访问外部类中非static的字段及方法
  • static方法中不能访问非static的域及方法

2 局部类---在一个方法中定义的类

  • 同局部变量一样,方法中的内部类,不能够被访private、protected、public、static等修饰,但能够被final、abstract修饰
  • 可以访问其外部类的成员
  • 不能访问该方法中的非final的局部变量(注意:java8中使用lambda表达式来实现局部类时,可以访问方法的普通局部变量
class TestInnerInMethod {    public static void main(String[] args)     {        Object obj = new Outer().makeTheInner(47);        System.out.println("Hello World!" + obj.toString() );    }}class Outer{    private int size = 5;    public Object makeTheInner( int localVar )    {        final int finalLocalVar = 99;        class Inner  {            public String toString() {                return ( " InnerSize: " + size +                     // " localVar: " + localVar +   // Error!                     " finalLocalVar: " + finalLocalVar                );            }        }        return new Inner();    }}
View Code

3 匿名类----一种特殊的)是一种特殊的内部类 ,它没有类名,在定义类的同时就生成该对象的一个实例;“一次性使用”的类

  • 不取名字,直接用其父类或接口的名字,编译器生成 xxxxx$1之类的名字
  • 类的定义的同时就创建实例,即类的定义前面有一个new,即new 类名或接口名(){……}
  • 不定义构造方法,在构造对象时使用父类构造方法
class TestInnerAnonymous {    public static void main(String[] args)     {        Object obj = new Outer().makeTheInner(47);        System.out.println("Hello World!" + obj.toString() );    }}class Outer{    private int size = 5;    public Object makeTheInner( int localVar )    {        final int finalLocalVar = 99;        return new Object()  {            public String toString() {                return ( " InnerSize: " + size +                     " finalLocalVar: " + finalLocalVar                );            }        };    }}
View Code

 

转载于:https://www.cnblogs.com/penghuster/p/4840482.html

你可能感兴趣的文章
centos下Elasticsearch数据迁移与备份
查看>>
设置进程和线程的优先级
查看>>
android studio环境下创建menu问题(标题栏显示问题)
查看>>
MVC其实很简单(Django框架)
查看>>
UIScrollView 原理
查看>>
linux在tomcat中指定jdk
查看>>
vue学习(二)Vue常用指令
查看>>
《中国作者英文科学写作中的常见语法问题(一)》
查看>>
如何撰写SCI论文的讨论部分?——经典结构 – 俗称“倒漏斗型。
查看>>
织梦dedeCMS数据库结构字段说明-简略说明
查看>>
Cocoa touch(二):UIApplication
查看>>
【数据结构与算法C】利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty ...
查看>>
Python-编码和二进制-运算符
查看>>
BZOJ-3211花神游历各国 并查集+树状数组
查看>>
【BZOJ-3667】Rabin_Miller算法 随机化判素数
查看>>
KVC与KVO
查看>>
[HDU5015]233 Matrix
查看>>
慢连接
查看>>
.NET 平台技术官网链接
查看>>
【计算机视觉】SIFT中LoG和DoG比较
查看>>