这是来自Herbert Schildt的Java Fundamentals的程序,用于演示同步.该方法sumArray(int[])是synchronized,并且这是程序正常工作的要求.但是,当我synchronized意外删除关键字时,程序显示几乎相同的输出,仍然给出了正确的结果.这是该计划.
class SumArray {
private int sum;
int sumArray(int[] nums) {
sum = 0; // Reset sum.
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
System.out.println("Running total for " + Thread.currentThread().getName() + " is " + sum);
}
return sum;
}
}
class SumThread implements Runnable {
static SumArray sa = new SumArray();
Thread thrd;
int[] a;
int answer;
public SumThread(String name, int[] nums) {
thrd = new …Run Code Online (Sandbox Code Playgroud) 我写了以下程序.
public class StringTest {
public static void main(String[] args){
String x = "\0";
String y = " ";
System.out.println("This is x - "+x+".");
System.out.println("This is y - "+y+".");
System.out.println(x.equals(y));
}
}
Run Code Online (Sandbox Code Playgroud)
当然,x.equals(y)应该清楚false,因为它们完全不同String.然而,输出让我感到惊讶.
This is x - .
This is y - .
false
Run Code Online (Sandbox Code Playgroud)
如果这两个String不相等,那么他们怎么能产生相同的输出呢?
我尝试在Java中使用这个代码,我使用JFrame作为它自己的ActionListener.现在,它在理论上是可行的,因为在Java中,类可以实现许多接口并扩展另一个类.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
/*
* This is an example of the strangeness of the syntax of Java. In this example, I am using the JFrame itself as the listener for its component, namely a JButton which, on clicking, ends the program.
* Warning : This is just an example, and I would never recommend this syntax, …Run Code Online (Sandbox Code Playgroud) 我正在创建一个基本上有很多按钮的swing程序,而且我在考虑不是单独向每个按钮添加监听器,如果我可以将监听器添加到其中JPanel,并使用.getSource()函数读取事件,那么事情将是一个整个很容易?可能吗?
我正在使用Eclipse Juno.每当我尝试在任何程序上使用调试器时,编辑器窗格中会出现一个新窗口,标题为红色,URLClassLoader$1.run() line: not available并显示一条消息"Source not found".有帮助吗?提前致谢!
这是图片

假设我有两个重载方法,void foo(int arg)并且void foo(int[] args).两者都对整数参数进行相同的处理.现在,我已经以这种方式实现了它们
void foo(int arg){
// Some processing.
}
void foo(int[] args){
for(int i : args)
//The same processing as above.
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道避免代码重复是一个更好的设计原则,所以第二种方法也可以实现为:
void foo(int[] args){
for(int i : args)
foo(i);
}
Run Code Online (Sandbox Code Playgroud)
但是,由于我多次调用该方法,并且由于方法调用会增加开销,因此这种方法会使速度变慢.所以,我的问题是:我应该使用哪种方法?
我有这个Java代码,使用两种不同类型的循环.
public class Test {
public static void main(String[] args){
long fl = 0, wl = 0;
int i = 0;
int a = 0;
long start = 0, stop = 0;
start = System.currentTimeMillis();
while(i<2000000000){
if(i%2 == 0)
a++;
else
a--;
i++;
}
stop = System.currentTimeMillis();
wl = stop-start/2;
System.out.println("\nWhile loop = "+wl);
i = 0;
a = 0;
start = 0;
stop = 0;
start = System.currentTimeMillis();
for(;i<2000000000;){
if(i%2 == 0)
a++;
else
a--;
i++;
}
stop = …Run Code Online (Sandbox Code Playgroud) 在编写程序时,我遇到了一个奇怪的情况.我需要知道一个for loop是正常结束还是正常结束break.有没有办法知道这个?