Java面试题和笔记的分享
应用介绍
1、JAVA中的几种数据类型是什么,各自占用多少字节。
Java语言提供了八种基本数据类型。六种数据类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
- byte:1字节,表示范围是-128~127之间。
- short:2字节,表示范围是-32768~32767之间。
- int:4字节,表示范围是负的2的31次方到正的2的31次方减1。
- long:8字节,表示范围为负的2的63次方到正的2的63次方减1。
- float:4字节,表示范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
- double:8字节,表示范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
- boolean:只有true和false两个取值。
- char:2字节,存储Unicode码,用单引号赋值。
**2、String类能被继承吗,为什么。**
不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。
```java
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
// 省略...
}
```
**3、String,StringBuffer,StringBuilder的区别。**
String为字符串常量(因为内部数组value[]有final修饰),而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的,因为StringBuffer在append()方法上添加了synchronized修饰。
String,StringBuffer,StringBuilder都被final修饰,不能继承。
String变量创建后是放入方法区的常量池(或者常量池)中,而StringBuilder和StringBuffer则是存入堆中。
构造String对象的方式有很多,String的内存分配比较特殊:
- 方式一:String str1="123";
通过引号直接创建字符串对象,先会从常量池中判断是否存在"123"对象,如果不存在,则会在常量池中创建该对象,并且返回常量池中"123"对象的引用给str;如果之前常量池存在"123"的话,则直接返回常量池中"123"的对象引用。
- 方式二:String str2=new String("123");
首先"123"是一个常量字符串,因此会先在常量池创建"123"字符串对象,然后在堆中再创建一个字符串对象,将常量池中的"123"字符串复制到堆中新创建的对象字符数组中,因此该方式不仅会在堆中,还会在常量池中创建"123"字符串对象。
- 方式三:String str3="123".intern();
该种方式通过intern方法返回一个字符串引用,intern方法是一个native方法,当常量池中存在"123"字符串常量时,则直接返回该常量池中的字符串引用;若不存在,则会先在常量池中创建"123"字符串对象,然后返回新创建对象的引用,与方式一类似。该方法常用于将某些经常访问的字符串对象保存在常量池中,避免经常创建对象。
方式四:String str4=str2.intern();
该种方式是在方式二基础上进行的,intern 方法会先判断常量池中是否存在与str2 相同字符串的对象,若有,则返回该引用;若无,则在常量池创建一个引用(CONSTAT_String_info)指向 str2,然后返回该引用,实际上返回的是 str2 的引用。
具体可以参考这篇文献:[String 对象内存分配(常量池和堆的分配)](https://blog.csdn.net/Mypromise_TFS/article/details/81504137)
**4、ArrayList和LinkedList有什么区别。**
- ArraryList是基于动态数组的数据结构,LinkeList是基于链表的数据结果(LinkedList是双向链表,有next也有previous)。
- 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
**5、讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段。当new的时候,他们的执行顺序。**
Java程序的初始化一般遵循3个原则(优先级以此递减):
- 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次。
- 父类优先于子类进行初始化。
- 按照成员变量的顺序进行初始化。
当new时,他们的执行顺序为:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。
。。。。。。。想了解详情请下载附件
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: [email protected] 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » Java面试题和笔记的分享
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
B+Tree.png | 36.05 KB | 2020-06-28 |
bean准备工作.png | 24.37 KB | 2020-06-28 |
bean初始化工作.png | 55.06 KB | 2020-06-28 |
BTree.png | 34.87 KB | 2020-06-28 |
catch多个异常情况.png | 41.02 KB | 2020-06-28 |
CGLIB反编译.png | 5.38 KB | 2020-06-28 |
DispatcherServlet工作流程.jpg | 359.06 KB | 2020-06-28 |
DNS查询.png | 74.76 KB | 2020-06-28 |
HashMap的Hash冲突.png | 68.32 KB | 2020-06-28 |
HashMap的PUT方法.jpg | 279.50 KB | 2020-06-28 |
HTTPS加密.png | 245.94 KB | 2020-06-28 |
HTTP响应报文.jpg | 26.61 KB | 2020-06-28 |
HTTP请求报文.jpg | 27.79 KB | 2020-06-28 |
JVM内存结构.png | 24.94 KB | 2020-06-28 |
MySQL主从复制.png | 167.61 KB | 2020-06-28 |
SSH加密.png | 278.94 KB | 2020-06-28 |
String变量存储位置.jpg | 42.71 KB | 2020-06-28 |
TCP报文段.png | 99.98 KB | 2020-06-28 |
七层参考网络模型.png | 42.13 KB | 2020-06-28 |
三次握手.png | 11.46 KB | 2020-06-28 |
依赖关系.png | 14.70 KB | 2020-06-28 |
关联关系.png | 12.34 KB | 2020-06-28 |
四次挥手.png | 436.17 KB | 2020-06-28 |
实现关系.png | 8.81 KB | 2020-06-28 |
线程状态.png | 193.32 KB | 2020-06-28 |
组合关系.png | 9.47 KB | 2020-06-28 |
继承关系.png | 17.74 KB | 2020-06-28 |
聚合关系.png | 9.47 KB | 2020-06-28 |
虚拟内存与物理内存关系.png | 102.14 KB | 2020-06-28 |
进程状态.png | 110.11 KB | 2020-06-28 |
发表评论 取消回复