Java中的数据类型有哪些?分为哪两大类?
分为基本数据类型和引用数据类型。
基本数据类型有:整数:byte1字节,short2字节,int4字节,long8字节
浮点数:float4字节,double8字节,
字符型:string
布尔型:boolean
引用数据类型:类,对象,方法
引申自动装箱和自动拆箱
概念是:自动装箱:编译器自动把基本数据类型转换为对应的包装类;自动拆箱:编译器自动把包装类转换为基本数据类型。作用是:增强代码的可读性,并减少了手动转换的步骤,方便了开发人员。常见于:List集合通过自动装箱将基本数据类型int转换为Integer存入集合。底层实现:通过调用包装类的valueOf()和xxxValue()方法。注意点:性能影响和NPE
==和equals()区别
==:用途:用于比较两个对象是否指向同一个对象实例。比较对象:当用于对象时,比较的是对象的内存地址。基本类型:用于比较基本数据类型时,比较的是它们的值。
equals():在Object类中定义,默认情况下与==等价(比较内存地址)。但是许多类中重写了此方法(String和Integer),提供基于内容的比较。
访问修饰符的范围区别
public:任何类和对象
protected:一个包内和不同包内子类
默认:同一个包内
private:本类内部
static修饰的静态变量和非静态变量的区别
静态变量存储在方法区中的静态存储区。类加载时分配内存
全局共享,所有的类的实例和静态方法都可以访问,且修改静态变量会影响所有实例
可以通过类名.变量名的方式来访问
非静态变量存储在堆内存中,与实例的生命周期相同
必须通过实例对象来访问
方法重载(Overloading)和方法覆盖(Overriding)有什么区别?
方法重载(Overloading)在同一个类中,多个方法具有相同的名字,但参数列表不同。是编译时多态的体现。通过参数的不同来区分方法。比喻餐厅中点水时,点普通水、柠檬水、冰块水时,即参数不同服务员端上来的水不一样,即方法不一样,执行结果也不同。
方法覆盖(Overriding)在子类中重新实现父类的方法,并且方法签名保持一致。是运行时的多态。允许子类通过自己的实现覆盖父类的方法。比喻猫咪和狗子都属于动物类,即父类,在父类中定义了叫这个方法,在猫咪和狗子两个子类中覆盖父类中的叫方法,猫咪叫声为meow,狗叫声为bark。
java中的异常处理机制
编写代码时将可能抛出异常的代码块放在try中,后面添加一个或者多个catch块来捕获并处理可能发生的不同类型的异常,也可选在try块和catch块后加finally块来执行必要的清理代码。在方法签名中可以使用throws子句声明方法可能抛出的异常。
解释java中泛型及其作用
是一种通过参数化类型来增强代码重用性和类型安全性的机制。使得类、方法、对象能够操作指定的对象而不需要指定具体的类型。作用:可以让代码在编译时检查类型,避免了运行时错误,增强了代码的复用性,避免强制类型转换。泛型的上边界,限制它可以接受的类型范围使用extends关键字,这样泛型参数就只能是指定类或其子类的类型。下边界。使用super关键字,表示尚不确定的类型。类型擦除:泛型在编译时通过类型擦除实现,运行时泛型的类型参数会被擦除,转换为原始类型。泛型的作用:提供类型安全的代码,增强代码的可用性,避免强制性类型转换和运行时错误。
String类型为什么是不可变的
带来的优点:线程安全,数据安全,性能优化(常量池),提高效率
如何保证不可变:String类的字段是final,类中没有提供修改的方法,每当对String进行修改时,都会生成一个新的String对象,而不是修改原来的对象
带来的影响:性能方面,字符串频繁修改的场景下,因为每次修改都会创建一个新的String类,为了优化性能,通常可以用StringBuilder或StringBuffer类。
引申String、StirngBuffer、StringBuilder的区别
String生成不可变的字符序列,特点有不可变性,线程安全,需要考虑效率问题,使用场景有固定内容,常量池中的字符串和不需要改变得、较小的字符串处理操作;StringBuilder是一个可变的字符序列,允许在原有字符上进行修改,特点有可变性,线程安全,由于其线程安全性,性能相对较低使用场景有多线程环境下进行字符串拼接或者修改是使用,保证线程安全的情况下,需要进行字符串频繁修改的场景;StringBuilder与StringBuffer类似,也是一个可以变更的字符序列,但是线程不安全,适合单线程环境下使用。特点可变性,线程不安全,性能较高,使用场景适合单线程环境下频繁修改字符串

1192

被折叠的 条评论
为什么被折叠?



