java基础面试题集合 (一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u013501457/article/details/100109738

目录

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

2、Java有没有goto?

3、说说&和&&的区别。

4、在JAVA中如何跳出当前的多重嵌套循环?

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

6、下面代码有没有错?

7、char型变量中能不能存贮一个中文汉字?为什么?

8、用最有效率的方法算出2乘以8等於几?

9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

10,静态变量和实例变量的区别?

11、是否可以从一个static方法内部发出对非static方法的调用?

12、Integer与int的区别

13、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

15、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

16、Java中实现多态的机制是什么?

17、abstract class和interface语法上有什么区别?

18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

19、内部类可以引用它的包含类的成员吗?有没有什么限制?

21、ArrayList和Vector的区别

22、HashMap和Hashtable的区别

23、List和 Map区别?

24、List,Set, Map是否继承自Collection接口?

25、List、Map、Set三个接口,存取元素时,各有什么特点?

26、说出ArrayList,Vector,LinkedList的存储性能和特性

27、去掉一个Vector集合中重复的元素

28、Collection和Collections的区别。

29、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

30、你所知道的集合类都有哪些?主要方法?


1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以包括多个类:

  • 非内部类:
    • 只能有一个public class,并且和文件名相同。
    • 编译后,每个class产生一个单独的class文件
  • 内部类: 
    • 内部类编译后,产生多个 Test$A.class,Test$B.class文件
    • 静态内部类,产生多个Test$1.class文件

2、Java有没有goto?

没有,goto作为保留关键字

3、说说&和&&的区别。

  • &:   位运算符 bit 1,1则为1,否则为0
  • &&: 逻辑运算符 true && true 为true 否则false

4、在JAVA中如何跳出当前的多重嵌套循环?

  • 一层循环:continue,break
  • 二层及以上循环: label:  break label, label: continue label

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

我的答案  ----- 大错特错!!!

switch能用在long上 1.7以后,可以用在String上  不能用在byte上

正确答案:

  • switch可作用于char byte short int
  • switch可作用于char byte short int对应的包装类
  • switch不可作用于long double float boolean,包括他们的包装类
  • switch中可以是字符串类型,String(JDK1.7之后才可以作用在string上)
  • switch中可以是枚举类型(JDK1.5之后)

6、下面代码有没有错?

short s1 = 1;
s1 = s1+1;
short s2 = 1; 
s2 += 1;

我的答案: ------------- 大错特错

第一段代码有错,short s1 = (short) 1; s1 = (short) (s1+1); 

第二段代码有错 short s2 = (short) 1,s2+=(short) 1;

我的理解, java 大转小需强转,小转大可以隐式转换。

所以,凡是涉及到1的,都需要强转

正确答案:

第一段代码有错 应该为 s1 = (short) (s1+1) ,第二段代码没有错

第一: 基础太差

short s1 = 1; // 编译器自动判断1为short
short s2 = 32768; // 报错 编译器会将 [-32768,32767]的值,判定为short,超出为int 需要强转

int i1 = 1; // 编译器自动判断为int
int i2 = 111111111111111; // 报错 编译器判断[-2147483648,2147483647]中的值为int,超出为long

long l1 = 1;// 不报错
long l2 = 9223372036854775808; // 报错 超出范围[-9223372036854775808,9223372036854775807]

Short S1 = 1; // 报错 1为int,不能转为Short
Long L1 = 1; // 报错 1为int,不能转为Long

short s3 = s1 + 1; // 报错 1 为int, 不能转为short
long l3 = l1 + 1; // 不报错 1 为int, 可以转为long

/**
 * 基本类型初始化时,可以根据整数范围判定类型
 * 其他时候,整数默认为int型
 */

第二: (E1 op=E2) ==> (E1=(T)((E1) op (E2)))

s1 = s1+1; 这时候 // s1 是 short  , 1 是 int 所以 s1+1 的结果为int (小转大), 所以报错,应该为 s1 = (short) (s1+1);

s1 += 1; Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2)))

所以 s1+=1 ==> s1 = (short)(s1 + 1); 

7、char型变量中能不能存贮一个中文汉字?为什么?

char占两个字节,能保存 65536个UTF-16字符,可以保存中文,但不能保存所有中文汉字。

8、用最有效率的方法算出2乘以8等於几?

2<<3;

9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

引用不能变

10,静态变量和实例变量的区别?

静态变量,所有对象公用,存在 方法区 1.7 ,元数据区 1.8 中,和class放在一起

实例对象存在对象中,存放在堆中,方法变量存放在栈帧中,

11、是否可以从一个static方法内部发出对非static方法的调用?

不可以

但是可以调用静态变量的非静态方法

12、Integer与int的区别

Integer 封装数据类型 可以为null, [-128,127] 缓存, 自动装箱拆箱  Integer a = 1 ==> Integer a = Integer.valueOf(1);

int 基本数据类型 不可以为null,

13、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

round向上取整 

Math.round(11.5) = 12;

Math.round(-11.5) = -11;

14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

  • 重载Overload: 方法可以同名,但是参数必须不同,
  • 重写Override: 方法同名,同参数,同返回值,子类的方法覆盖父类的方法,调用也转到子类上。

15、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

  • 接口可以继承接口, 使用extends关键字
  • 抽象类可以实现接口
  • 抽象类可以继承具体类
  • 抽象类可以有main方法

16、Java中实现多态的机制是什么?

继承和实现

17、abstract class和interface语法上有什么区别?

  • 抽象类 可以有成员变量和方法,抽象方法需要实现
  • 接口 不能有成员变量和方法,只能有静态方法和变量,每个方法都需要实现

18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

我的回答: ------------- 错了

抽象方法不可以是static,native,final,可以是synchronized

正确答案

抽象方法不可以是static,native,final,synchronized

因为假设有这么一个方法,synchronized 的方法的同步锁对象是 this ,而包含这个抽象方法的接口或抽象类也许有多个子类,那么那个 this 到底是指哪一个子类就无法确定。所以不可以。  // 这个解释不对吧,多态中,子类实现父类,子类必须继承,也可以找到子类。

19、内部类可以引用它的包含类的成员吗?有没有什么限制?

可以引用,静态内部类只能引用静态成员

20、String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

"Hello"已经被声明为字符常量了,不会改变"world!”也是字符常量,新增了一个 "Helloworld!"的字符常量

s的引用地址发生了改变。

21、ArrayList和Vector的区别

  • ArrayList 数组实现的List,线程不安全,自动扩容
  • LinkedList 双向链表实现的List,线程不安全
  • Vector 数组实现的List,方法被Synchroized修饰,线程安全

22、HashMap和Hashtable的区别

  • Hashtable 舍弃不用了
  • HashMap 散列表实现

23、List和 Map区别?

  • List是链表,只能存放一个value
  • Map是映射,必须存放键值对 key/value 

24、List,Set, Map是否继承自Collection接口?

不是 ,

  • Map不是,Map没有父接口
  • List继承Collection接口
  • Set继承Collection接口
  • Collection继承Iterable接口

25、List、Map、Set三个接口,存取元素时,各有什么特点?

  • List:
    • ArrayList是尾添加
    • LinkedList是尾添加
    • List元素可以重复
  • Map:
    • HashMap散列表是头添加
    • Map key不能重复,value可以重复
  • Set:
    • HashSet是依赖HashMap实现
    • Set元素不可重复

26、说出ArrayList,Vector,LinkedList的存储性能和特性

  • ArrayList:
    • 数组构成
    • 查询快/迭代快/增加快/
    • 删除慢
    • 线程不安全
  • Vector:
    • 数组构成
    • 查询快/迭代快/增加快
    • 删除慢
    • 线程安全
    • 性能比ArrayList差
  • LinkedList:
  • 双向链表实现
  • 查询慢/增加慢
  • 迭代快/删除快
  • 线程不安全

ArrayList和LinkedList线程安全性实测: 100线程,每个录10W 总计1000W 实际录入 500W不到,少了一半多

27、去掉一个Vector集合中重复的元素

用Set去重

28、Collection和Collections的区别。

Collection是接口,是List的父级

Collections是工具类,封装了很多和集合相关的方法

29、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

  • Set:
    • map实现
    • 判定相等的条件包括 hashcode相同并且(值相同或引用相同)

equals和==的区别

== 判断引用相同

Object的equals就是 == 

String的equals是判断==和值相同

30、你所知道的集合类都有哪些?主要方法?

  • Collection:
    • List:
    • ArrayList
    • LinkedList
    • Vector
    • Queue
    • Stack 基于Vector
  • Map
    • HashMap
    • TreeMap
  • Set
    • HashSet 基于 HashMap
    • TreeSet 基于TreeMap

猜你喜欢

转载自blog.csdn.net/u013501457/article/details/100109738