A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑泽霖 中级黑马   /  2014-11-16 14:17  /  912 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态内部类
普通类不能定义为static,只有内部类可以
1内部类B的修饰符为static
class A
{
private int num=4;

static class B
{
void show()
{
System.out.println(“num=”+num);
//访问num失败,因为B是static,num不是static,应该讲num重新定义为static变量
}
}
void method()
{
B h=new B();
h.show();
}
}

class Demo
{
public static void main(String[] args)
{
//因为内部类B是静态的,在使用内部类B时不需要外部类A的对象
//直接创建内部类B对象
//A out=new A();
//out.method();
A.B in=new A.B();
}
}
内部类被静态成员修饰后,随着外部类A的加载而加载,可以把以静态的内部类就理解为是一个外部类
2如果静态的内部类中含有静态成员:
static class B
{
static void show()
{
System.out.println(“num=”+num);
}
}
访问时写为:
class Demo
{
public static void main(String[] args)
{
//如果静态内部类对象有静态成员,既然静态内部类已经岁这外部类的加载而加载,而静态成员随着类的加载而加载,就不需要对象,直接用类名调用即可
A.B.show();
}
}
3不是静态的内部类
非静态的内部类中不能定义静态成员
仅允许在非静态的内部类中定义静态常量static final

1 个回复

倒序浏览
局部内部类
成员内部类编译后的文件:A$B.class
局部内部类编译后的文件:A$1B.class
局部内部类不能被成员修饰符修饰

1局部内部类访问外部成员
局部内部类只能访问被final修饰符修饰的局部变量(常量),但可以访问外部类的成员变量

class A//外部类
{
int num=3;
void method()//外部类的成员函数
{
final int x=5;// 局部内部类只能访问被final修饰符修饰的局部变量(常量)
class Inner//内部类
{
void show()
{
System.out.println(“inner show run..”+num);
}
}
//内部类定义到了函数Method的函数体中
new B().show();
}
}

class Demo
{
public static void main(String[] args)
{
A a=new a();
a.method();
}
}
局部内部类只能访问被final修饰符修饰的局部变量(常量),作用域不同,不能访问类外的局部变量,但可以访问外部类的成员变量,因为有默认的 外部类.this 成员
静态内部类没有这个外部类.this成员
2局部内部类不能访问局部成员的原因
class A
{
int num=3;
Object obj;
void method()
{
final int x=10;
int y=2;
class B
{
void show()
{
System.out.println(“y=”+y);//访问失败,因为y 的生命周期太短了
//当函数Method销毁之后,B的对象obj仍试图访问函数Method中变量y
}
}
obj=new B();
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马