cmd
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
统计
随笔 - 13
文章 - 44
评论 - 9
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔档案
2006年10月 (1)
2006年8月 (2)
2006年6月 (1)
2006年4月 (3)
2006年3月 (3)
2006年2月 (3)
文章分类
j2ee基础(8)
(rss)
server(5)
(rss)
开源软件(28)
(rss)
文章档案
2006年6月 (1)
2006年4月 (9)
2006年3月 (9)
2006年2月 (11)
2005年12月 (1)
2005年11月 (2)
2005年6月 (3)
2005年1月 (1)
2004年12月 (7)
收藏夹
java技术(1)
(rss)
其他blog
(rss)
品味人生
(rss)
点点滴滴
(rss)
other
搞笑
优秀blog
临海观潮
(rss)
扬子江
ww
优秀官方
AppFuse
equinox(春秋分)
tapestry wiki
搜索
最新评论
1. re: Jetty 源码分析[未登录]
楼主有做Jetty 虚拟主机经验吗?
--Super
2. re: SVN使用技巧
无图.................................
--cyt
3. Unikal'Nyi Kontent
评论内容较长,点击标题查看
--Unikal'Nyi Kontent
4. re: 在Spring中集成Hibernate事务
抄来抄去的,没有意思
--11
5. re: J2EE 中的安全
Very good, thank you.
--cqusoft
阅读排行榜
1. SVN使用技巧(6209)
2. ejb3 学习第一篇 annotation(1745)
3. 看到这个帖子和对ajax感兴趣的网友,谢谢!往http://ajaxcn.org/forum/forums/list.page注册个帐号,交流一下,共同迎接web2.0(1085)
4. 利用XMLBean轻轻松松读写XML(转)(958)
5. 液晶面板小知识(368)
评论排行榜
1. SVN使用技巧(2)
2. 利用XMLBean轻轻松松读写XML(转)(2)
3. 看到这个帖子和对ajax感兴趣的网友,谢谢!往http://ajaxcn.org/forum/forums/list.page注册个帐号,交流一下,共同迎接web2.0(1)
4. ejb3 学习第一篇 annotation(0)
5. Spring让Hibernate使用者受益良多(0)
在学习webwork案例中碰到了静态的内部类,抄篇文章来
(一)
Java1.1以后版本添加了嵌套类(Inner Class,嵌套类、内部类)。嵌套类定义在类(外部类)里面。
嵌套类可以体现逻辑上的从属关系。同时对于其他类可以控制内部类不可见等。
外部类的成员变量作用域是整个外部类,包括嵌套类。但外部类不能访问嵌套类的private成员。例子:
public class Outer {
private int size;
public class Inner{
private int counter = 10;
public void doStuff(){ size++; }
}
public static void main(String args[]){
Inner inner= new Inner();
inner.doStuff();
System.out.println(size);
System.out.println(inner.counter);
System.out.println(counter); //编译错
}
}
(二)下面演示了如何在外部类之外实例出一个public Inner类对象。
类名前加上外部类类名,new语句前加上外部类的引用变量。这很类似package的使用。
例子:
public class Outer {
private int size;
public class Inner{
public void doStuff(){ size++; }
}
}
public class TestInner{
public static void main(String args[]){
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.doStuff();
}
}
(三)当内部类与外部类有同名变量时,缺省指本类中的变量。
例子:public class Outer {
private int size;
public class Inner{
private size;
public void doStuff(int size){
size++; this.size++;
Outer.this.size++; // 错误,Outer.size++因为size不是静态变量
}
}
public static void main(String args[]){
this.size++; //错误,静态方法使用非静态变量this
}
}
(四)在方法中定义一个嵌套类,注意嵌套类不可以访问方法的局部变量。
因为方法的局部变量只存在与方法作用期间,故localvalue不可访问。而final变量的生命周期超出了方法,所以fianlvalue可用。
public class Outer {
private int size =5;
public Object makeTheInner(int localvalue){
final int finalvalue = 6;
class Inner{
public String toString(){return (“Inner is”+size+localvalue+finalvalue);}
}
return new Inner();
}
public static void main(String args[]){
Outer outer = new Outer();
Object obj = outer.makeTheInner(47);
System.out.println(“The object is” + obj);
}
}
(五)
嵌套类的类名必须与包装它的外部类区别,且嵌套类的类名仅仅可以作用于定义范围中。方法中定义类,其类名名就只能出现在方法中。
定义在方法中的嵌套类只能使用定义为final的局部变量,不可以使用方法中的非静态变量。
嵌套类可以使用的变量种类包括:类变量、实例变量、final局部变量。
嵌套类同样具有所有的访问控制权限。高级类属性:
嵌套类可以是abstract类
嵌套类可以是接口,被其它嵌套类实现。
定义为static的内部类将成为顶级类(top-level)。它们不依赖于外部类的对象而生成,所以不可以访问外部类的对象成员。
非static内部类不能定义static成员
当外部类编译时,内部类也会编译,生成的类文件格式为:
OuterClass$InnerClass,如Outer$Inner.class
例子:
class Outer {
private int size =5;
static class Inner{
int value=5;
public void doStuff(){ size+=value; }// 错误,不能访问非static 外部类程序
}
}
public class TestInner{
public static void main(String args[]){
Outer outer = new Outer();
Inner inner = new Inner();// 这种实例也不对
应该 Out.Inner innner=new Outer.Inner() ;
}
}
非static内部类不能定义static成员 ,
(1)定义 static 的 内部类, 如果成员变量也定义成 static ,那么外围类可以直接通过类名来访问。
(2)定义 static 的 内部类, 如果成员变量不是 static ,那么外围类需要生成内部类的对象才能访问,否则直接访问导致编译出错!!
posted on 2006-04-21 01:13
静夜思
阅读(226)
评论(0)
编辑
收藏
所属分类:
j2ee基础
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
相关文章:
在学习webwork案例中碰到了静态的内部类,抄篇文章来
一个关于优化SQL的文章
介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
J2EE 中的安全
走出 JNDI 迷宫
EJB 调用原理分析
RMI简要开发
Powered by:
BlogJava
Copyright © 静夜思