• Java基础面试:集合、内部类、线程


    package test;
    
    import java.util.Hashtable;
    import java.util.Map;
    
    public class test {
    	public static String change(String param){
    		param=null;
    		return param;
    	}
    	public static void main(String[] args) {
    		String param1="p1";
    		param1=change(param1);
    		Map table1=new Hashtable();
    		table1.put(param1, "pv1");
    		System.out.println(table1.get("p1"));
    		}
    }
    /**
     * Exception in thread "main" java.lang.NullPointerException
    	at java.util.Hashtable.put(Hashtable.java:399)
    	at test.test.main(test.java:15)
    	*/
    


    2.

    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test2 {
    	public static void main(String[] args) {
    		List list = new ArrayList();
    		list.add("1");
    		list.add("3");
    		list.add("4");
    		for(Object o : list){
    			if ("3".equals(o)) {
    				list.remove(o);
    			}
    		}
    		for (int i = 0; i < list.size(); i++) {
    			System.out.println(list.get(i));
    		}
    	}
    
    }

    执行输出:

    1

    4



    3.接口是能够new的

    package test;
    
    public class Outer {
    	
    	public void instanceMethod() {
    		Action action = new Action() {
    
    			@Override
    			public void doAction() {
    				// TODO Auto-generated method stub
    				System.out.println("error");
    			}
    			
    		};
    		action.doAction();
    		new DataClass(5){
    			public void printData() {//该方法未被调用
    				System.out.println("data="+getData());
    			}
    		};
    	}
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new Outer().instanceMethod();
    	}
    
    }
    interface Action{
    	void doAction();
    }
    class DataClass{
    	private int data;
    	public DataClass (int data) {
    		this.data=data;
    		
    	}
    	public int getData() {
    		return data;
    	}
    }
    

    执行输出:

    error


    4.java多线程都有几种方式实现?

    有三种:
    (1)继承Thread类,重写run函数
    创建:
    class xx extends Thread{
      public void run(){
    Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
    }}
    开启线程:
    对象.start() //启动线程。run函数执行
    (2)实现Runnable接口,重写run函数
    开启线程:
    Thread t = new Thread(对象) //创建线程对象
    t.start()
    (3)实现Callable接口,重写call函数
    Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程运行的任务。
    Callable和Runnable有几点不同:
    ①Callable规定的方法是call(),而Runnable规定的方法是run().
    ②Callable的任务运行后可返回值,而Runnable的任务是不能返回值的
    ③call()方法可抛出异常,而run()方法是不能抛出异常的。
    ④执行Callable任务可拿到一个Future对象。Future表示异步计算的结果。它提供了检查计算是否完毕的方法,以等
    待计算的完毕,并检索计算的结果.通过Future对象可了解任务运行情况,可取消任务的运行,还可获取任务运行的结果


    5.Java线程同步,是什么意思?

    一种是方法前加sychronized
    public void sychronized start() {
            System.out.println("start");
    }

    还有一种是在代码段之前加sychronized
    (sychronized){
            。

    。。

    。。


    }

    同步方法(synchronizedkeyword修饰的方法)能够较好地解决并发问题,在一定程度上能够避免出现资源抢占、竞争条件和死锁的情况。但其副作用是同步锁可导致线程堵塞。这要求同步方法的运行时间不能太长。

    这就是所谓的锁机制。你何以使用sychronized(Object obj)锁住某个对象。等你使用完这个对象之后,再进行锁的释放。其它须要该对象的线程才干够运行。

    
  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6820402.html
Copyright © 2020-2023  润新知