静态方法不能new内部类实例对象
2016-12-28 09:58
246 查看
在学习多线程时,遇到了静态方法中不能new内部类实例对象的情况:
静态方法中不能new内部类的实例对象。why?
内部类最重要的一个特点是它可以直接访问它外部类的成员变量,非静态内部类能够访问外部类成员是因为它持有外部类对象的引用new TraditionalThreadSynchronized(),this,就像子类对象能够访问父类成员是持有父类对象的引用super一样。
成员变量是对象身上的,对象创建完成了,才会为成员变量分配空间,能调用成员变量,意味着一定有了实例对象。
main方法是静态的,它执行的时候可以不创建那个对象,这就产生矛盾。main方法运行时没有任何外部类的实例对象,我们的内部类实例对象创建了又可以访问外部类实例对象的成员变量,外部类的实例对象在哪里呢?所以要想创建内部类的实例对象,必须创建外部类的实例对象。
public class TraditionalThreadSynchronized { public static void main(String[] args) { //错误。静态方法中不能new内部类的实例对象 内部类能访问外部类实例对象的成员变量 Outputer outputer = new Outputer(); // new Thread().start(); // new TraditionalThreadSynchronized().init(); } class Outputer{ public void output(String name) { int len = name.length(); for(int i=0;i<len;i++) { System.out.println(name.charAt(i)); } System.out.println(); } } }
静态方法中不能new内部类的实例对象。why?
内部类最重要的一个特点是它可以直接访问它外部类的成员变量,非静态内部类能够访问外部类成员是因为它持有外部类对象的引用new TraditionalThreadSynchronized(),this,就像子类对象能够访问父类成员是持有父类对象的引用super一样。
成员变量是对象身上的,对象创建完成了,才会为成员变量分配空间,能调用成员变量,意味着一定有了实例对象。
main方法是静态的,它执行的时候可以不创建那个对象,这就产生矛盾。main方法运行时没有任何外部类的实例对象,我们的内部类实例对象创建了又可以访问外部类实例对象的成员变量,外部类的实例对象在哪里呢?所以要想创建内部类的实例对象,必须创建外部类的实例对象。
public static void main(String[] args) { //错误。静态方法中不能new内部类的实例对象 内部类能访问外部类实例对象的成员变量 // Outputer outputer = new Outputer(); new Thread().start(); new TraditionalThreadSynchronized().init(); } class Outputer{ public void output(String name) { int len = name.length(); for(int i=0;i<len;i++) { System.out.println(name.charAt(i)); } System.out.println(); } } private void init() { Outputer outputer = new Outputer(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } outputer.output("zhangxiaoxiang"); } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } outputer.output("lihuoming"); } }).start(); } }
相关文章推荐
- 静态方法中不可直接new内部类实例对象问题
- 《黑马程序员》 静态方法中不能直接创建内部类实例对象的原因
- 静态方法中使用内部类不能通过new
- 静态方法中不能new内部类的实例对象的总结
- [对象和类型]8.C#构造函数,怎样用静态方法解决私有构造函数造成的不能new的问题?
- 静态方法中不能创建内部类的实例
- java静态方法中不能创建内部类对象
- 动态的内部类不能在静态方法中直接声明对象
- 今天发现c#中的实例后的对象是不能调用静态方法,以前学Java的时候是可以的.
- 外部类的静态方法内不能实例化内部类的对象
- 今天发现c#中的实例后的对象是不能调用静态方法,以前学Java的时候是可以的.
- 《黑马程序员》 静态方法中不能new内部类的实例对象的总结
- 静态方法中不能new内部类的实例对象的总结
- 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例
- 静态方法中不能new内部类的实例对象的总结
- 类方法,实例方法,对象方法,静态方法,动态方法
- 在接口中的静态方法来获取model的实例对象
- 为什么不管是静态内部类的普通方法还是静态方法都不能访问外部类的实例变量
- java 调用静态方法和实例(对象)方法的区别
- 使用new和反射实例化内部类对象