Java内部类应用之静态内部类应用示例

本文实例讲述了Java内部类应用之静态内部类。分享给大家供大家参考,具体如下:

一 点睛

如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static修饰的内部类被称为类内部类,也称为静态内部类。

static关键字不可修饰外部类,但可修饰内部类。

二 实战——静态内部类不能访问外部类的实例成员,只能访问外部类的类成员

1 点睛

静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非静态成员的规则,静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。

2 代码

public class StaticInnerClassTest
{
  private int prop1 = 5;
  private static int prop2 = 9;
  static class StaticInnerClass
  {
   // 静态内部类里可以包含静态成员
   private static int age;
   public void accessOuterProp()
   {
     // 下面代码出现错误:
     // 静态内部类无法访问外部类的实例变量
     //System.out.println(prop1);
     // 下面代码正常
     System.out.println(prop2);
   }
  }
}

3 说明

accessOuterProp是一个实例方法,但依然不能访问外部类的prop1成员变量,因为这是实例变量。但可以访问prop2,因为它是静态成员变量。

三 实战——外部类使用静态内部类

1 点睛

静态内部类是外部类的一个静态成员,因此外部类的所有方法、所有初始化块可以使用静态内部类来定义变量、创建对象。

外部类依然不能直接访问静态内部类的成员,但可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可以使用静态内部类对象作为调用者来访问静态内部类的实例成员。

2 代码

public class AccessStaticInnerClass
{
  static class StaticInnerClass
  {
   private static int prop1 = 5;
   private int prop2 = 9;
  }
  public void accessInnerProp()
  {
   // System.out.println(prop1);
   // 上面代码出现错误,应改为如下形式:
   // 通过类名访问静态内部类的类成员
   System.out.println(StaticInnerClass.prop1);
   // System.out.println(prop2);
   // 上面代码出现错误,应改为如下形式:
   // 通过实例访问静态内部类的实例成员
   System.out.println(new StaticInnerClass().prop2);
  }
}

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • Java干货知识深入理解内部类

    前言 说起内部类,大家并不陌生,并且会经常在实例化容器的时候使用到它.但是内部类的具体细节语法,原理以及实现是什么样的可以不少人都还挺陌生,这里作一篇总结,希望通过这篇总结提高对内部类的认识. 内部类是什么? 由文章开头可知,内部类的定义为:定义在另一个类或方法中的类.而根据使用场景的不同,内部类还可以分为四种:成员内部类,局部内部类,匿名内部类和静态内部类.每一种的特性和注意事项都不同,下面我们一一说明. 成员内部类 顾名思义,成员内部类是定义在类内部,作为类的成员的类.如下: public

  • java匿名内部类实例简析

    匿名类是不能有名称的类,所以没办法引用它们.必须在创建时,作为new语句的一部分来声明它们.这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口.它还创建那个类的一个新实例,并把它作为语句的结果而返回.要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体.如果匿名类对另一个类进行扩展,它的主体可以访问类的成员.覆盖它的方法等等,这和其他任何标准的类都是一样

  • Java内部类的继承(全)

    下面通过实例代码给大家分享下有关JAVA内部类的继承,具体详解如下: Java内部类的构造器必须连接到指向其外围类对象的引用(构造内部类必须给它一个外部类对象的引用,内部类依赖于外部类对象),所以在继承内部类的时候,需要在导出类的构造器中手动加入对基类构造器的调用. 因为,在导出类实例化时,并不存在一个外围类对象,以让导出类的实例去连接到它. 所以,我们需要创建一个外围类,然后用一个特定的语法来表明内部类与外围类的关系. 在下例子中,需要给导出类InheritInner一个来自内部类的外围类中的

  • Java局部内部类和匿名内部类定义与用法实例分析

    本文实例讲述了Java局部内部类和匿名内部类.分享给大家供大家参考,具体如下: 一 局部内部类 1 点睛 内部类不仅可以在类中定义,也可以定义在方法体或作用域内.这样的内部类作用范围仅限于方法体或特定的作用域内,因此也称为局部内部类. 2 代码 class InnerClassTest { int score = 95; void inst() { class Inner { void display() { System.out.println("成绩: score = " + sc

  • JAVA 内部类详解及实例

    JAVA 内部类 一.什么是内部类? 一个类的定义放在另一个类的内部,这个类就叫做内部类 二.内部类有那些特性? 1.内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 . 2.内部类不能用普通的方式访问.内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 . 3.内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 . 三.内部类有哪几种? 1.成员内

  • java内部类原理与用法详解

    本文实例讲述了java内部类原理与用法.分享给大家供大家参考,具体如下: 概念 内部类:可以包含在另外一个类中的类 外部类:包含内部类的类 每个内部类都会被编译为一个独立的类,生成一个独立的字节码文件. 内部类可以方便地访问外部类的私有变量,内部类也可以声明为private从而实现对外完全隐藏. 分类 java中的四种内部类(根据定义的位置和方式划分) -静态内部类 -成员内部类 -方法内部类 -匿名内部类 分类介绍 -静态内部类 特征:在类的内部中存在另一个类,且该类被static修饰 使用范

  • java 内部类(匿名类,匿名对象,静态内部类)详解及实例

    内部类的介绍 定义在另外一个类中的类,叫内部类 成员内部类 1..new 创建成员内部类必须先创建外部类的实例,然后通过.new 创建内部类的对象 2..this 可以通过外部类的类名.this去访问外部类的所有属性和方法. public class Test1 { String name = "asnd"; public static void main(String[] args) { Test1 test1 = new Test1(); Inner mInner = test1.

  • 简单谈谈java中匿名内部类构造函数

    先看看下面的代码能不能编译通过: public static void main(String[] args) { List l1 = new ArrayList(); List l2 = new ArrayList(){}; List l3 = new ArrayList(){{}}; System.out.println(l1.getClass() == l2.getClass() ); System.out.println(l2.getClass() == l3.getClass() );

  • java中匿名内部类详解

    java匿名内部类: 1:匿名内部类,匿名内部类也就是没有名字的内部类. 2:匿名内部类的作用 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写. 3:匿名内部类的实现 匿名内部类的两种实现方式:第一种,继承一个类,重写其方法:第二种,实现一个接口(可以是多个),实现其方法. 4:匿名内部类的创建 匿名类是不能有名称的类,所以没办法引用它们.必须在创建时,作为new语句的一部分来声明它们. package com.mianshi.test; /** * 类名称:Anonymou

  • Java中内部类使用方法实战案例分析

    本文实例讲述了Java中内部类使用方法.分享给大家供大家参考,具体如下: 一 点睛 分三种情况讨论内部类的使用: 1 在外部类内部使用内部类 2 在外部类以外使用非静态内部类 3 在外部类以外使用静态内部类 二 在外部类内部使用内部类 可以直接通过内部类的类名来定义变量,通过new调用内部构造器来创建实例. 不要在外部类的静态成员(包括静态方法和静态初始化块)中使用非静态内部类,因为静态成员不能访问非静态成员. 三 在外部类以外使用非静态内部类 1 点睛 private 修饰的内部类只能在外部类

随机推荐