- 浏览: 1241606 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
最近复习了一下内部类的相关知识
以前基础文章中有介绍过内部类的相关知识及在外部类和其它类中访问内部类的方法
现贴出两个测试实例如下:
例一:内部类声明为static时
- package com.bytecode.openexcel.util;
- public class TestStaticInnerClass {
- private String name = "lsfslfs"; //Member variable
- public static int num = 3; //static Member variable
- public static class InnerClass{ //static innerclass
- private String name = "sfeee"; //inncerclass Member variable
- private int num = 4; //inncerclass Member variable
- public void getStr(){
- String name = "ddd";
- System.out.println(name); //Visit local variable
- System.out.println(this.name); //Visit innerclass member variable
- //System.out.println(TestInnerClass.this.name); //couldn't visit not static outclass member variable
- System.out.println(TestStaticInnerClass.num); //visit out class static member variable
- getMn(); //visit out class static method
- //getString(); couldn't visit out class not static method
- }
- }
- public void getString(){
- InnerClass ins = new InnerClass();
- ins.getStr();//out class's method visit static innerclass method
- getMn(); //visit outclass static method
- getDe(); //visit outclass not static method
- System.out.println(num);//visit outclass static member variable
- System.out.println(name);//visit outclass not static member variable
- }
- public void getDe(){
- System.out.println("this date");
- }
- public static void getMn(){
- System.out.println("static method");
- }
- public InnerClass getInner(){
- return new InnerClass();
- }
- public static void main(String[] args) {
- // method one to create innerclass object in outclass
- InnerClass ins = new InnerClass();
- ins.getStr();
- // method two to create innerclass object in outclass
- TestStaticInnerClass ts = new TestStaticInnerClass();
- InnerClass ins2 = ts.getInner();
- ins2.getStr();
- }
- }
- class View{
- public static void main(String[] args){
- // method one to create innerclass object in other class
- TestStaticInnerClass.InnerClass ind = new TestStaticInnerClass.InnerClass();
- ind.getStr();
- //visit outclass.innerclass's method as the innerclass has been declared static
- // method two to create innerclass object in other class
- TestStaticInnerClass out = new TestStaticInnerClass();
- TestStaticInnerClass.InnerClass ind2 = out.getInner();
- ind2.getStr();
- }
- }
上面演示了分别在外部类TestStaticInnerClass 的main方法及其它类View中的两种方法实例化内部类并访问内部类的方法的情况。第一种方法是通过外部类中提供的方法返回内部类InnerClass的实例;第二种方法则通过实例化的外部类引用out直接实例化内部类实例ind2再调用方法getStr;
例二:内部类声明为非static时
- package com.bytecode.openexcel.util;
- import com.bytecode.openexcel.util.TestStaticInnerClass.InnerClass;
- public class TestNoStaticInnerClass {
- private String name = "lsfslfs"; // Member variable
- public static int num = 3; // static Member variable
- public class InnerClass2 { // not static innerclass
- private String name = "sfeee"; // inncerclass Member variable
- private int num = 4; // inncerclass Member variable
- public void getStr() {
- String name = "ddd";
- System.out.println(name); // Visit local variable
- System.out.println(this.name); // Visit innerclass member variable
- System.out.println(TestNoStaticInnerClass.this.name); // visit out class not static member variable
- System.out.println(TestNoStaticInnerClass.num); // visit out class static member variable
- getMn(); // visit out class static method
- getString(); //could visit out class not static method
- }
- }
- public void getString() {
- InnerClass2 ins = new InnerClass2();
- ins.getStr();// out class's method visit innerclass method
- getMn(); // visit outclass static method
- getDe(); // visit outclass not static method
- System.out.println(num);// visit outclass static member variable
- System.out.println(name);// visit outclass not static member variable
- }
- public void getDe() {
- System.out.println("this date");
- }
- public static void getMn() {
- System.out.println("static method");
- }
- public InnerClass2 getInner() {
- return new InnerClass2();
- }
- public static void main(String[] args) {
- // method one to create innerclass object in outclass
- TestNoStaticInnerClass tss = new TestNoStaticInnerClass();
- InnerClass2 ins = tss.new InnerClass2();
- ins.getStr();
- // method two to create innerclass object in outclass
- TestNoStaticInnerClass ts = new TestNoStaticInnerClass();
- InnerClass2 ins2 = ts.getInner();
- ins2.getStr();
- }
- }
- class View2 {
- public static void main(String[] args) {
- // method one to create innerclass object in other class
- TestNoStaticInnerClass tss = new TestNoStaticInnerClass();
- TestNoStaticInnerClass.InnerClass2 ind= tss.new InnerClass2();
- ind.getStr();
- // visit outclass.innerclass's method as the innerclass has not been declared static
- // method two to create innerclass object in other class
- TestNoStaticInnerClass out = new TestNoStaticInnerClass();
- TestNoStaticInnerClass.InnerClass2 ind2 = out.getInner();
- ind2.getStr();
- }
- }
注意两个示例的区别:两个示例中通过第一种方法调用getStr方法基本相同,但第二种方法时有所不同,比较两个类中的main方法就一切明白了:
main1:
- // method one to create innerclass object in other class
- TestStaticInnerClass.InnerClass ind = new TestStaticInnerClass.InnerClass();
- ind.getStr();
- //visit outclass.innerclass's method as the innerclass has been declared static
- // method two to create innerclass object in other class
- TestStaticInnerClass out = new TestStaticInnerClass();
- TestStaticInnerClass.InnerClass ind2 = out.getInner();
- ind2.getStr();
main2:
- // method one to create innerclass object in other class
- TestNoStaticInnerClass tss = new TestNoStaticInnerClass();
- TestNoStaticInnerClass.InnerClass2 ind= tss.new InnerClass2();
- ind.getStr();
- // visit outclass.innerclass's method as the innerclass has not been declared static
- // method two to create innerclass object in other class
- TestNoStaticInnerClass out = new TestNoStaticInnerClass();
- TestNoStaticInnerClass.InnerClass2 ind2 = out.getInner();
- ind2.getStr();
值得注意的是上面两例中在外部类的方法getString中都直接实例化了内部类,再访问内部类的方法,而在外部类的main方法和其它类view中实例化内部类才需先实例化一个外部类再通过外部类的引用实例化内部类再调用方法。如上面两个示例代码中
以下方法内容完全一样:
- public void getString(){
- InnerClass ins = new InnerClass();
- ins.getStr();//out class's method visit static innerclass method
- getMn(); //visit outclass static method
- getDe(); //visit outclass not static method
- System.out.println(num);//visit outclass static member variable
- System.out.println(name);//visit outclass not static member variable
- }
发表评论
-
JVM内存管理及性能调优(内存溢出、内存泄漏)
2015-09-02 07:14 701JAVA内存管理(内存溢出、内存泄漏)相关参考: JA ... -
JAVA可变参数对重载的影响
2014-01-27 15:28 941package com.lwf.test; publi ... -
有关String类创建几个对象的问题
2013-07-09 23:18 1342试题一: String s = new String(& ... -
JDK1.5下实现JDK1.6的Arrays.copyOfRange() 方法
2012-08-29 10:59 1770public static void test(){ i ... -
JAVA四舍五入的处理
2012-02-11 10:47 1025如下,保留两个小数位 double f = 3 ... -
Comparator实现排序
2011-11-16 01:23 1245转自:Comparator实现排序 在java.util包 ... -
JAVA定时器使用
2011-08-19 11:05 785http://hualong.iteye.com/blog/5 ... -
JDK5.0 Annotation学习笔记
2011-07-26 22:48 757http://linliangyi2007.iteye.com ... -
JAVA CP命令
2010-12-31 11:51 10307java -cp .;c:\dir1\lib.jar Test ... -
JDK1.5的新特性及应用
2010-07-13 12:49 1018以下两文: http://heaven-arch.iteye ... -
JAVA面试题150例
2010-05-19 11:44 2065一、Java基础方面 1、作用域public,priva ... -
《thinking in java》第四章:初始化与清理三
2010-05-19 00:21 790http://quicker.iteye.com/blog/5 ... -
JAVA编程思想第四版完整下载地址
2010-05-18 18:35 1270http://hi.baidu.com/yang1101190 ... -
JAVA多线程学习一
2010-04-13 17:21 937http://renyangok.iteye.com/blog ... -
JAVA常用误区整理
2008-01-09 13:12 9161、 float f=1.3;是不对的,编译时会出错,java ... -
try与finally块中return的问题
2008-12-05 14:37 1255针对以下情况进行测试: 情况1:try{} catch( ... -
简单克隆与深度克隆的思考
2008-12-19 16:44 1043白话简单克隆和深度克隆一文 http://blog.csd ... -
一道面试题引发的思考之:类的初始化
2008-12-29 16:23 723本人曾写过JAVA基础方面的blog,也是针对类的初始化的, ... -
JAVA基础学习篇----对象串行化及Transient关键字的使用
2009-01-08 18:07 0http://blog.csdn.net/scruffybea ... -
!JAVA学习提高之---- JAVA日期格式化及相关操作
2009-01-13 17:02 803http://blog.csdn.net/gubaohua/a ...
相关推荐
与普通成员内部类不同,静态内部类不持有对外部类的引用,因此不能直接访问外部类的非静态成员。静态内部类需要通过外部类名.静态内部类名的方式来创建对象,这与访问任何其他静态成员的方式相同。这种特性使得静态...
根据内部类是否声明为static,它们被分为非静态内部类(也称为成员内部类)和静态内部类。 #### 二、静态内部类的特点 静态内部类具有以下特点: 1. **独立性**:静态内部类与外部类之间没有依赖关系,即使外部类...
然而,不当使用Handler,尤其是结合匿名内部类或非静态内部类,可能导致内存泄漏和Native内存增加,这对应用性能和稳定性造成负面影响。 首先,我们要理解内存泄漏的概念。内存泄漏是指程序中已分配的内存没有被...
这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所不同,它们在使用和行为上存在显著的差异。 首先,让我们来探讨一下静态内部类与非静态内部类的主要区别: 1. **引用关系**: - 静态...
Java语言中的静态内部类,也称为嵌套类,是内部类的一种特殊形式,它与非静态内部类(也称为成员内部类)相比有着独特的特点和使用场景。在深入探讨其使用规范之前,我们先理解静态内部类的基本概念。 静态内部类不...
2. **不能访问外部类的非静态成员**:由于静态内部类与外部类的静态属性和方法处于相同的静态上下文中,因此静态内部类无法访问外部类的非静态成员变量或方法。 3. **命名空间独立**:静态内部类有自己的命名空间,...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...
与静态内部类不同的是,非静态内部类依赖于外部类的实例。因此,创建非静态内部类实例时,必须首先创建一个外部类的实例。 ##### 3.1 创建实例内部类 创建非静态内部类实例通常需要以下步骤: 1. 定义外部类。 2....
静态内部类与其它内部类的区别在于非静态内部类在编译完成之后会隐含地保存一个引用,该引用是指向创建它的外部类,但是静态内部类却没有。静态内部类只是嵌套在外部类中,因此也被称为嵌套内部类。 静态内部类的...
Java SE中的静态内部类是一种特殊的内部类,它与非静态内部类(也称为成员内部类)有着显著的区别。静态内部类并不需要外部类的实例来创建它的对象,而是可以直接通过类名进行实例化,就像普通的类一样。在给定的...
因此,静态内部类可以包含静态成员,也可以包含非静态成员。 二、静态内部类的访问规则 静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。即使是静态内部类的实例方法也不能访问外部类的实例成员,...
非静态嵌套类也即内部类,是指在一个类的内部定义的非静态嵌套类。非静态嵌套类可以访问外部类的所有成员变量和方法,包括私有成员变量和方法。例如,在上面的代码中,非静态嵌套类 Inner 可以访问外部类的成员变量 ...
静态嵌套类可以访问外部类的静态成员变量,但不能访问非静态成员变量。静态嵌套类可以独立于外部类实例化,可以使用外部类的名称和$符号来访问静态嵌套类。 三、方法内部类 方法内部类是指定义在方法中的内部类。...
内部类可以分为两种:静态内部类和非静态内部类。 1. 静态内部类 静态内部类是指在一个静态上下文中定义的内部类。静态内部类可以访问外部类的静态成员变量和方法,但不能访问非静态成员变量和方法。静态内部类的...
内部类可以分为非静态内部类、局部内部类、静态内部类和匿名内部类四种。 非静态内部类是指定义在另一个类的非静态成员中的类。非静态内部类可以访问外部类的成员变量和成员方法,同时也可以被外部类访问。在外部类...
- 静态内部类可以独立于外部类对象存在,但非静态内部类不能。 - 内部类可以访问外部类的所有成员,包括私有成员,这是因为内部类对象拥有对外部类对象的隐式引用。 - 匿名内部类不能包含静态成员(除了final static...
静态内部类与普通的类类似,只是它们定义在外部类中,并且前面带有 `static` 关键字。它们不会隐含持有外部类的引用,因此无法直接访问外部类的非静态成员。静态内部类可以看作是外部类的静态成员,与外部类的其他...
* 静态内部类不能访问外部类的非静态成员 匿名内部类的特点: * 匿名内部类是指没有名字的内部类 * 匿名内部类通常用在创建实例时使用 * 匿名内部类可以访问外部类的所有成员 在 Java 中,内部类是一种非常重要的...
3. **外部类访问静态内部类**:静态内部类可以通过“外部类.静态内部类”的方式创建对象实例。 4. **静态内部类成员**:静态成员内部类的成员变量和方法都是静态的。 #### 四、局部内部类 局部内部类是在方法或...
静态内部类不能直接访问外部类的非静态成员,但可以通过外部类的实例来访问。以下是一个静态内部类的例子: ```java public class Outer { private static int outerStaticValue = 200; static class Static...