Java基础-基础测试题22道

Java基础-面试题基础20道

1、 short s = 1 ;s = s + 1 ;有错吗?为什么?short s = 1 ;s += 1 ;有错吗?为什么?

	有错,因为1int类型,s+1会自动转换成int, 需要强转为short才能用s接收
	没有错,因为+=操作符,在解析时自动做了类型转换,等价于(short)(s+1)

2、Java 中的 Math. round(-1. 5) 等于多少?

	-1.5介于-2-1之间,四舍五入,所以结果是-1

3、请说下访问修饰符?

	Public 公共的,修饰的类和成员,在当前工程中都可以被访问
	Protected 受保护的,在子类和同包中可以被访问
	默认的,在同一个包中可以被访问
	Private 私有的,仅在当前类中可以被访问

4、 final 在 Java 中有什么作用?

	1.修饰的变量会变为常量,必须在声明时赋初始值,且值不可修改
	2.修饰的方法,不可以被重写
	3.修饰的类,不可以被继承

5、 final、finally、finalize 有什么区别?

	1.final可以修饰类,方法和变量,表示不可改变。
	2.finally是异常处理时的一个代码块,出现在try-catch后面,不论是否发生异常,finally代码块都会被执行。
	3.finalize 是Object中的一个方法,当垃圾回收器从内存中清除一个对象时会调用该方法。

6、 请列出5个常见的异常类?

	NullPointerException空指针异常
	ArrayIndexOutOfBoundsException 数组下标越界异常
	ArithmeticException 数学运算异常
	ClassCastException 类型转换异常
	ClassNotFoundException 找不到指定类,常出现在反射中

7、 == 和 equals 的区别是什么?

	==是比较运算符,比较的是两个对象的地址值是否相等。
	equals是Object中的方法,在Object中对于equals的实现也是调用== . 但该方法通常被其它类重写,例如String类,重写后的规则是比较两个字符串的内容是否相同。

8、throw 和 throws 的区别?

	throw是主动声明一个异常对象。
	throws是异常的处理方式之一,用在方法名后面,表示向上抛出异常类型。

9、下面的代码输出什么?
String str6 = “b”;
String str7 = “a” + str6;
String str67 = “ab”;

System.out.println("str7 = str67 : "+ (str7 == str67));
输出false,因为 String s= “a”+”b” 和   String s= “a”+str6不一样.
String s= “a”+”b” 在编译阶段就会合并,和String s= “ab”是等价的。
String s= “a”+str6,中str6是一个变量,在编译过程中不能合并,那么+运算符会用StringBuilder的append方法实现,即:
String s=new StringBuilder().append(“a”).append(str6).toString();且在toString方法中,是new String(),即创建了一个String对象。

10、 下面的代码输出什么?
final String str8 = “b”;
String str9 = “a” + str8;
String str89 = “ab”;
System.out.println("str9 = str89 : "+ (str9 == str89));

输出true,因为str8是一个常量,在编译过程中就会合并在一起。即:
"a" + str8 等价于 "a" +"b" 

11、 接口和抽象类有什么区别?

	1.接口中只能有抽象方法和静态方法,以及default方法,不能有普通方法。抽象类中可以有抽象方法,也可以有普通方法。
	2.接口中只能有public static final 修饰的常量,不能有变量。而抽象类中可以有变量和常量。
	3.抽象类只能单继承,即只能有一个直接父类;而接口可以多继承,即:可以继承多个接口。
	以上3个点是最核心的区别,当然还会有其它的细节上的区别。

12、下面的代码输出什么?
Integer i1 = 1 ;
Integer i2 = 1 ;
Integer i3 = 128 ;
Integer i4 = 128 ;
System.out.println(i1 == i2);
System.out.println(i3 == i4);

输出truefalse.在Integer中有一个缓存区(Integer [] cache),范围是[-128,127],如果给Integer变量赋值在这个范围内,则直接从数组中取对应的元素,所以前者输出为true.反之,如果不在这个范围内,则会new Integer(int) 新建一个对象,所以后者输出为false. 
详情查看Integer.valueOf(int) 方法的源码。

13、List Set Map的区别?

	List是有序集合,集合中的元素可以重复,有下标。
	Set是无序集合,集合中元素不可以重复,没有下标。
	Map集合中的元素是entry,即key-value构成的键值对,其中键不可以重复,没有下标。

14、说下java中的集合?

	1.集合是一个容器,可以盛放对象或数据,不约束类型,不约束长度。
	2.Collection接口是集合的顶层接口,下辖两个子接口:List和Set.
	3.List接口常用的实现类有ArrayList和LinkedList.一个是数组结构,一个是链表结构。
	4.Set接口常用的实现类有HashSet和TreeSet,一个是无序的,一个是有序的。
	5.还有一个接口是Map,常用的实现类有HashMap和TreeMap,一个使用hash算法,一个使用红黑树算法。

15、说下HashTable HashMap的区别?

	Hashtable是一个线程安全的集合,单线程集合,速度慢,Hashtable集合不能存储null值,null键。
	HashMap是线程不安全集合,是一个多线程集合,不过它的速度很快,可以存储null值,null键。

	补充:
	1.Hashtable和HashMap都是Map接口的实现类,底层都是哈希表。
	2.Hashtable集合逐渐被HashMap集合取代,但是Hashtable的子类Properties依然沿用,Properties集合也是唯一一个和IO流相结合的集合。

16、HashMap(HashSet)用来装学生信息,人数在37-43人左右,请问如何初始化HashMap数量达到性能最优?

	答案:64 
	在创建HashMap(或HashSet)时,可以给一个初始容量,官方建议是2的n次幂,即:16,32,64,128...这些数据,如果元素个数超出了给定的容量,会自动扩容一倍,影响性能。

17、代码中有且仅有如下代码String s1 = new String(“Hello”); ,这行代码会创建几个字符串对象?

2个,分别是:
	String s=”hello”; 和 String s1=new String(s); 其中s和s1都是字符串对象,他们也分别代表了字符串对象创建的2种方式。
	详情查看https://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html

18、使用冒泡法将整形数组的进行排序

public static void sort(Integer[] arr){
     
    for (int i = 0; i < arr.length-1; i++) {
     
        for (int j = 0; j < arr.length-1-i; j++) {
     
            if(arr[j]>arr[j+1]){
     
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

19、重写跟重载的区别 ?

重写:子类中可以重写父类的方法,要求子类中重写的方法和父类中被重写的方法:方法名相同,参数列表相同,返回值类型相同,且访问修饰符应相同或宽于父类。
重载:同一个类中,方法名相同,但形参不同(形参个数不同,类型不同,顺序不同)的两个方法构成方法的重载。

20、ArrayList跟Vector的区别?

Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

21、说下数组跟链表的区别?

在内存中,元素的空间可以在任意地方,空间是分散的,不需要连续
在内存中,数组是一块连续的区域
链表查询慢但是数组查询速度快
链表添加数据和删除数据较快,数组较慢```

22、请说出5个常见的类?说出5个常见的包?

常见的类:
	String ArrayList BufferedReader Integer Date 
常用的包:
	(1.Java.lang包
	这个包下包含了Java语言的核心类,如String、Math、Sytem和Thread类等,使用这个包无需使用import语句导入,系统会自动导入这个包中的所有类。
	(2)java.io包
	这个包含了一些Java输入/输出编程相关的类/接口。
	(3.Java.util包
	这个包下包含java的大量工具类/接口和集合框架类/接口。如Arrays和List、Set等。
	(4)Java.net包
	这个包下包含了一些Java网络编程相关的类/接口。
	(5.java.sql
	这个包下包含了java进行JDBC数据库编程的相关类/接口。

你可能感兴趣的:(Java基础学习,java,编程语言,面试)