Java中为什么main()中不能创建内部类对象?

对main方法而言,虽然写在类中,它是游离于任何类之外的,因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问 。

1:非静态内部类,必须有一个外部类的引用才能创建。

2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。

3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。

4:静态内部类,不需要外部类引用就可以直接创建。

5:同时静态的内部类,也不能直接访问外部类的非静态方法。

6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。

public class OuterClass { 

    public static void main(String[] args) { 

        OuterClass outerClass = new OuterClass(); 

        InnerClass innerClass = outerClass.new InnerClass(); 

        StaticInnerClass staticInnerClass = new StaticInnerClass(); 

    } 

    public void foo() { 

        InnerClass innerClass = new InnerClass(); 

        StaticInnerClass staticInnerClass = new StaticInnerClass(); 

    } 

    public class InnerClass { 

    } 

    public static class StaticInnerClass { 

    } 

}
时间: 2024-08-12 19:37:49

Java中为什么main()中不能创建内部类对象?的相关文章

读取配置文件中数据库设置信息来创建connection对象

package com.atguigu.jdbc; import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.Driver;import java.sql.SQLException;import java.util.Properties; import org.junit.Test; public class JDBCTest { /** * 编写一个通用的方法

js中使用new Date(str)创建时间对象不兼容firefox和ie的解决方式

还是上次的那个时间滑动条问题,突然发现在火狐和ie上面刻度和时间都没显示出来(本人开发的时候使用谷歌,当时没去测),于是就开始在那么多行代码中加断点调试,最后发现new Date(strDate);返回的是无效的时间格式,我就郁闷了~~~~~于是就去看api中看date的说明,就在里面找其它的构造方法尝试,果然功夫不负有心人啊!!!!终于可以安心的下班了!!!!代码如下: /** * 解决 ie,火狐浏览器不兼容new Date(s) * @param strDate * 返回 date对象 *

java中几个特殊的类---内部类

内部类-----是在其他类中的类 1.内部类的定义 将类定义为 class xxxx{... ...}置于某个类的内部即可‘ 内部类编译时生成 xxxx$xxxx的class文件 内部类不能够与外部类同名 2.内部类的使用 在封装其类本省的类中使用该类,与普通类的使用方式相同 在其他地方使用该类:a 类名前要冠以外部类的类名: b 在用new创建内部类对象时,外部类名.内部类名 内部类对象名=外部类对象名.new 内部类名(参数) 3.在内部类中使用外部类的成员 内部类可以直接使用外部类的所有字

Java编程基础-面向对象(中)

本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一些特性. 1.static关键字的特点: a)随着类的加载而加载,也就是说,静态会随着类的消失而消失,说明它的生命周期最长. b)优先于对象存在,明确一点,静态是先存在的,对象是后存在的. c)被类的所有对象共享. d)可以通过类名调用. 2.静态变量 在一个java类中,可以使用static关键字

【转载】Java基础之String中equals,声明方式,等大总结

转载请注明出处:http://blog.csdn.net/dmk877/article/details/49420141 无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识点还是比较多的.今天就和大家来一起讨论一下,关于String的一些容易让人疑惑的地方,废话不多说进入正题...如有谬误请批评指正,如果有疑问请留言.我会在第一时间修改或回答 通过

java学习之接口、多态和内部类

接口是一组行为的规范.定义.接口是面向对象编程体系中的思想精髓之一,使用接口可以让我们的程序更加利于变化. 接口的格式: interface 接口名称{ 全局变量: 抽象方法: } 接口中的成员修饰符是固定的,成员常量用public static  final修饰:成员函数用public  abstract修饰,接口的出现将“多继承”通过多实现来体现.接口的使用也有一定的规则:接口可以继承多个接口,一个类中可以实现接口和多接口,抽象类实现接口可以不实现方法:接口中的所有实现方法的访问权限都是pu

java 编程思想笔记(六)——内部类

1.定义   一个类的定义放在另一个类的内部,这个类就叫做内部类. 2.链接到外围类   创建了内部类对象时,它会与创造它的外围对象有了某种联系,于是能访问外围类的所有成员,不需任何特殊条件. 那么,它是如何实现的呢?   是这样的,用外围类创建内部类对象时,此内部类对象会秘密的捕获一个指向外围类的引用,于是,可以通过这个引用来访问外围类的成员. 通常,这些都是编译器来处理,我们看不到,也不用关心这个. 正是因为如此,我们创建内部类对象时,必须与外围类对象相关联. 3.使用关键字.this与.n

《Java编程思想》笔记 第十章 内部类

1.创建内部类对象 1.1 创建内部类对象(相当于new内部类对象) 外围类对象.new 内部类( ). 1.2 创建内部类对象一种方法是 外围类有一个方法返回内部类对象. 1.3 没有外围类对象就不能创建内部类对象,因为内部类对象会暗暗连接到外围类对象上. 1.4 如果是嵌套类(静态内部类)无需外围类对象引用就可创建.Outer.Inner in  = Outer.Inner(); 2.创建内部类引用 in Outer.Inner in ,无论在什么其他类内还是在所在的外围类内. 内部类内创建

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

内部类访问外部类的变量必须是final吗? 如下:class A{int i = 3;public void shout(){ class B{public void shout1(){System.out.println(i);} }B b=new B();b.shout1();} public static void main(String [] args){A a=new A();a.shout();} }可正常输出3,证明可以访问类的变量i,但改为下面的方式:class A{public