System.out.println("");
对比其他语言的输出语句会发现它很长.
有人说也可以把这个做短了啊!
那为啥 java 官方不把他做短了呢?
2
WenhaoWu 2016-02-04 15:58:05 +08:00
ide 里不都是 sout 然后 tab 吗
|
3
dullwit 2016-02-04 16:02:09 +08:00
Java 里的方法都是依赖于类,不能存在独立的函数。
唯一的办法就是 import static |
4
echo1937 2016-02-04 16:10:24 +08:00
一般靠 IDE 进行快速输入,至于看着看无所谓。
|
5
raysonx 2016-02-04 16:15:28 +08:00 1
因為 Java 信仰面向對象(雖然 int,double 等値類型的實例不是對象)
|
6
iburu 2016-02-04 16:15:52 +08:00
scala 大法好
|
7
jasontse 2016-02-04 16:16:36 +08:00 via Android
做短了就破坏 Java 原有的语法结构和规则了啊
|
8
shoaly 2016-02-04 16:21:14 +08:00 1
当初从 java 跳 php 的一个原因就是 java 没有系统函数 类似 md5, json_encode, 想不通
|
9
ppwangs 2016-02-04 16:30:10 +08:00 1
import static java.lang.System.out;
... { out.print("我也不是很长"); } |
11
ppwangs 2016-02-04 16:43:19 +08:00
|
12
SilentDepth 2016-02-04 16:45:53 +08:00
严格信仰 OO 的结果。「上帝先创造了 System ,并告诉它 out ,才有了 println()……」
|
13
shyling 2016-02-04 16:47:25 +08:00 via iPad
常就长呗~
std::cout<<"长与短并不重要"; Console.Write("楼上说的对"); |
14
spance 2016-02-04 16:47:33 +08:00 6
java 世界不会凭空存在一个 printf(),方法是一个对象的属有的,对象要是基于一个类(模板)来产生的。
out 是 java.lang.System 类的一个静态成员,为什么要放到 System 类,因为 stdout,stderr 等是由 system 提供的; out 成员具有 print,write 等方法,表示这些 write print 的操作就是说这个 out 实例自己有这个行为,而不是莫名其妙冒出一个全局的行为。 属主(对象)才会自己具有行为,这就是面向对象的实例和方法的思想,一定都不奇怪,反倒当你深入面向对象后,才会认为凭空出现的全局方法是很突兀的。 |
16
yuriko 2016-02-04 16:48:36 +08:00
java 语法讲究规范性,这条输出语句很清楚的表明了操作内容
System 是个类,然后我们找到了其中的 out 这个静态的 PrintStream 实例,然后通过其 PrintStream 的 println 方法进行打印 和其他语言不同在于, Java 并没有为输出语句做一些特别的优化来减少调用时的麻烦,这和 Java 的语法风格不符 同时你可以试试只使用 System.out 来获取输出流做一些其他奇奇怪怪的事情 |
18
Zzzzzzzzz 2016-02-04 16:53:21 +08:00
来, scala 和 groovy 选一个吧.
|
19
uxstone 2016-02-04 16:57:02 +08:00
所以习惯了 java ,
再看 js 的代码,那叫一个痛苦。 |
20
tobyxdd 2016-02-04 16:57:28 +08:00
这叫 OOP
|
21
spance 2016-02-04 16:58:04 +08:00
@shyling Object 是一个 root 级抽象描述,它怎么会有 print 这样的行为?好比我们给 Car 对象定义一个 makeLove()是不是很不合逻辑?
System.out 这个对象代表了标准输出流,它有动作行为可以提供给你, write,print... 让它 print 它就输出显示了,里面是怎么一回事不需要知道,只知道你让他 print 一下他就能输出 /显示,并且这是他自己的动作,这就可以了。 |
22
leohuachao 2016-02-04 17:06:29 +08:00
面向对象就是这么写的,要弄短也只是个语法糖而已
|
23
shyling 2016-02-04 17:08:19 +08:00 via iPad
@spance 举例有点没节操→_→还好吧,我只是说一个解决方案。想想 java.lang.Object 里的方法, wait/notify/notifyAll/equals/hashCode 从逻辑上不一定要位于 Object 上呀。例如放到 Waitable,Comparable,Hashable 也是可以的呀。像 golang ,内置了 println ,还可以用 fmt.Println
|
24
spance 2016-02-04 17:24:57 +08:00
@shyling 好吧,换个温柔点的比方,面向对象世界里面我们就像是女娲,不断的制造对象,并吩咐他们做 xxx ,他们再去吩咐别人 xxx ,然后所有对象都在 xxxing ,那么程序就执行起来了。
Object 是个基类,让他具有一些普世的、共通的行为,以便所有对象都有这个行为,当然也能做很多个接口去仔细的描述归类这些行为,但是也要在过度抽象和具象之间有个平衡,抽象的太狠了效率不高而且也不好用了,抽象的不够又不足以承载面向对象的思想,所以还是要平衡。 |
25
shyling 2016-02-04 17:31:13 +08:00 via iPad
@spance 嗯,是这样子没错←_←,不过有时设计语言也要考虑性能啊,开发者的原因。就像上面说的基本类型不是对象, int 和 Integer 的关系,啦啦啦
|
27
aivier 2016-02-04 18:14:05 +08:00
Console.WriteLine(); 这个也挺麻烦的...还好 VS 有自动补全
|
28
mfaner 2016-02-04 19:13:19 +08:00
哪有用那么频繁的
|
29
WispZhan 2016-02-04 20:16:53 +08:00
我来传播 kotlin,快来信仰 jetbrains 神教。
|
30
kaneg 2016-02-04 22:20:05 +08:00 1
等你写过很多 Java 代码,你就会逐渐发现正规代码中几乎不会用到 System.out 来输出,而是用 log.xxx ,否则你会被 code reviewer 批。
况且 IDE 都有快捷语句,如 IDEA ,用 sout 即可 |
31
zaishanfeng 2016-02-04 22:44:24 +08:00 via Android
java 是离了 ide 活不下去的语言 还是 echo print 爽
|
32
Sumkor 2016-02-04 23:33:02 +08:00
对我来说就是 syso
|
33
jydeng 2016-02-04 23:34:47 +08:00
system.console.writeline("blabla") ,我 C#也挺长的。
|
34
saximoer 2016-02-04 23:35:01 +08:00
syso
sout 基本都只这么打了。。 |
35
onice 2016-02-04 23:49:19 +08:00
IDE 里面可以 syso 然后加上自动补全的快捷键。
System.out.println("");这个因为 Java 默认不装载 System 包,所以要写全包名。 在 Java 头部 import 下 System.out 包,程序里就可以直接用 Println 相关方法输出了。 不过。。。一般没人这么干,都是直接写的 Println 的全路径, IDE 很方便了。。。 |
36
Narcissu5 2016-02-05 00:58:55 +08:00 1
|
37
woai110120130 2016-02-05 08:57:24 +08:00
可读性好 语义清晰
|
38
wizardforcel 2016-02-05 12:24:35 +08:00 via Android
因为 java 没有别名机制。
c++和 c#都有 using 。 |
39
woai110120130 2016-02-05 12:33:21 +08:00
这就是 java 的简单之美
|
40
charlie21 2016-02-05 13:23:17 +08:00
|
42
nikubenki 2016-02-05 19:14:04 +08:00 via iPhone
就 syso 嘛,有什么长的
|
43
bombless 2016-02-05 23:26:59 +08:00
Java 不是适合 hacker 的语言,不过好歹在学院派和工程派都能找到支持者, 233
我觉得要求短的话 Perl 也许会合某些人胃口 233 |
44
yuriko 2016-02-06 07:44:52 +08:00
|
46
wittyfox 2016-02-06 13:00:31 +08:00 via Android
那是你没有见到这个
`com.sun.java.swing.plaf.nimbus.InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState` |