JAVA问题总结第一期

1、超过一个字节的基本类型,序列化都涉及到字节序问题,JAVA中short,int,long,float,double怎么转换字节序

即Big Endian(大字节序列)和Little Endian(小字节序列)

 

对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;从字节流创建对象的相反的过程称为反序列化。
可以理解为序列化是将数据转换成byte[]的表示方式。

Java各种数据类型序列化

int转byte数组以及相关原理

Java中的“>”、“>>”、“>>>”三个符号的区别

2、基本类型与引用类型的区别

 

1、存储位置

【基本变量类型】在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的

【引用变量类型】其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址

2、传递方式

【基本变量类型】在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递

【引用变量类型】引用数据类型变量,调用方法时作为参数是按引用传递

Java中的基本数据类型和引用数据类型的区别

3、StringBuffer有什么用

 

适用多线程下在字符缓冲区进行大量字符串拼接操作的情况

Java中的String,StringBuilder,StringBuffer三者的区别

4、为什么处理业务多数情况下用BigDecimal而不用double

 

1、精度损失,带小数的十进制数字的二进制浮点数表示形式是近似值,而不是绝对值

2、浮点数适用于快速大量的科学计算,BigDecimal用于精准金额的业务计算

3、BigDecimal有可直白地表示如何执行舍入,并且有许多不同的舍入方法

5、null与""的区别

 

1、NULL代表声明了一个空对象

2、""代表声明了一个对象实例,实例的值为一个长度为0的空字符串

java中NULL与“ “的区别

6、String对象是否可变

 

1、java.lang.String类型在实现时,其内部成员变量全部使用final来修饰,保证成员变量的引用值只能通过构造函数来修改;

2、java.lang.String类型在实现时,在外部可能修改其内部存储值的函数实现中,返回时一律构造新的String对象或者新的byte数组或者char数组;

第二点的重要性在于,假如通过String类型的toCharArray方法可以直接访问String类型内部定义的char数组,那么即便String类型内部的char数组使用了final来修饰,也仅仅保证这个成员变量的引用不可变,而无法保证引用指向的内存区域不可变。

由上述两点,保证外部不可能修改java.lang.String类型对象的内部属性,从而保证String对象是不可变的。

3、String对象是不可变的,但这仅意味着你无法通过调用它的公有方法来改变它的值,但是可通过反射机制绕过正常的API,同样的可以改变枚举值

String为什么不可变

7、static方法与instance方法区别

 

【定义】

被static修饰的方法为静态方法,之外的方法为实例方法,静态方法可直接使用类调用,实例方法必须创建实例后才能调用

【区别】

1、类外部调用:静态方法可直接使用类调用,实例方法必须创建实例后才能调用。

2、类内部调用:实例方法内可以调用静态方法,但是静态方法只能调用静态方法,不能调用实例方法

静态方法与实例化方法的常见误区

8、覆盖、重载、多态的概念

 

【重载】

重载(overload) 是在一个类中,方法名字相同,而参数不同(返回类型,修饰符,异常类型可同可不同),最常见是构造方法的重载,每个重载方法(或构造函数)都必须有一个独一无二的参数类型列表

【覆盖/重写】

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。重写的好处在于子类能够根据需要实现父类的方法。

【重载和重写的区别】

区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)

【多态】

多态意味着一个对象有多重特征,允许将父对象设置成一个或多个与它相等的子对象

9、接口和抽象类的区别

 

1、抽象类要被子类继承,接口要被类实现

2、抽象类主要用来抽象类别,而接口用来抽象功能

3、抽象类可有具体的方法和属性,接口只能有抽象方法和公共静态常量

你可能感兴趣的:(JavaSE)