Java函数的内部类和局部类使用方法
Java是一门面向对象编程语言,因此Java的所有特性都依赖于类和对象。Java的内部类和局部类是Java语言中的一种特殊类型的类。这些类定义在其他类的内部,并且具有访问外部类的成员属性和方法的优势。本文将详细介绍Java的内部类和局部类的使用方法。
一、内部类
1. 什么是内部类
内部类是定义在另一个类中的类。内部类可以访问封装在其外部类中的所有变量和方法,包括那些用private、protected和public修饰的成员等。与之相对应的是外部类,外部类不能直接访问内部类的成员。
2. 使用内部类
Java内部类主要分为四种:静态内部类、成员内部类、局部内部类和匿名内部类。
1. 静态内部类:
静态内部类是定义在外部类中的一个静态class。静态内部类不依赖于外部类的实例化对象,因此可以在没有外部类对象的情况下创建内部类的实例。
静态内部类的定义方式:
public class OuterClass {
private static class InnerClass {
// ...
}
}
2. 成员内部类:
成员内部类是定义在外部类的非静态区域中的一个class。这种内部类依赖于外部类的实例化对象,可以访问外部类的所有属性和方法。
成员内部类的定义方式:
public class OuterClass {
private class InnerClass {
// ...
}
}
3. 局部内部类:
局部内部类是定义在方法内部的class,类似于局部变量和方法中的内联函数。这种内部类也可以访问外部类的所有属性和方法。
局部内部类的定义方式:
public class OuterClass {
void someMethod() {
class InnerClass {
// ...
}
}
}
4. 匿名内部类:
匿名内部类是没有名字的内部类,通常情况下它是用来实现接口的。当需要在某些方法中实现某个接口时,可以使用匿名内部类来实现,省去实现接口的复杂过程。
匿名内部类的定义方式:
public class OuterClass {
void someMethod() {
Runnable r = new Runnable() {
// 实现run方法
public void run() {
// ...
}
};
Thread t = new Thread(r);
t.start();
}
}
二、局部类
1. 什么是局部类
局部类是定义在一个方法或代码块中的类,它只能在方法或代码块中使用。局部类可以访问它所在外部方法或代码块的局部变量、方法参数和类成员变量,如果这些变量是final类型的,那么它们也成为了局部类的成员变量。局部类是用来封装一个方法或代码块中的逻辑片段,以保证代码的简洁性和可读性。
2. 使用局部类
局部类的使用方法与内部类类似,只是声明位置不同。
局部类的定义利用了Java的方法作用域,如下:
public class OuterClass {
void someMethod() {
class InnerClass {
// ...
}
InnerClass ic = new InnerClass();
}
}
局部类如果要访问方法或代码块中的变量,那么这些变量必须是final类型的。
public class OuterClass {
void someMethod() {
final int x = 0;
class InnerClass {
public void someInnerMethod() {
System.out.println(x);
// x++; // 编译失败,不能修改final类型的变量
}
}
InnerClass ic = new InnerClass();
ic.someInnerMethod();
}
}
局部类与内部类的对比:
1.作用域不同
局部类的作用范围仅限于包含它的方法或代码块内部,而内部类的作用范围为外部类。
2. 分类不同
内部类根据定义的位置和修饰符分类为四种,而局部类仅分为一种。
3. 使用频率不同
通常情况下,内部类的使用频率比局部类高,因为内部类可以用来定义回调函数、监听器和适配器等。通常,“非常用功能”常会使用局部类来实现。
