在java里,为啥能用system.out.print(new Date( ));打印出时间来?原理是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java里,为啥能用system.out.print(new Date( ));打印出时间来?原理是啥?相关的知识,希望对你有一定的参考价值。

我知道它能打出当前的时间,所以不用再告诉我它就是能打印出时间……等
我的问题是想知道它具体是怎么实现的??
刚学java,想多了解一些,谢谢大家
想知道new Date() 是怎样返回了一个时间的字符串,具体过程是什么样的?

public Date()
this(System.currentTimeMillis());

这个是 Date 的源码 获取系统当前时间的毫秒数,
system.out.print(new Date( )) 输出了获取的时间追问

我查了一下System.currentTimeMillis( )是获取当前系统时间
这位老师,能否再具体的讲一讲new Date()和 this(System.currentTimeMillis()); 是怎么关联上的??

追答

public Date()
this(System.currentTimeMillis());

Date是一个类,而 this()相当于构造方法,
new Date();就调用了 this(System.currentTimeMillis());

追问

谢谢大哥!
我还有一个疑问要麻烦您:就是System.currentTimeMillis()返回的是一个当前系统时间的long型数字,如何将这个数字变为字符串输出的呢?

追答

long ll = System.currentTimeMillis();
String str = Long.toString(ll);
System.out.println(str);

参考技术A 因为jdk提供的date里面有tostring方法,有tostring方法就可以直接print追问

对,java.util.Date里是有个toString()方法,但是
system.out.print(new Date( ));在这里面,我们并没有去调用这个toString()方法啊??

new Date()只是在堆内存里面分配了一个Date对象,对吗?system.out.print(new Date( ));怎么就能在控制台打出个时间来??

追答

这个方法不用调,默认的输出就是这个方法,就像你可以默认的输出一个表一样;system。out。print(list);

Java中的入队,出队和ViewQueue

我在java中做队列。这是我的代码:

public class ListQueue {
public static void main(String[] args){
    Queue myQueue;
    Scanner sc = new Scanner(System.in);
    String input;
    int choice = 99;
    do{
        System.out.println("================");
        System.out.println("Queue Operations Menu");
        System.out.println("================");
        System.out.println("1,Enquene");
        System.out.println("2,Dequeue");
        System.out.println("3,Empty?");
        System.out.println("4,Count?");
        System.out.println("5,View Queue");
        System.out.println("0, Quit
");
        System.out.println("Enter Choice:");
        try{
            choice = sc.nextInt();
            switch(choice){
            case 1:
                System.out.println("Please enter name: ");
                input = sc.next();
                myQueue.enqueue(input);
                System.out.println(input + "is successful queued");
                break;
            case 2:
                if(myQueue.isEmpty()){

                }
                break;
            case 3:
                if(myQueue.isEmpty()){
                    System.out.println("Queue is empty");
                }else{
                    System.out.println("Queue is not empty");
                }
                break;
            case 4:
                System.out.println("Number of people is " + "the queue" + myQueue.size());
                break;
            case 5:
                if(!myQueue.isEmpty())
                    myQueue.viewQueue();
                else
                    System.out.println("Queue is empty");
                break;
            case 0:
                System.out.println("Good-bye");
                break;
            default:
                    System.out.println("Invalid choice");
            }
        }
        catch(InputMismatchException e){
            System.out.println("Please enter 1-5, 0 to quit");
            sc.nextLine();
        }
    }while(choice != 0);
}

}

但是,我在enqueue()和viewQueue()中有错误,我想知道为什么。我是以错误的方式宣布队列吗?提前致谢。我是新人排队所以请耐心等待。

答案

Java队列没有enqueue和dequeue方法,这些操作使用以下方法完成:

入队:

  • add(e):如果无法插入对象,则抛出异常
  • offer(e):如果无法插入对象,则返回false

调度:

  • remove():如果队列为空则抛出异常
  • poll():如果队列为空,则返回null

看一下队列中的第一个对象:

  • element():如果队列为空则抛出异常
  • peek():如果队列为空,则返回null

Queue从Collection继承的add方法插入一个元素,除非它违反了队列的容量限制,在这种情况下它会抛出IllegalStateException。 offer方法仅用于有界队列,与add的不同之处仅在于它表示无法通过返回false来插入元素。

(见:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html

你也可以检查这个,因为这更有用:

http://docs.oracle.com/cd/B10500_01/appdev.920/a96587/apexampl.htm

另一答案

您尚未初始化myQueue:

Queue myQueue;

请注意,Queue是一个抽象类,您需要将Queue初始化为适当的实现。

请参阅下面的javaDoc:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Queue.html

另一答案

@By如何循环通过队列内的元素?你能给我发一些例子 -

我刚刚在你的案例5中添加了一些功能:用于查看List元素。

case 5:
    if(!myQueue.isEmpty())
    {
    for(Iterator it=myQueue.iterator();it.hasNext();)
        System.out.println(it.next());
//or using as a Object in Enhanced for loop
        //for (Object element : myQueue)
        //System.out.println(element);
    }
    else
        System.out.println("Queue is empty");
    break;

正如莱曼霍姆斯建议你可以使用ArayDeque。

Queue<String> myQueue = new ArrayDeque<String>();

优点: - 它比Stack和LinkedList更快 - ArrayDeque没有容量限制,因此它们可以根据需要增长以支持使用。

风险: - 它们不是线程安全的;在没有外部同步的情况下。 - 它们不支持多线程的并发访问。

另一答案

就像zerocool说你没有初始化Queue一样,因为Queue是一个接口,你不能直接实例化一个接口,你需要实例化一个实现Queue接口的类,如ArrayDequeueLinkedList等......

要初始化队列并摆脱错误,您需要这样的事情:

Queue<Integer> myQueue = new ArrayDeque<Integer>();

要么

Queue<String> myQueue = new LinkedList<String>();

Here's the API for the type of Queues you can instantiate

Also see

以上是关于在java里,为啥能用system.out.print(new Date( ));打印出时间来?原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的条件从未满足? [复制]

Java 中的"+"号(加法和连接)

Java Vector 类

java快速排序

Java——猜拳游戏

Java Vector 类