`
cleanboxer
  • 浏览: 35511 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java 内部类 - 3

阅读更多

---------转载 builder.com.cn

3          Local class(局部类)
对一个静态成员类,去掉其声明中的“static”关键字,将其定义移入其外部类
的静态方法或静态初始化代码段中就成为了局部静态成员类。
       对一个成员类,将其定义移入其外部类的实例方法或实例初始化代码中就成为了局部成员类。
       局部静态成员类与静态成员类的基本特性相同。例如,都只能访问外部类的静态字段或方法,但不能访问外部类的实例字段和实例方法等。
       局部成员类与成员类的基本特性相同。例如,局部成员类实例必属于其外部类的一个实例,可通过OuterClass.this引用其外部类实例等。
另外,局部类也有其自己的特性,如以下代码所示:

<!---->public class Outer {
    
private int instanceField; 
    
private static int staticField; 
    
    
//define a local member class in instance code block
    {
        
int localVirable1 = 0;
        
final int localVirable2 = 1;
        
class Inner1 {
            
public Inner1() {
                
//can access its outer class' field and method directly
                instanceField = 1;
                
//use OuterClass.this to get its corresponding outer class instance
                Outer.this.instanceField = 1;
                
                
//can not access the not final local virable in its containing code block
                
//System.out.print(localVirable1);
                
                
//can access the final local virable in its containing code block
                System.out.print(localVirable2);
            }
        }        
        
        
//local class can not have privilege modifier 
        /*public class inner2 */
    }
    
    
// define a local static member class in static code block
    static {
        
class Inner2 {
            
public Inner2() {
                staticField 
= 1;
                
//can not access instance field and method in a local static member class 
                
//intanceField = 2;
            }
        }
    }
    
    
public void intanceMethod() {
        
//define a local class in its out class' instance method
        class Inner3 
        
        
//local class is visible only in its containning code block
        
//Outer.Inner2 inner2;
    }
    
    
private static void staticMethod() {
        
//define a local static member class in its out class' static method
        class Inner4 {    
            
public Inner4() {
                staticField 
= 2;
            }
        }
        
        
//can not define a interface as a local class
        /*interface I */
    }
}

 
3.1      局部类特性
如示例代码所示,局部类能且只能访问其所属代码段中的声明为final的局部
变量。为什么只能访问声明为final的局部变量呢?我们知道,局部变量在其所属的代码段(譬如某个函数)执行完毕后就会被回收,而一个局部类的实例却可以在其类定义所属代码段执行完毕后依然存在,如果它可操控非final的局部变量,用户就可以通过该实例修改已不存在的局部变量,无意义。
3.2      局部类约束

如示例代码所示,内部类只在定义它的代码段中可见,不能在它所属代码段之外的代码中使用;因此也就没有public/private/default权限修饰符(无意义)

不能以局部类形式定义一个接口。局部类只在其所属代码段中可见,定义这样的接口无意义

局部类类名不能与其外部类类名重复

3.3      什么时候使用局部类
局部类大部分以匿名类的形式使用。
           
4          Anonymous class(匿名类)
没有类名的局部类就是匿名类。用一条语句完成匿名类的定义与实例创建。例
如如下代码:
<!---->public class Outer {
    
public void instanceMethod() {
        
//define a nonymous class which implements Action interface and creat an instance of it
        Action action = new Action() {
            
public void doAction() {
                System.out.println(
"a simple anonymous class demo");
            }};
        action.doAction();
        
        
//define a nonoymous class which extends BaseClass and create an instance of it
        new BaseClass(5) {
            
public void printData(){
                System.out.println(
"data = " + getData());
            }
        }.printData(); 
//"data = 5" will be outputed
    }
}

interface Action {
    
void doAction();
}

class BaseClass {
    
private int data;
    
    
public BaseClass (int data) {
        
this.data = data;
    }
    
    
public int getData() {
        
return data;
    }
}
分享到:
评论

相关推荐

    Java语法总结 - 内部类

    Java内部类详解 Java内部类是Java语言中的一种特殊类别,它是指定义在另外一个类内部的类。内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法...

    Java ---- 局部内部类 静态内部类 普通内部类

    Java ---- 局部内部类 静态内部类 普通内部类

    java接口与内部类教学PPT

    1.接口-简介 2....内部类-简介 8.内部类-作用 9.内部类-特殊语法规则 10.内部类-安全性 11.内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述

    taobao-java-sdk-1.0.0_taoбao_ddsdk_钉钉收_dingtalk_

    在实际开发中,可以通过实例化SDK类,调用相应的API方法来实现具体功能。 5. **注意事项** - 安全性:在使用SDK时,必须妥善保管好AppKey和AppSecret,避免泄露。 - 接口限制:钉钉API有一定的调用频率限制,...

    java-1.8.0-openjdk.linux.x86_64

    OpenJDK 1.8.0 版本包含了Java语言的关键特性,如泛型、枚举、匿名内部类、动态代理、增强的for循环、可变参数、注解等。此外,它还提供了Lambda表达式、函数式接口、Stream API、Optional类等Java 8的新特性,这些...

    java语言--内部类总结

    《Java语言——内部类详解》 内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以提供更复杂的封装,使得代码结构更加清晰,同时还能访问外部类的私有成员,提供了更高级别...

    Java内部类总结

    ### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...

    java内部类详解

    3. 局部内部类(Local Inner Class) 局部内部类定义在方法或代码块内,其作用域仅限于该方法或代码块。它们通常用于实现特定方法的功能,且只能在该方法内部使用。由于其局部性,局部内部类可以访问方法内的所有...

    java内部类的讲解

    ### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...

    JAVA语法总结 - 内部类

    ### JAVA语法总结 - 内部类 #### 一、内部类概述 内部类(Inner Class)自Java 1.1版本引入以来,一直是Java编程语言中的一个重要特性。它允许开发者在一个类的内部定义另一个类,这有助于更好地组织代码并实现更...

    JAVA 内部类 PPT

    Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...

    Java-WebSocket-1.3.0.jar,Java-WebSocket-1.3.0-sources.jar

    `Java-WebSocket-1.3.0-sources.jar` 包含了库的源代码,这对于开发人员来说非常有用,因为它允许他们查看和理解库内部的工作机制,方便调试、学习和定制。如果遇到问题或需要对库进行扩展,可以直接查看源代码,...

    javabase64-1.2.jar

    通常,一个.jar文件是Java的归档文件,它封装了多个编译后的Java类文件以及相关的元数据,方便Java应用程序或应用服务器引用。这个库的命名方式表明它专注于Base64操作,可能提供了比Java标准库更丰富的API或者优化...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态...

    12.java内部类.zip

    12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类...

    java 内部类应用

    Java内部类是Java语言的一个特色特性,它允许我们在一个类的内部定义另一个类。这种设计模式在处理一些特定情况时非常有用,例如实现匿名回调、封装特定逻辑或创建与外部类有紧密关系的类。本篇文章将深入探讨Java...

    java 内部类使用(内部匿名类)

    Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏实现细节,同时也增强了代码的复用性。内部类分为几种类型,包括成员内部类、...

    java基础第七章内部类与异常类.doc

    Java 基础第七章内部类与异常类 Java 语言支持在一个类中定义另一个类,这样的类称做内部类。内部类和外嵌类之间存在着紧密的关系:内部类可以访问外嵌类的成员变量和方法,而外嵌类也可以使用内部类声明的对象作为...

Global site tag (gtag.js) - Google Analytics