zoukankan      html  css  js  c++  java
  • 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)锁住某个对象。等你使用完这个对象之后,再进行锁的释放。其它须要该对象的线程才干够运行。

    
  • 相关阅读:
    《PHP
    2018/06/11 数据库设计规范
    RequireJs 与 SeaJs的相同之处与区别
    null 与 undefinded
    page 分页
    fullPage的使用
    touch事件(寻找触摸点 e.changedTouches)
    t添加最佳视口
    随鼠标动的炫彩小球
    随机小球
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6820402.html
Copyright © 2011-2022 走看看