转:java内部静态类和非静态类,和他们在外部的定义
2011-02-23 21:59
246 查看
接口:
声明在接口中的属性自动成为public static final
声明在接口中的方法自动成为public
声明在接口中的类自动成为public static
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested
class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部
类是static的时,就不是这样了。嵌套类意味着:
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问非静态的外围类对象。
public class Z1 {
private static int i = 1;
private int j = 10;
public static void outer_f1() {
}
public void outer_f2() {
}
// 静态内部类可以用public,protected,private修饰
// 静态内部类中可以定义静态或者非静态的成员
static class Inner {
static int inner_i = 100;
int inner_j = 200;
static void inner_f1() {
//静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
System.out.println("Outer.i" + i);
outer_f1();
}
void inner_f2() {
// 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
// System.out.println("Outer.i"+j);
// outer_f2();
System.out.println("非静态方法");
}
}
class Innerz {
int inner_j = 200;
void inner_f2() {
// 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
// System.out.println("Outer.i"+j);
// outer_f2();
System.out.println("非静态累非静态方法");
}
}
public void outer_f3() { // 外部类访问内部类的静态成员:内部类.静态成员
System.out.println(Inner.inner_i);
Inner.inner_f1();
// 外部类访问内部类的非静态成员:实例化内部类即可
Inner inner = new Inner();
inner.inner_f2();
}
public static void main(String[] args) {
new Z1().outer_f3();
Z1.Inner z=new Z1.Inner();
z.inner_f2();
Z1 z1=new Z1();
Z1.Innerz zz=z1.new Innerz();
zz.inner_f2();
}
}
生
成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new
Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,
但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)
声明在接口中的属性自动成为public static final
声明在接口中的方法自动成为public
声明在接口中的类自动成为public static
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested
class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部
类是static的时,就不是这样了。嵌套类意味着:
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问非静态的外围类对象。
public class Z1 {
private static int i = 1;
private int j = 10;
public static void outer_f1() {
}
public void outer_f2() {
}
// 静态内部类可以用public,protected,private修饰
// 静态内部类中可以定义静态或者非静态的成员
static class Inner {
static int inner_i = 100;
int inner_j = 200;
static void inner_f1() {
//静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
System.out.println("Outer.i" + i);
outer_f1();
}
void inner_f2() {
// 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
// System.out.println("Outer.i"+j);
// outer_f2();
System.out.println("非静态方法");
}
}
class Innerz {
int inner_j = 200;
void inner_f2() {
// 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
// System.out.println("Outer.i"+j);
// outer_f2();
System.out.println("非静态累非静态方法");
}
}
public void outer_f3() { // 外部类访问内部类的静态成员:内部类.静态成员
System.out.println(Inner.inner_i);
Inner.inner_f1();
// 外部类访问内部类的非静态成员:实例化内部类即可
Inner inner = new Inner();
inner.inner_f2();
}
public static void main(String[] args) {
new Z1().outer_f3();
Z1.Inner z=new Z1.Inner();
z.inner_f2();
Z1 z1=new Z1();
Z1.Innerz zz=z1.new Innerz();
zz.inner_f2();
}
}
生
成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new
Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,
但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)
相关文章推荐
- java内部静态类和非静态类,和他们在外部的定义
- java中在类的内部定义接口有什么好处?这和在外部直接定义有什么区别?越详细越好?
- 【Java】内部类访问的外部变量定义成final (数据保持一致,外部修改后无法通知内部,编译的时候会通过构造方法传进来) Java内部类一般访问不了外部变量
- java内部静态类和非静态类
- win10系统java不是内部或外部命令win10命令行运行java提示找不到或无法加载主类
- java环境变量path也配置了,但还是显示javac不是内部或外部命令的解决办法
- 解决:java不是内部或外部命令 也不是可运行的程序
- JAVA 方法内部类为何只能访问外部final类型变量
- xml(在内部定义,上一篇是在外部引入)
- win10系统"javac"不是内部或外部命令,也不是可运行的程序 或批处理文件。
- Java内部静态类与内部非静态类
- JAVA之JDK环境配置(JAVAC不是内部命令或外部命令)
- JAVA 内部静态类--解析静态内部类的使用目的与限制
- java静态类与非静态类
- java语言基础(47)——成员内部类访问外部类的成员(类名.this范围限定)
- cmd界面下java可以,javac不能用--【'javac'不是内部或外部命令,也不是可运行的程序或批处理文件】
- 在定义了外部layout的事件后,处理内部所包含的部件的事件时没触发。
- Java的内部静态类
- 解决cmd中,javac提示:javac不是内部或外部命令,但是运行java、java-version正常的问题
- JAVA 内部静态类--解析静态内部类的使用目的与限制