`

java内部类、静态内部类 小结

    博客分类:
  • java
 
阅读更多
1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。

2)静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。这样静态内部类就可以理解了,因为这个类没有必要单独存放一个文件,它一般来说只被所在外部类使用。并且它可以直接被用 外部类名+内部类名 获得。以下举例说明怎么使用:

Student类有个叫School的内部类(非静态)

Student stu = new Student();

stu.School sch = new stu.School();

sch就是School的一个对象。

假如School是内部静态类:

Student.School sch = new Student.School();

3)静态内部类也叫嵌套类,用这个名字给他定义是更加形象的。意思是说内部类和外部类的关系只是层次嵌套关系,所以只是在创建类文件的时候类文件名是如下形式:outer$inner.java,在使用方面完全和两个普通类一样。

和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。

4)一般内部类在我看来才是真正的内部类,他们不仅有着嵌套关系,更重要的是内部类可以获得外部类的引用从而实现回调。而且通过创建内部类还可已让java实现真正的多继承!(interface名叫接口,顾名思义,他就是实现接口的,让一个类继承多个接口实现多继承是不合适的)

在非静态内部类中不可以声明静态成员,一般的非静态内部类,可以随意的访问外部类中的成员变量与成员方法。即使这些成员方法被修饰为private(私有的成员变量或者方法),其非静态内部类都可以随意的访问。则是非静态内部类的特权。不能够从静态内部类的对象中访问外部类的非静态成员(包括成员变量与成员方法)。



如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static.通常称为嵌套类。

当内部类是static时,意味着:

[1]要创建嵌套类的对象,并不需要其外围类的对象

[2]不能从嵌套类的对象中访问非静态的外围类对象

嵌套类与普通的内部类还有一个区别:

普通内部类的字段的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类.但是在嵌套类里可以包含所有这些东西。

分享到:
评论

相关推荐

    JAVA语法总结 - 内部类

    - **非静态内部类不能包含静态成员**:成员内部类(非静态)不能拥有静态成员,因为它们依赖于外部类的实例。 #### 三、成员内部类详解 成员内部类是在外部类的成员位置定义的内部类,其语法结构如下: ```java ...

    Java语言基础入门教程 Java开发编程基础课程 第9章 类的高级特性 共12页.pptx

    本文详细介绍了Java类的一些高级特性,包括抽象类、内部类的不同形式(成员内部类、局部内部类、匿名内部类、静态内部类)、Class类与Java反射的应用,以及注解的基本概念。通过学习这些内容,可以帮助开发者更好地...

    Java中this关键字使用小结

    `this` 也可以用来区分外部类的成员变量和内部类的局部变量,或者引用外部类的实例。 总的来说,`this` 关键字是 Java 中用于表示对象实例自身的一个关键字,它帮助我们访问成员变量、区分同名变量、在构造器间...

    JAVA程序:接口小结

    本文档“JAVA程序:接口小结”很可能是对Java接口的全面总结,包含了相关的代码示例,帮助学习者深入理解和运用接口。 接口在Java中的主要特性包括: 1. **接口是完全抽象的**:接口中的所有方法默认都是抽象的,...

    Java(J2SE、J2EE)学习小结

    6. 内部类:内部类分为成员内部类、局部内部类、匿名内部类和静态内部类。内部类可以直接访问外部类的私有成员,但静态内部类不能直接访问外部类的非静态成员。 7. 垃圾回收机制:Java的垃圾回收自动管理内存,避免...

    core java 小结

    `Math`类提供了丰富的静态方法,如`abs()`, `sqrt()`, `pow()`等,用于数学运算。生成随机数时,可以利用这些方法结合`Random`类或`Math.random()`方法。 #### 十三、Ant构建工具 Ant是一个基于XML的构建工具,...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,...

    21天学通Java-由浅入深

    245 12.3.3 在外部类外访问静态内部类 246 12.4 匿名内部类 247 12.4.1 创建匿名内部类 247 12.4.2 匿名内部类的初始化 249 12.5 综合练习 250 12.6 小结 250 12.7 习题 250 第13章 多线程(精彩视频:55分钟) 252 ...

    Java面向对象重要概念小结.docx

    静态关键字用于声明类级别的变量和方法,它们属于类而不是类的实例。静态成员由类名直接调用,不需要创建对象。 9. ** final**: final关键字用于声明不可改变的变量、方法和类。一旦声明为final,就不能再改变其...

    java笔试题小结

    ### Java笔试题小结 #### 1. Java 字符串(String) **问题**: String 类的特点是什么?与 StringBuffer 的区别? **分析与解答**: `String` 类在 Java 中是不可变的,即一旦创建了一个字符串对象,其内容就不能...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,...

    疯狂JAVA讲义

    学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...

    java开发经验小结

    如果一个方法或类过于庞大,应考虑拆分为多个小方法或类,以增加复用性和可维护性。 3. **避免在生产环境中使用System.out.println()**:在调试期间,可以使用System.out.println(),但在部署时,应替换为日志框架...

    (超赞)JAVA精华之--深入JAVA API

    - 不依赖于外部类实例的内部类被称为静态嵌套类。 - **在外部类中定义内部类** - 这种内部类可以访问外部类的成员,但反过来不行。 - **在方法中定义内部类** - 只在该方法内部有效。 - **匿名内部类** - ...

    Java内存分配、管理小结.doc

    - 静态方法属于类,不依赖类的实例,可以直接通过类名调用。 - 非静态方法属于类的实例,必须先创建对象才能调用。 以上就是Java内存分配和管理的基本概述,了解这些知识点有助于优化代码性能,避免内存泄漏,...

    大数据必学Java基础(三十七):代码块讲解

    Java 基础知识点小结 通过对代码块的讲解,我们可以了解到 Java 语言的基础知识点。代码块是 Java 语言中的一种基本结构单元,它可以用于限制变量的作用范围,或者用于执行某些特定的操作。代码块可以分为五种:...

    java基础案例与开发详解案例源码全

    8.1.3 静态内部类209 8.1.4 匿名内部类211 8.2 对象包装器213 8.3 装箱和拆箱216 8.4 本章习题218 第9章 9.1 String类220 9.1.1 字符串常量221 9.1.2 字符串对象操作224 9.1.3 字符串对象修改228 9.1.4 类型转换230 ...

    Java 语言程序设计:第5章接口多态.ppt

    5.7 本章小结 本章主要讲解了 Java 语言程序设计中接口和多态的概念、语法和应用。接口是一种抽象机制,提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。多态...

Global site tag (gtag.js) - Google Analytics