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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨建峰 中级黑马   /  2012-10-4 21:28  /  3404 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在学习过程中碰到点问题,望高手们帮忙解答下,问题如下:

System.out.println()语句是用来打印字符到控制台的,

在这个语句中,System是类,out 是类成员,并且还是
PrintStream 的一个实例变量, 而 println() 是 PrintStream
的成员方法,

我的问题是,以我的理解,面向对象中,方法调用要么
类静态成员直接调用,要么,实例化后调用,而实例化
要用到NEW关键字,而我在System 类里面只看到,out
是声明了,但没有NEW,但是系统还是可以用这个方法,
我不知道原因在哪里。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
public class lok{
    public static void main(String[] args) {
        A a=new A();
    }
}
class A{
       
        A()
        {
                B b=new B();
                b.print();
        }
        void show()
        {
                System.out.println("这是外部类...........");
        }
        class B{
                public void print()
                {
                        System.out.println("内部类B..........");
                        A.this.show();//A代表A类,this代表当前对象,show为A类方法,调用外部类。希望这个程序对你有用!
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
out是System类的静态字段,返回值类型是PrintStream类,而PrintStream类中有一个的方法是Println(),你可以认真学下JavaAPI
回复 使用道具 举报
本帖最后由 黄小贝 于 2012-10-4 22:31 编辑

我也没有找到什么好的资料~

System.out.println 的out部分是一个静态的对象,那后面的println也好理解~

public final static PrintStream out = nullPrintStream();

现在的问题就是System 不是一个static 类,却可以不需要new 直接可以用,而且构造器是私有的





我发现我二了~~ 非static类不需要new可以直接得到static属性~

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 翁鹏 于 2012-10-4 22:28 编辑

System类并不是面向对象的,它里面只有静态字段和静态方法,而且不能够被实例化,因为它的无参数构造函数被声明为private,里面都是静态的东西,实例化也没意义。out静态字段是PrintStream的一个引用。  你说的 public final static PrintStream out = null; 而没有 new PrintString();  可以是System类中的本地方法在作怪, 可能要经过JVM初始化为有意义的值。
这个方面超过了我的能力范围啊。
回复 使用道具 举报
System类是不能被实例化的,没有提供构造函数。out对应的是打印流对象PrintStream,这打印流当中提供了很多的Print()方法,以重载的形式存在。

回复 使用道具 举报
夏天 初级黑马 2012-10-4 22:40:41
7#
目测2楼正解。
回复 使用道具 举报
楼主这么多年了还在这论坛么,这个问题有答案了么,我也跟你有一样的疑问,发现楼上的都没有理解楼主的问题,楼主应该是问System类里的静态变量OUT未初始化,public final static PrintStream out = null;即out并未指向一个printStream类的实例,却可以通过System.out.println()直接调用println()方法。网上找了一些答案,都是通过例子来说明的,类B是静态类A里的一个静态变量,所以可以通过A.B来调用B里面的方法,但是这些例子里面,A里面的成员变量B都有初始化一个对象,public final static B b=new B();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马