Java基础面经集合(一)

1 Java语言特点

Java语言是面向对象的语言,一切皆对象。
面向对象语言的三大特征:封装、继承、多态

  • 封装:将数据隐藏,只提供操作数据的方法
  • 继承:子类继承父类的属性及方法
  • 多态:分为编译时多态和运行时多态,编译时多态指函数重载,运行时多态指父类引用执行子类对象。父类作为参数,可以传入多种子类对象,只有运行时才知道调用的是具体哪个子类中的方法。

还有一个特征是抽象,将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象,抽象出属性和行为。

2 函数重载

Java允许同一个类中出现同名的方法,但是要求参数列表不同。
参数列表指参数类型、参数个数。
返回值不同不能视为函数重载

3 基本数据类型

Java中有8中基本数据类型

  • 整型(4种):byte,short,int,long。分别占1,2,4,8个字节
  • 浮点型(2种):float,double。分别占4,8个字节
  • 字符型(1种):char。占2字节
  • 布尔型(1种):boolean。占1字节
    Java中的整型都是有符号类型的
    字面值赋值时,整型默认为int类型,浮点型默认为double类型,注意溢出。可以加后缀定义float和long这些

4 常量

使用final修饰,只能一次赋值,后续不能赋值。

5 instanceof

只能用于判断对象是否属于该类,不能用于基本数据类型

public static void main(String[] args) {
    int i = 10;
    System.out.println(i instanceof Object);
}

编译报错

public static void main(String[] args) {
    String str = "";
    System.out.println(str instanceof Object);
}

返回true

public static void main(String[] args) {
    System.out.println(null instanceof Object);
}

null返回的是false

6 包装类

基本数据类型的包装类存在自动装箱和自动拆箱

Integer integer = 30;
int i = integer;

第一行将基本类型自动装箱成包装类,第二行将包装类对象自动拆箱成基本数据类型。

java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

反编译字节码文件,装箱时使用的是valueOf方法。

java/lang/Integer.intValue:()I

自动拆箱使用的是initValue方法
每个包装类有其对应的方法实现自动装箱和自动装箱。

7 为什么设计包装类

Java是面向对象设计语言,包装类的设计就是为了解决基本数据类型具备面向对象特性。有了包装类之后,基本数据类型可以构造成包装类,从而调用对象的方法,作为对象传递等。
除此之外,还有其他的功能,其一就是可以通过包装类的方法将string字符串转换成对应的基本数据类型,其二就是使得可以实现泛型编程,像集合中就用到了很多包装类。因为集合的泛型参数是Object,要包含各种对象,就得使用包装类而不能使用基本数据类型。
总之,包装类是为了更好的面向对象编程而设计的。

8 Integer的缓存区

public static void main(String[] args) {
    Integer i1 = 127;
    Integer i2 = 127;
    Integer i3 = 128;
    Integer i4 = 128;
    System.out.println(i1 == i2);
    System.out.println(i3 == i4);
}
输出
true
false

自动装箱时,调用valueOf方法,这个方法会存在一个缓冲区,-128-127的对象只会存在一个,如果还有则直接将引用指向缓存区的对象。
超过这个范围,则会创建新对象

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

9 重载和重新

重载是指一个类中的同名方法,参数列表不同,这表示不同的方法。不能通过返回值类型来判断重载。通常称为编译时多态。
重写是指拥有继承关系的父类和子类中,子类重写父类的同名方法。重写有两同两小一大的规则

  • 方法名相同
  • 参数列表相同
  • 抛出的异常小于等于父类中的方法
  • 返回值类型小于等于父类中方法的返回值(基本数据类型和void类型必须相同)
  • 访问权限大于等于父类方法的访问权限

10 equals和==

==比较的是内存中的地址,判断是不是同一个对象。

  • 比较的是操作数两边是不是同一个对象
  • 两边必须是同一类型才能编译过(可以是父子类型)
  • 比较的是地址,基本数据类型比较的是值
    equals比较两个内容的对象是否相等,是Object中的方法,Object中默认是==号比较。很多类都重写了equals方法,用于比较内容是否相等。
    如果有常量,则将常量放在前面,否则调用equals可能的是null对象,会报空指针异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值