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: 展开
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: 展开
4个回答
展开全部
看一下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异常。
----------------------------------------------------------------------------------------
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];
}
}
}
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));
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就这区别 似乎 --没其他区别
追问
是不是toString方法只能在println中自动调用,而不能在print中自动调用?
追答
似乎没这个问题吧 ---
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询