内部类与嵌套类
2017-04-12 10:32
155 查看
转载自:从头认识java嵌套类
1.概念
内部类使用static的时候就是嵌套类。
[java] view
plain copy
package com.ray.ch07;
public class Test {
private static class MyTest3{}
}
MyTest3就是嵌套类
2.注意点
(1)只能跟外部类的static部分进行通信
(2)不在持有外部类对象的引用,可以直接使用static特性
[java] view
plain copy
package com.ray.ch07;
public class Test {
private int id = 1;
private static String name = "aaa";
private static class MyTest1 {
public void say() {
// System.out.println(id);//error
System.out.println(name);
}
}
private class MyTest2 {
public void say() {
System.out.println(id);
System.out.println(name);
}
}
public static void main(String[] args) {
// new Test().new MyTest1();//error.
new Test.MyTest1().say();
new Test().new MyTest2();
}
}
从上面的代码可以看见,MyTest1是不能够访问id,而MyTest2可以。
还有,在new的时候,我们可以看见,MyTest1具备了static的特性,不需要new,但是还是需要多加一个括号,而MyTest2则需要new才能调用里面的方法。
(3)嵌套类没有this这引用
因为嵌套类使用了static,因此不能使用this来引用外部类。
(4)使用场景
一个比较常见的使用场景就是跟main函数结合。
因为在发布项目的时候通过只是发布有用的代码,像测试等代码都不发布的,那么现在这个就比较有用了。
我们来对比一下下面的这两组代码:
[java] view
plain copy
package com.ray.ch08;
public class Test {
public static void main(String[] args) {
}
}
[java] view
plain copy
package com.ray.ch08;
public class Test {
private void say() {
System.out.println("abc");
}
public static class Tester {
public static void main(String[] args) {
Test test = new Test();
test.say();
}
}
}
上面两组代码的功能是一样的,但是生成的文件却有区别。
第一个代码只会生成一个Test.class
但是第二个会生成两个文件Test.class和Test$Tester.class,我们只需要在发布到时候把第二个文件删除,那么这些测试的代码就删掉了,这样比较方便。
个人补充:
内部类中不能定义静态成员(静态成员类似于C语言的全局变量,而内部类通常是用于创建内部对象的。所以,把“全局变量”放在内部类是不正确的)
比如,下面的代码:
1.概念
内部类使用static的时候就是嵌套类。
[java] view
plain copy
package com.ray.ch07;
public class Test {
private static class MyTest3{}
}
MyTest3就是嵌套类
2.注意点
(1)只能跟外部类的static部分进行通信
(2)不在持有外部类对象的引用,可以直接使用static特性
[java] view
plain copy
package com.ray.ch07;
public class Test {
private int id = 1;
private static String name = "aaa";
private static class MyTest1 {
public void say() {
// System.out.println(id);//error
System.out.println(name);
}
}
private class MyTest2 {
public void say() {
System.out.println(id);
System.out.println(name);
}
}
public static void main(String[] args) {
// new Test().new MyTest1();//error.
new Test.MyTest1().say();
new Test().new MyTest2();
}
}
从上面的代码可以看见,MyTest1是不能够访问id,而MyTest2可以。
还有,在new的时候,我们可以看见,MyTest1具备了static的特性,不需要new,但是还是需要多加一个括号,而MyTest2则需要new才能调用里面的方法。
(3)嵌套类没有this这引用
因为嵌套类使用了static,因此不能使用this来引用外部类。
(4)使用场景
一个比较常见的使用场景就是跟main函数结合。
因为在发布项目的时候通过只是发布有用的代码,像测试等代码都不发布的,那么现在这个就比较有用了。
我们来对比一下下面的这两组代码:
[java] view
plain copy
package com.ray.ch08;
public class Test {
public static void main(String[] args) {
}
}
[java] view
plain copy
package com.ray.ch08;
public class Test {
private void say() {
System.out.println("abc");
}
public static class Tester {
public static void main(String[] args) {
Test test = new Test();
test.say();
}
}
}
上面两组代码的功能是一样的,但是生成的文件却有区别。
第一个代码只会生成一个Test.class
但是第二个会生成两个文件Test.class和Test$Tester.class,我们只需要在发布到时候把第二个文件删除,那么这些测试的代码就删掉了,这样比较方便。
个人补充:
内部类中不能定义静态成员(静态成员类似于C语言的全局变量,而内部类通常是用于创建内部对象的。所以,把“全局变量”放在内部类是不正确的)
比如,下面的代码:
class Persion1 { class Persion2 { private static String string=""; public static void Set() { } } }Persion2类中的string变量,Set()方法的定义都是不允许有static修饰的,都必须把static去掉。
相关文章推荐
- 深入理解嵌套类和内部类
- 为什么要用嵌套类,内部类?
- 内部类、嵌套类的好处
- 深入理解java嵌套类和内部类
- Java 嵌套类和内部类演示样例<三>
- 【java笔试系列一】内部类、外部类和嵌套类
- 嵌套类,内部类,匿名内部类的定义和使用方法
- 【java面试题】Static Nested Class(嵌套类) 和 Inner Class(内部类)的不同 、final、static
- Java 嵌套类和内部类示例<一>
- java嵌套类和内部类
- 内部类、嵌套类
- Java深入理解嵌套类和内部类
- C++嵌套类与内部类
- (十二)java嵌套类和内部类
- Java 嵌套类和内部类示例<二>
- Java实例说明 嵌套类包括内部类(即非静态嵌套类)和静态嵌套类 两者的区别
- 分析java 嵌套类与内部类
- 嵌套类和内部类(转,有修改)
- 嵌套类(静态内部类)和普通内部类的用法和总结
- Java 嵌套类和内部类示例<三>