`
hehaibo
  • 浏览: 416204 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java基础--静态内部类和局部内部类

阅读更多

静态内部类的特点:

1 静态内部类的实例不会自动持有外部类的特定实例的引用。在创建内部类的实例时,不必创建外部类的实例。

 

class A {
	public static class B {
		int v;
	}
}

public class TestStaticInner {

	public static void main(String[] args) {
		A.B b = new A.B();
		System.out.println(b.v);
	}
}

 

 

2 静态内部类可以直接访问外部类的静态成员,若访问实例成员,就必须通过外部类的实例去访问。

3 在静态内部类中可以定义静态成员和实例成员。

 

class A {
    private int a1=12;

    private static int a2=2;

    public void test(){}

    public static class B {

       //int b1=a1;//不能直接访问外部类的成员变量
       int b2=a2;
       int v;
       int b3=new A().a1;//实例去访问
       static String name="test";
       public void test(){}
       static void methodB()
       {
           System.out.println(new A().a1);
       }

       public void methodC()
       {
           this.test();
           new A().test();
       }
    }
}  

 

 

4 客户类可以通过完整的类名直接访问静态内部类的静态成员。但是不能通过完整类名访问静态方法,因为静态方法可能访问外部类的实例实例变量和方法。

System.out.println("直接通过完整类名访问静态成员变量:"+A.B.name);

//System.out.println("直接通过完整类名访问静态成员:"+A.B.methodB());

 

局部内部类:

局部内部类是在一个方法中定义的,和局部变量一样,局部内部类不能用控制修饰符public private protected static修饰符来修饰。特点

1 局部内部类只能在当前方法中使用。

2 局部内部类和实例内部类一样,不能包含静态成员。

3 在局部内部类中定义的类不能加访问修饰符。如public private

class A {
	// B b =new B();不能访问局部内部类只能在当前方法中使用。
	public void mathod() {
		class B {
			// static String name; 不能包含静态成员变量 ,再次强调可以包含静态常量
			// static class D{}//编译错误 static不能修饰内部类,可以用 abstract 和final修饰
			// 但是不能同时使用,局部类也不能加访问修饰符
			int v1, v2;

			class C {
				int v3;
			}
		}

		B b = new B();// ok
		System.out.println(b.v1);
		B.C c = b.new C();// ok
	}

	final int localA = 32;// 定义常量
	int a;

	public void m2(final int p1, int p2) {
		int localV1 = 21;
		final int localB = 23;// 定义常量
		class B {

			final static int V = 3;
			// int localV= localV1;
			int b1 = a;
			int b2 = p1;
			// int b3=p2;//不能访问非常量
			int b5 = localB;
		}
	}
}

 

分享到:
评论
1 楼 ctguhqh 2011-07-19  
4 客户类可以通过完整的类名直接访问静态内部类的静态成员。但是不能通过完整类名访问静态方法,因为静态方法可能访问外部类的实例实例变量和方法。

这里好像有问题吧,好像可以静态方法也可以访问啊

相关推荐

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

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

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

    内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...

    编程语言-Java语言-关于内部类的分类和认识

    Java语言中的内部类根据定义的位置和访问权限可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类是定义在类的内部且与类的实例相关联的类;局部内部类是定义在方法或作用域内的类;匿名内部...

    java语言--内部类总结

    - 静态内部类可以拥有静态成员和静态方法,但不能直接访问外部类的非静态成员。 - 匿名内部类的使用: - 匿名内部类通常用于简洁地实现一个接口或继承一个类,常用于事件监听器或回调函数的定义。 内部类的应用...

    Java的内部类讲解案例代码(成员内部类、局部内部类、匿名内部类、静态内部类、外部类访问四种内部类、其他类访问四种内部类...)

    - 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...

    java和kotlin的内部类静态嵌套类

    内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。其中,静态嵌套类是与外部类关联但不持有对外部类的引用,因此它可以像普通类一样被静态引用,而无需外部类实例。 Java的静态嵌套类通常用于...

    内部类的相关知识-静态内部类,匿名内部类……

    本文详细介绍了 Java 中内部类的各种类型及其使用场景,包括静态内部类、非静态内部类、局部内部类以及匿名内部类。每种类型的内部类都有其独特的特性和应用场景,理解这些差异对于更高效地利用 Java 语言特性至关...

    浅谈内部类与静态内部类的应用

    内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...

    java 内部类 局部内部类 匿名类 实例代码

    本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...

    java中内部类与外部类的学习资料.docx

    - **成员内部类**:分为实例内部类和静态内部类。 - **局部内部类**:定义在方法内部的临时类,不作为成员存在。 5. **注意事项**: - 实例内部类不能定义静态成员,因为它们依赖于外部类的实例。 - 静态内部类...

    Java内部类总结

    Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态嵌套类)、局部内部类和匿名内部类。 - **成员内部类**:这种类型的内部类是定义在外部类的一个成员位置上,它可以访问外部类...

    JAVA 内部类 PPT

    - **局部内部类**:定义在方法、构造器或块中的类称为局部内部类,它的作用域仅限于该方法、构造器或块。 - **匿名类**:没有名字的内部类,通常用于一次性实现某个接口或父类的简单功能。 2. **内部类继承** - ...

    【IT十八掌徐培成】Java基础第06天-04.匿名内部类1.zip

    不过,需要注意的是,匿名内部类只能继承非final的本地类或者静态嵌套类,因为Java的内存管理机制限制了非静态内部类对它们的外部类有隐含的引用,这可能导致内存泄漏问题。 在课程中,徐培成老师可能会通过示例...

    java内部类详解

    内部类主要分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 1. 静态内部类(Static Inner Class) 静态内部类与普通的类类似,只是它们定义在外部类中,并且前面带有 `static` 关键字。它们不会...

    从零开始学JAVA第12章_内部类.ppt

    内部类可以分为非静态内部类、局部内部类、静态内部类和匿名内部类四种。 非静态内部类是指定义在另一个类的非静态成员中的类。非静态内部类可以访问外部类的成员变量和成员方法,同时也可以被外部类访问。在外部类...

    使用内部和匿名类优化Java代码

    静态内部类与普通类的行为相似,但能直接访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员,包括实例变量和方法。非静态内部类在创建时会隐式持有对外部类实例的引用,因此需要外部类的实例来实例化...

    Java中的静态内部类详解及代码示例

    Java中的内部类主要分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。 成员内部类是最普通的内部类,它是一个普通的类定义在另一个类的内部。成员内部类可以直接访问外部类的属性和方法,即使是private...

    java内部类使用总结

    - **局部内部类**:定义在方法内部的类,作用域仅限于该方法,无法在方法外部访问。 - **匿名内部类**:没有名字的内部类,通常用于快速实现接口或抽象类的单次实例化需求。 2. **实例内部类的特点** - 实例内部...

    Java4Android 35_内部类和匿名内部类

    2. **局部内部类**: 定义在方法、构造器或块中的类被称为局部内部类。它的作用范围仅限于该方法、构造器或块。 3. **静态内部类**: 声明为static的内部类,称为静态内部类。它不持有对外部类的隐式引用,因此可以...

    Java软件开发实战 Java基础与案例开发详解 8-1 内部类与包装器 共15页.pdf

    内部类可以分为四种类型:静态内部类、非静态内部类、局部内部类和匿名内部类。 - **静态内部类**:通过`static`关键字声明,可以直接通过外部类的名称来访问。 - **非静态内部类**:没有`static`关键字,必须通过...

Global site tag (gtag.js) - Google Analytics