JAVA基础

目录

1. JDK 和 JRE 有什么区别?

2. == 和 equals 的区别是什么?

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

4. final 在 java 中有什么作用?

5. String 属于基础的数据类型吗?

6.方法重写 和 方法重载 的区别是什么?

7. java 中操作字符串都有哪些类?它们之间有什么区别?

8. String str="i"与 String str=new String("i")一样吗?

9. 如何将字符串反转?

10. String 类的常用方法都有那些?

11. 抽象类必须要有抽象方法吗?

12. 普通类和抽象类有哪些区别?

13. 抽象类能使用 final 修饰吗?

14. 接口和抽象类有什么区别?

15. java 中 IO 流分为几种?

16. Files的常用方法都有哪些?

17 自动装箱与拆箱 

18. java 容器都有哪些

19. Collection 和 Collections 有什么区别?

20. List、Set、Map 之间的区别是什么?

21. HashMap 和 Hashtable 有什么区别?

22. 如何决定使用 HashMap 还是 TreeMap?

23. 说一下 HashMap 的实现原理?

24.HashMap为什么是线程不安全的?

25. 说一下 HashSet 的实现原理?

26. ArrayList 和 LinkedList 的区别是什么

27. 如何实现数组和 List 之间的转换?

28. ArrayList 和 Vector 的区别是什么?

29. Array 和 ArrayList 有何区别?

30. 哪些集合类是线程安全的?

31. 什么是反射?

32. 什么是 java 序列化?什么情况下需要序列化?

33. 动态代理是什么?有哪些应用?

34. 怎么实现动态代理?

35.Exception(异常) 和 Error(错误)区别

36. throw 和 throws 的区别?

37. final、finally、finalize 有什么区别?

38. try-catch-finally 中哪个部分可以省略?

39. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

40. 常见的异常类有哪些?


1. JDK 和 JRE 有什么区别?

jdk是Java的开发工具包 包括java的开发环境和运行环境。
jre提供了是Java运行时环境

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。  将不需要对外提供的内容都隐藏起来、把属性都隐藏,提供公共方法对其访问。
继承:继承父类的方法,并做出自己的改变和/或扩展
多态:父类型的引用指向子类型的对象。编译时静态绑定父类,运行时动态绑定子类,执行子类的方法。
类与对象的关系:
类:类是一个模子,描述了该对象应该具有什么特征。
对象:对象是类的实例,由照着类这个模子创建出的实例。 

2. == 和 equals 的区别是什么?

==是关系运算符,equals是方法。
==对于基本数据类型比较的是值相等,如果是引用数据类型表示的地址相等
equals默认是比较的两个引用数据类型的地址,如果想要比较两个两个引用数据类型里面的内容相等需要重写equals方法。

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

  不对 两个对象hashCode相同 ,equals不一定为true如果发生哈希碰撞,hashCode相等但是equals不同,比如中文“重地”和“通话” 两个hashCode相同但是equals不同。
如果是同一个对象hashCode一定相同。

4. final 在 java 中有什么作用?

final在Java中主要修饰类,方法,属性的
final修饰的类不能被继承,
final修饰的方法不能被重写
final修饰的属性不能被重新赋值也就是说是常量,
对于一个 final 变量,如果是基本数据类型的变量,则其数值一旦在初始 化之后便不能更改;
如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象

5. String 属于基础的数据类型吗?

String 是引用数据类型
基本数据类型有八种 byte short int long float double boolean char

6.方法重写 和 方法重载 的区别是什么?

方法重写是发生在有继承关系的父子类中,方法重写的条件,方法名,形式参数列表相同。子类访问权限只能比父类更高不能更低,返回类型相同或是其子类。
子类重写父类方法后不能比父类抛出更多的异常。
方法重载是发生在同一个类中,方法重载只与方法名和形式参数列表有关,方法名相同,形式参数列表不同(参数个数不同,参数类型不同,参数顺序不同)

7. java 中操作字符串都有哪些类?它们之间有什么区别?

String StringBuffer Stringbuilder 
String底层是final修饰的byte数组,也就是创建一个字符串,这个字符串就是不可变得,是在堆内存的字符串常量池中存储。
StringBuffer 底层不是final修饰的byte数组也就是说字符串是可以改变的,是线程安全的。
StringBuilder 跟 StringBuffer是一样的但是StringBuilder 是线程不安全的,如果没有线程安全问题建议用StringBuilder
对于三者使用的总结: 1. 操作少量的数据 = String 2. 单线程操作字符串缓冲区下操作大量数据 = StringBuilder 3. 多线程操作字符串缓冲区下操作大量数据 = StringBuffer

8. String str="i"与 String str=new String("i")一样吗?

不一样,str表示的是“i”字符串常量池中中的内存地址,第二个str 是保存的是在堆内存中创造对象的内存的地址,

9. 如何将字符串反转?

用Stringbudiler 或 StringBuffer的 reverse()方法。

10. String 类的常用方法都有那些?

subString(int begin,int end);
indexof("")返回指定字符串的索引。
trim()去除前后空格。
length()返回指定字符串的长度。
split()以指定字符串截取并返回一个String数组。
charAt(int index)返回指定索引的字符串。
tocharArray()返回的是一个char数组
contains()判断是否包含某个字符串
equals()判断两个字符串是否相同。

11. 抽象类必须要有抽象方法吗?

不是必须的,抽象类中可以有抽象方法,也可以没有,但是有抽象方法的类一定是抽象类。

12. 普通类和抽象类有哪些区别?

抽象类中可以有抽象方法普通类没有
抽象类 是 abstract 修饰,普通类没有
普通类可以实例化,而抽象类不能被实例化。

13. 抽象类能使用 final 修饰吗?

抽象类不能被final修饰,抽象类不能被实例化,所以是用来被继承的,而final修饰的不能不继承,相互矛盾。

14. 接口和抽象类有什么区别?

接口中只有常量和抽象方法,抽象类中可以有实例方法,和抽象方法
接口中没有构造方法,而抽象类中有构造方法
接口与接口之间可以多继承,抽象类是单继承。
一个类可以实现多个接口,但是只能继承一个抽象类。


15. java 中 IO 流分为几种?

类型分:字节流,字符流
方向分:输入流 ,输出流

16. Files的常用方法都有哪些?

Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。

17 自动装箱与拆箱 

装箱:将基本类型用它们对应的引用类型包装起来; 
拆箱:将包装类型转换为基本数据类型;

18. java 容器都有哪些

数组,集合,StringBuffer Stringbuilder
数组可以存储基本数据类型也可以存储引用数据类行,数组存储的类型都是一样的,数组一旦创建其长度是不可改变的。
集合存储的都是Object类型,
h3Stringbuilder 和 StringBuffer 都是存储字符串的。

19. Collection 和 Collections 有什么区别?

Collection是一个接口,下面有 List 和 Set 两个接口 List接口下面有Arraylist和linkedlist 和voctor集合 Set接口下面有 HashSet和TreeSet linkedHashSet
Collections是一个集合工具类,里面都是静态方法。

20. List、Set、Map 之间的区别是什么?

list和set是Collection下面的接口,Map是一个接口。
list是有序可重复的,set是无序不可重复 ,map是以键值对的形式存储的,他的key是无序不可重复的,

21. HashMap 和 Hashtable 有什么区别?

1.HashMap是线程不安全的,Hashtable是线程安全的,底层使用synchronized关键字进行修饰的。
2.HashMap的key和value可以为空,但是Hashtable的key和value不能为空的。
3.HashMap中有containsKey和containsValue方法 Hashtable中只有contains方法
4.底层数据结构不同:jdk1.7底层都是数组+链表,但jdk1.8 HashMap加入了红黑树
5.初始化容量不同:HashMap 的初始容量为:16,扩容到原来的两倍。Hashtable 初始容量为:11 扩容到原来的两倍+1;

22. 如何决定使用 HashMap 还是 TreeMap?

如果存的数据想要取出来有顺序的排列就使用TreeMap,其余用HashMap。

23. 说一下 HashMap 的实现原理?

HashMap的底层是哈希表,它存储的时候会把key和value封装成一个node对象,通过hashCode() 方法得出哈希值。然后通过哈希算法的出数组的下标,然后看列表上是否有元素,如果没有加上去,如果有会和列表上的每一个节点的key进行equals对比,如果返回false添加到链表的末尾。如果返回true则进行替换
JDK8以后做了调整,当链表上的数据大于8个是转为红黑树,小于6是重新变为链表
HashMap 初始化容量是16 扩容到原来的两倍

ConcurrentHashMap实现原理是怎么样的或者问ConcurrentHashMap如何在保证高并发下线程安全的同时实现了性能提升?

ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。
它使用了多个锁来控制对hash表的不同部分进行的修改。内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,只要多个修改操作发生在不同的段上,它们就可以并发进行

24.HashMap为什么是线程不安全的?

我之前做过一个实验,就是用三个线程去往hashmap中put值,输出之后就会发现,有的值是错误的,有的值还会丢失,造成这样的原因,就是,hashmap他没有做线程安全的处理,也就是他允许多个线程同时对数据进行更改,这就会造成数据的错误和丢失。

25. 说一下 HashSet 的实现原理?

HashSet的底层是hashMap,它进行添加实际上是添加到hashMap的key部分了。

26. ArrayList 和 LinkedList 的区别是什么

ArrayList的底层是数组,linkedlist的底层是双向链表。ArrayList是随机增删较慢,查询较快,末尾添加还是很快的,
LinkedList底层是双向链表的结构,它是随机增删块但是查询比较慢了

27. 如何实现数组和 List 之间的转换?

数组转换为list集合使用Arrays.asList();
list转换成数组是用list.toArray()方法

28. ArrayList 和 Vector 的区别是什么?

ArrayList是线程不安全的
Vector是线程安全的

29. Array 和 ArrayList 有何区别?

Array 是数组 可以存基本数据类型和引用数据类型。 数组一旦创建其长度是不可改变的。
ArrayList 是集合 只能存储引用数据类型。当存储的内容达到默认加载因子的时候会自动扩容。

30. 哪些集合类是线程安全的?

Vector,Hashtable
ArrayList,linkedList,HashMap是线程不安全的。

31. 什么是反射?

反射就是在程序运行的时候,动态的创建一个对象,修改这个对象的一些状态。调用他方法。


在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法
Java反射机制主要提供了以下功能:

在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法


32. 什么是 java 序列化?什么情况下需要序列化?

简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;

33. 动态代理是什么?有哪些应用?

当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。
可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,
而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦意义,灵活,扩展性强。

动态代理的应用:

Spring的AOP
加事务
加权限
加日志

34. 怎么实现动态代理?

首先必须定义一个接口,还要有一个InvocationHandler(将实现接口的类的对象传递给它)处理类。
再有一个工具类Proxy(习惯性将其称为代理类,因为调用他的newInstance()可以产生代理对象,
其实他只是一个产生代理对象的工具类)。
利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。

35.Exception(异常) 和 Error(错误)区别

Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。
Exception(异常):是程序本身可以处理的异常

36. throw 和 throws 的区别?

throw代表动作,表示抛出一个异常对象的动作;throws代表一种状态,代表方法可能有异常抛出
throw用在方法实现中,而throws用在方法声明中
throw只能用于抛出一种异常,而throws可以抛出多个异常

37. final、finally、finalize 有什么区别?

final是一个关键字用来修饰类,属性,方法的,修饰的类不能被继承,修饰的属性不能被重新赋值,修饰的方法不能被重写
finally是异常的统一出口
finalize是object的一个方法,用于垃圾回收之前执行。


38. try-catch-finally 中哪个部分可以省略?

可以省略catch或者finally。catch和finally不可以同时省略。

如果没有catch语句块,try后面必须加上finally语句块

39. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

会执行,finally 会在return之前执行
(1)finally的作用就是,无论出现什么状况,finally里的代码一定会被执行。

(2)如果在catch中return了,也会在return之前,先执行finally代码块。

(3)而且如果finally代码块中含有return语句,会覆盖其他地方的return。

(4)对于基本数据类型的数据,在finally块中改变return的值对返回值没有影响,而对引用数据类型的数据会有影响。

40. 常见的异常类有哪些?

运行时异常:
NullPointerException(要 访问的变量没有引用任何对象时,抛出该 异常)
ArithmeticException(算术 运算异常,一个整数除以 0 时,抛出该异常)
IndexOutOfBoundsException (下标越界异常)。
NumberFormatException 数字格式化异常
ClassCastException 类型转换异常


非运行是异常:
SQLException 
FileNotFoundException 文件找不到异常。
IOException 
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值