26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回与参数最接近的长整数,参数加0.5后求其floor。
27、String s = new String("xyz");创建了几个String Object?
两个
一个是编译时决定的,最后放在常量池中。一个是运行时放在堆里面的。两个都是"xyz"。
常量池中只可能只有一个“xyz”,但是堆中可能有多个,
因为这里用了new String来强制在堆中再创建了一个对象,所以是两个;
如果是String s= "xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz ”。
28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
public class ThreadTest1{
private int j;
public static void main(String args[]){
ThreadTest1 tt = new ThreadTest1();
Inc inc = tt.new Inc();
Dec dec = tt.new Dec();
for(int i = 0;i < 2;i++){
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i = 0;i < 100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i = 0;i < 100;i++){
dec();
}
}
}
}
29、Java有没有goto?
java中的保留关键字,现在没有在java中使用。
30、启动一个线程是用run(),还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,
这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。
通过start()方法可以调用到run() 。