Java中System.out对象的print方法与println方法有什么区别?(除了前者打印换行、后者不打印换行外)

我编写了一个包含对象数组的类IntanceSetpublicclassInstanceSet{privateNode[]cycle;/***每个Node对象都只包含一个j... 我编写了一个包含对象数组的类IntanceSet
public class InstanceSet {
private Node[] cycle;
/**
* 每个Node对象都只包含一个java.util.LinkedList<Instance>链表和toString()方法,
* 当Node中的链表为空表时,Node.toString() 返回(String) null,否则逐行打印链表中的Instance对象
* Instance类只包含3个整数和toString()方法
*/
//构造方法
public InstanceSet(int sum) {
cycle = new Node[sum];
for (int i = 0; i < sum; i ++)
cycle[i] = new Node() //Node类的默认构造方法,可以保证每个实例都是被赋值的
//当前cycle数组中的所有元素的链表都是空表
}

//访问器
public Node getNode(int index) throws ArrayIndexOutOfBoundsException {
return cycle[index];
}
}

在另外一个包中的主类中打印Node时(注意此时所有Node的链表都是空表),使用:
InstanceSet set = new InstanceSet(5); //建立一个有5个元素的Node数组,数组中每个元素都被实例化,
//且元素的链表为空
实例化InstanceSet,
然后用下句打印第3个元素:
System.out.print(set.getNode(2)); //
结果上句导致NullPointerException
相对应地,如果我改用System.out.println(set.getNode(2)); 就会打印”null“(不包含引号)。

为什么会这样?

--------------------------------------------------------------------------------------------
图为NullPointerException:
展开
 我来答
riyueyao
2014-06-28 · TA获得超过477个赞
知道小有建树答主
回答量:506
采纳率:0%
帮助的人:169万
展开全部
看一下java api
----------------------------------------------------------------------------------------
public void print(char[] s)

Prints an array of characters. The characters are converted into bytes
according to the platform's default character encoding, and these bytes are
written in exactly the manner of the write(int)
method.

Parameters:
s - The array of chars to be printed
Throws:
NullPointerException
- If s is null
----------------------------------------------------------------------------------------
println
public void println(char[] x)

Prints an array of characters and then terminate the line. This method
behaves as though it invokes print(char[])
and then println().

Parameters:
x - an array of chars to print.
----------------------------------------------------------------------------------------

一目了然,
println()不会抛出任何异常,即使是空的。
print()如果是空的,会抛出NullPointerException异常。
更多追问追答
追问
我看java.io.PrintStream.class中的println(String s)方法,它先调用了print(String s),然后调用newline()。调用print时为什么不会抛出异常呢?
追答
严重怀疑你的异常不是在print()的时候抛出的,你是用debug模式跑到这一行报错的?
匿名用户
2014-06-28
展开全部
一定是你的代码哪里有问题,下面是我的代码,打印正常
import org.junit.Test;

public class My {

@Test
public void run() {
InstanceSet set = new InstanceSet(5);
System.out.println(set.getNode(2));
System.out.print(set.getNode(2));
}

public class Node {

}

public class InstanceSet {
private Node[] cycle;

public InstanceSet(int sum) {
cycle = new Node[sum];
for (int i = 0; i < sum; i++)
cycle[i] = new Node();
}

public Node getNode(int index) throws ArrayIndexOutOfBoundsException {
return cycle[index];
}
}
}
更多追问追答
追问
您的程序中的public void run()是什么?和public static void main(String[] args)一样吗?还有我程序中的Node类是附在InstanceSet类的后面的,可见性修饰符不是public;这两点会不会有什么影响?
追答
和main一样,Node类是附在InstanceSet类的后面,用private修饰,效果相同,不会影响,代码如下

public class InstanceSet {
private Node[] cycle;

public InstanceSet(int sum) {
cycle = new Node[sum];
for (int i = 0; i < sum; i++)
cycle[i] = new Node();
}

public Node getNode(int index) throws ArrayIndexOutOfBoundsException {
return cycle[index];
}

private class Node {

}
}
public class My {
public static void main(String[] args) {
InstanceSet set = new InstanceSet(5);
System.out.println(set.getNode(2));
System.out.print(set.getNode(2));
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莫给老子拖堂了
2014-06-28 · TA获得超过128个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:105万
展开全部
就这区别 似乎 --没其他区别
追问
是不是toString方法只能在println中自动调用,而不能在print中自动调用?
追答
似乎没这个问题吧  ---
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
点点复盘
2014-06-28 · 超过22用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:43万
展开全部
有Node类的代码吗?你的QQ是多少?我直接联系你。
追问

这个Node类不是public的可见性,是附属于InstanceSet类的。

Node类代码(源码超字数了。我附了一张源文件的截图):

 

 

其中add方法的判断语句是在保证list的元素个数不超过常量MAX_INSTANCE_NUM_PER_NODE

之前我提到Node类的成员变量及方法,说漏了add方法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式