黑马程序员技术交流社区

标题: 静态导入问题 [打印本页]

作者: 赵崇友    时间: 2013-4-29 10:00
标题: 静态导入问题
本帖最后由 赵崇友 于 2013-4-29 16:06 编辑
  1. import static java.lang.System.out;
  2. class SwapVar
  3. {
  4. public static void main(String[] args)
  5. {
  6.   println("Hello World!");
  7. }
  8. }
  9. <p> </p>
复制代码
本来想简化输出语句的,而且我已经静态导入了,为什么还说println找不到符号。如果改为out.println("Hello World");可以通过。求解释!!!

QQ截图20130429095747.png (2.44 KB, 下载次数: 0)

QQ截图20130429095747.png

作者: 殇_心。    时间: 2013-4-29 10:13
{:soso_e101:}
静态的是属于类级别的
格式:类.方法
作者: 403383221    时间: 2013-4-29 10:23
静态导入,在你自己的类中使用静态导入,可以让你使用其它类中定义的类方法和类变量,而且这些类方法和类变量就像在本地定义的一样。也就是说,静态导入允许您在调用其它类中定义的静态成员时,可以忽略类名
System.out.println();
忽略类名后,是out.println();
作者: 赵崇友    时间: 2013-4-29 10:25
殇_心。 发表于 2013-4-29 10:13
静态的是属于类级别的
格式:类.方法

静态导入:包名.类名.静态方法
这没有错呀;

作者: 殇_心。    时间: 2013-4-29 10:29
赵崇友 发表于 2013-4-29 10:25
静态导入:包名.类名.静态方法
这没有错呀;

我是说你在使用的时候。。。
如果不是   类.方法
谁知道你方法到底是谁的?
jvm是不能判断的。
作者: Den_din    时间: 2013-4-29 10:32
out的定义为public static final PrintStream out
println("hello");是out的一个普通方法,该方法不是静态方法。
例如:
package com.ahnu.entity;

public class SwapVar {
       
        public static final SwapVar swap= new SwapVar();
        public static void say()
        {
                System.out.println("test");
        }
       
        public void print2()
        {
                System.out.println("hello");
        }
        public static void main(String[] args)
        {
               
        }

}
测试代码

import static com.ahnu.entity.SwapVar.swap;
public class Test {

       
        public static void main(String[] args) {
                // TODO Auto-generated method stub
         // say();//错误,因为在此import中没有say方法
         swap.print2();//可以
        }

}
///////////////////////////////////////////////////////////
import static com.ahnu.entity.SwapVar.*;
public class Test {

       
        public static void main(String[] args) {
                // TODO Auto-generated method stub
         say();//可以
        print2();//不可以,普通方法
        }

}

希望对你有用。





作者: 赵崇友    时间: 2013-4-29 10:33
殇_心。 发表于 2013-4-29 10:29
我是说你在使用的时候。。。
如果不是   类.方法
谁知道你方法到底是谁的?

静态导入包中的静态方法不就是为了不写类名直接使用方法吗
作者: 赵崇友    时间: 2013-4-29 10:40
Den_din 发表于 2013-4-29 10:32
out的定义为public static final PrintStream out
println("hello");是out的一个普通方法,该方法不是静态 ...

嗯嗯,明白了!! 原来是println不是静态方法导致的啊!!明白了。。。。。。。。out是System里静态字段,是一个标准的输出流,PrintStream里的println方法不是静态的,因此不可以省略out。是不是这样理解?
作者: 403383221    时间: 2013-4-29 10:40
大哥,out不是一个类啊
public static final PrintStream out
“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
对于简单独立的 Java 应用程序,编写一行输出数据的典型方式是:

     System.out.println(data)

作者: 孙浩    时间: 2013-4-29 10:43
out是System类的静态常量!out是打印流PrintStream对象!在PrintStream类中println()方法不是静态的!
作者: 殇_心。    时间: 2013-4-29 10:44
赵崇友 发表于 2013-4-29 10:33
静态导入包中的静态方法不就是为了不写类名直接使用方法吗

:Q println方法不是静态的。。
作者: 赵崇友    时间: 2013-4-29 10:48
殇_心。 发表于 2013-4-29 10:44
println方法不是静态的。。

嗯嗯,明白了。如果说println是静态的是不是就可以了呢?
作者: 殇_心。    时间: 2013-4-29 10:54
赵崇友 发表于 2013-4-29 10:48
嗯嗯,明白了。如果说println是静态的是不是就可以了呢?

嗯。前提是唯一的。如果不是的话 也会报错的
作者: 赵崇友    时间: 2013-4-29 10:56
殇_心。 发表于 2013-4-29 10:54
嗯。前提是唯一的。如果不是的话 也会报错的

嗯嗯,学习了!!!多谢指教……:lol
作者: 殇_心。    时间: 2013-4-29 10:57
赵崇友 发表于 2013-4-29 10:56
嗯嗯,学习了!!!多谢指教……

互相学习。互相学习:lol
作者: pthuakai    时间: 2013-4-29 16:07
import static java.lang.System.out;
public class Test {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                /*
                这是一个缓冲区读取流的代码
                */
                out.println("Hello World!");
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2