2019-03-01 java基础笔试题

1.一下程序的运行结果是:

package com.xd.test;

public class ExampleForThread extends Thread {
 
    @Override
    public void run() {
        try {
          //此时执行了sleep的线程(此处时执行start方法时出现的线程)进行休眠,主线程开始执行
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("run");
    }
 
    public static void main(String[] args) {
        ExampleForThread ex = new ExampleForThread();
        //启动一个新的线程,通过jvm自动调用该线程的run方法
        ex.start();
        System.out.println("main");
    }
}
==============
运行结果:main  run

注解:通过start方法启动线程,然后通过jvm自动去调用run方法,同一个线程不能被调用2次,本题当中有2个线程,一个是主线程,一个是start方法的线程,启动start方法时候,此线程启动,执行run方法,遇到sleep开始休眠,然后主线程开始执行,注意主线程是一个普通线程,在程序启动的时候自动创建,也可以由Thread对象直接控制

package com.xd.test;

public class ExampleForThread1 extends Thread {
     
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("run");
    }
 
    public static void main(String[] args) {
       
        
        ExampleForThread1 eft=new ExampleForThread1();
        //此时只有主线程,没有子线程,通过run方法不能创建线程
        eft.run();
        System.out.println("main");
    }
}

2.以下程序运行的结果为()

package com.xd.test;
public class B
{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

注意:在做这个题之前我一直以为在加载程序的时候最先加载的一定静态代码块,今天才发现这是错的,最先执行的应该是静态代码域才正确(静态代码域包括:静态变量、静态块和静态方法,其中需要初始化的是静态变量和静态块.而他们两个的初始化顺序是靠他们俩的位置决定的!),故此题的执行顺序应该是t1,t2,静态块

静态块只有在初始化的时候执行一次,构造代码块和构造方法每创建一个对象都会执行,而且静态块>main()>构造块>构造方法

3.# java当中break outer,continue outer的使用

break默认是结束当前循环,但是有时候我们需要通过内循环的语句直接跳出外循环,此时就需要在break标签的后面指定要跳出的外层循环,需要注意的是这个标签要在要跳出循环的外层循环前面定义

public class Test1 {

    public static void main(String[] args) {
        
        int i=3,j;
        outer:while(i>0) {
            j=3;
            inner:while(j>0) {
                if(j<2) break outer;
                System.out.println(j+"and"+i);
                j--;
            }
            i--;
        }
    }
    
}
=====================
输出:
3and3
2and3

    public static void main(String[] args) {
        
         outer: 
                for(int i=0; i<10; i++){  
                    for(int j=0; j<10; j++){  
                        System.out.println("i:"+i+" j:"+j);  
                        if(j==1){
                            continue outer; 
                        }
                        if(i==1){
                            break outer;
                        }
                    }
                    System.out.println("i:"+i);
                } 
    
    }
}
=========================
输出:
i:0 j:0
i:0 j:1
i:1 j:0

注意:return也可以跳出循环,但是return是直接跳出一个方法(结束一个方法),break跳出本次循环,continue都是跳出本次循环,进入下一次循环。

4.有101个数字,从0到99,其中有2个数字是重复的,求处这个重复的数字

思路:由于所有的0到99都存在,故将所有数组求和,然后减去0+1+2+...+99,既可以获得重复的数字

/**
 * 数字0-99一共有101个数字,其中有2个数字是重复的,如何找到它
 * @author laochaochunfengting
 *
 */
public class Test3 {

    public static void main(String[] args) {
        
        int sum=0;
        int arr[] = {1,2,3,4,5,1};
        for(int i=0;i

你可能感兴趣的:(2019-03-01 java基础笔试题)