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){

。。。。。

}

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

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



Java基础面试:集合、内部类、线程,布布扣,bubuko.com

时间: 2024-08-01 15:14:05

Java基础面试:集合、内部类、线程的相关文章

Java基础教程:内部类

Java基础教程:内部类 内部类 内部类,是指在一个类的内部定义的类.就像下面这样: public class EnclosingClass {   . . .   public class NestedClass {   . . .     } } 内部类拥有访问外部类所有元素(包括private.static)的访问权.当某个外部类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用.然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员. 内部类

Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

java基础之集合Set

1.集合 当向集合Set中增加对象时,首先集合计算要增加对象的hashcode,根据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set认为该对象在集合中不存在,直接增加进去.如果在该位置有一个对象存在,接着将准备增加到集合中的的对象与该位置上的对象进行equals比较,若返回false,在进行一次散列,将该对象放到散列后计算出的新地址.若返回true,不会再将该对象增加到集合中 2.当重写equals方法时,必须要重写hashcode方法 如果一个类的两个对象,使用

java基础之集合List-ArrayList、LinkedList、Vector的区别

PS:本篇博客主要参考jdk的底层源码,而非自己动手写代码. 请问ArrayList.LinkedList.Vector的区别 ①ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的) ②如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候) ③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象 ④Arra

黑马程序员——java基础 ArrayList集合基本方法演示

java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemos { public static void main(String[] args) { // 创建一个新的容器 ArrayList al = new ArrayList(); al.add("abc1"); al.add("abc2"); al.add(&

黑马程序员——【Java基础】——集合框架

一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是用于存储对象的. (三)数组和集合类同是容器,有何不同? .数组长度是固定的:集合长度是可变的. 2.数组中可以存储基本数据类型,集合只能存储对象. (四)集合类的特点 集合可以存储不同类型的对象.集合只用于存储对象,集合长度是可变的. (五)为什么会出现这么多容器? 因为每一个容器对数据的存储方式都有不同,这个存储方式称

JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

Java基础面试知识点总结

本文主要是我最近复习Java基础原理过程中写的Java基础学习总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理. 纸上得来终觉浅,绝知此事要躬行.笔者之前对每部分的内容 对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,还请读者指正. Java基础学习总结 每部分内容会重点写一些常见知识点,方便复习和记忆,但是并不是全部内容,详细的内容请参见具体的

Java中的集合和线程安全

通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所以,我会尽可能的描述的简单点.通过这篇指南,你将会对Java集合由更深入的了解,而且我敢保证,这会对你的日常编码非常有用. 1. 为什么大多数的集合类不是线程安全的? 你注意到了吗?为什么多数基本集合实现类都不是线程安全的?比如:ArrayList,?LinkedList,?HashMap,?Has