java如何读取代码?

时间:2013-10-28 20:03:54

标签: java

好吧,我想知道java如何处理代码读取和运行,例如,如果我写了:

static void doSomething(){
    doSomethingElse();
    doYetAnotherThing();
}

它会在doSomethingElse()运行之前等待doYetAnotherThing()完成吗?或者它会同时运行吗?

我想如果它设置了一个变量variable = setAVariable();,它会在继续之前检索变量,但是如果该方法包含一个无限循环,它就会卡住。

4 个答案:

答案 0 :(得分:1)

Java将按顺序运行您的代码,除非您另有说明(通过创建线程。)

如果你在函数doSomthingElse()中使用了无限循环,则doYetAnotherThing()将永远不会执行,doSomething将永远不会终止。

public static void main(String[] args)
{
    doSomethingElse();
    doYetAnotherThing();
}

private static void doYetAnotherThing() {
    System.out.println("Hi Agn");

}

private static void doSomethingElse() {
    System.out.println("Hi");
    while(true) // Infinite Loop
    {

    }
}

这将打印输出:

    Hi

但不是:嗨Agn。

要使两个函数都运行,您需要删除doSomethingElse()中的无限循环。

更新:

但是,如果你不能这样做并仍想运行上面的代码,你可以使用线程:

主要类别:     公共类javaworking     {
    static MyThread t1,t2;     线程tc;

public static void main(String[] args)
{
    t1 = new MyThread(1);       
    Thread tc = new Thread(t1);
    tc.start();

    t2 = new MyThread(2);
    tc = new Thread(t2);
    tc.start();
}
}

包含所有函数的线程类:     公共类MyThread实现了Runnable {

int ch;

public MyThread(int choice)
{
    ch = choice;
}

@Override
public void run() {
    // TODO Auto-generated method stub

    switch(ch)
    {
    case 1:
        doSomethingElse();          
        break;

    case 2:
        doYetAnotherThing();
        break;

    default:
        System.out.println("Illegal Choice");
        break;
    }

}

private static void doYetAnotherThing() {
    // TODO Auto-generated method stub
    System.out.println("Hi Agn");

}

private static void doSomethingElse() {
    // TODO Auto-generated method stub
    System.out.println("Hi");
    int i = 1;
    while(true)
    {
        System.out.println(i++);
    }
}
}

请注意:我提供的代码仅仅是一个例子。我没有做任何错误处理或遵循建议的标准。代码有效,就是这样。

答案 1 :(得分:0)

这些是在一个线程中执行的同步调用,因此它们一个接一个地执行,即。先doSomethingElse();然后doYetAnotherThing();。如果你想让它们同时执行,你可以把它们放在不同的线程中,那么订单将无法保证。

答案 2 :(得分:0)

逻辑上,程序将从上到下阅读。作为一个程序员,你真正需要知道的。但是,在幕后可能不一定是这种情况。但是你可以保证结果就好像顺序运行一样。

有时您的处理器会运行甚至从未执行过的代码行!这是因为一些叫做分支预测的东西(对this答案有一个很好的解释,虽然不是java这个想法在较低层次上得到了证明)。

同样,您可以假设同一个线程中的所有内容都将以书面顺序执行。

答案 3 :(得分:0)

规范中的一个列表在这里: http://docs.oracle.com/javase/specs/jls/se5.0/html/execution.html

要点是一个函数必须在调用下一个函数之前返回。在你不知道你的功能在做什么的情况下,我无法说出你的意思。他们可以返回,因为他们完成或因为他们分叉/产生了另一个进程/线程/异步操作。这有更多的细微之处,但我没有比这更进一步,因为他们过于复杂和模糊了答案。

根据您使用的术语,我建议从教程开始。 Java不会读取您的代码。 Java是一种语言。编译器将“读取”并解析您的代码,并生成将由JVM执行的字节码。

是的,如果你造成一个无限循环,那就是一个问题,你的程序也不会退出。