Java01-基础知识

57 阅读5分钟

Java基础知识

基本数据类型

java内8种基本数据类型:

  • byte(位) -2^7~2^7-1 ,默认为0
  • short(短整数) -2^15~2^15-1 ,默认为0
  • int(整数) -2^31~2^31-1 ,默认为0
  • long(长整数)-2^63~2^63-1 ,默认为0L
  • float(单精度)-2^31~2^31-1 ,默认为0.0f
  • double(双精度)-2^63~2^63-1 ,默认为0.0d
  • char(字符)0~2^16-1
  • boolean(布尔值) true false, 默认为false。

自动类型转换

  • 基本数据类型运算中,需要转换成相同类型才能运算
  • 转换只能由低到高,不可逆
  • byte,short,char—> int —> long—> float —> double

引用类型

引用类型指向一个对象,指向对象的变量是引用变量,所有引用类型的默认值都是null。

装箱和拆箱

装箱:基本数据类型转换为包装类,例如:Integer.valueOf();

拆箱:包装类转换为基本类型,Integer.intValue();

  • 基本数据类型的常量池是-128到127之间
  • 包装类在缓存范围内的包装类可以自动拆箱
  • 基本数据类型在缓存范围外自动装箱
  • 当比较大小时,会进行类型转换,进行比较
  • 特殊类型:double,float 没有使用常量池缓存,声明和初始化都要装箱
  • boolean和Boolean类型一样,都会自动装箱

字符串

面向对象特性

  • 继承

    • 通过继承,子类可以获得父类的属性和方法,使得子类和父类有相同的行为
    • 子类能继承父类的非private方法和属性
    • 子类可以拥有自定义的方法和属性,即是对父类的扩展
    • 子类可以用自己的方法重写父类的方法;
    • java支持单继承,使用extends关键字
    • super:指向父类实例, 用于父类属性和方法的访问;this:指向当前应用。
    • 优点:提高代码复用性,易于建立模型
    • 缺点:增加代码耦合性
  • 封装

    • 指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法
    • 良好的封装能够减少耦合
    • 类内部的结构可以自由修改
    • 可以对成员变量进行更精确的控制
    • 隐藏信息,实现细节
  • 多态

    • 定义:同一个行为可以表现多种形式和形态

    • 同一个接口,不同实例可以执行不同操作

    • 多态实现条件:

      • 继承
      • 重写
      • 动态绑定
    • 优点:

      • 消除类耦合
      • 可扩充,可扩展
      • 灵活,简化
    • 多态实现方式:

      • 重写
      • 接口
      • 抽象类和抽象方法
    • 重写和重载

      • 方法重载是一个类的多态性表现
      • 方法重写是父类和子类之间的多态表现

接口

定义:是一种抽象的类型,是一些列抽象方法的集合;通过interface声明,类可以通过实现接口的方式,继承接口的方法;

  • 接口不能实例化
  • 接口没有构造方法
  • 接口所有的方法都是隐式抽象的,默认加上public abstract,除了java8后的default方法
  • 接口不能包含成员变量,除了静态变量外;
  • 接口支持多实现,接口的方法不能在接口中实现,只能实现的类去实现。

抽象类

定义: 在面向对象中,所有概念都可以用类来描述,有些对象是具体的,确定的,但有些是没有足够的信息来描述一个对象,这类型就是抽象类。

  • 抽象类不能被实例化;
  • 抽象方法用abstract修饰,只有个方法名称和入参,没有方法体。
  • 如果一个类包含抽象方法,则一定是抽象类,反过来,抽象类可以没有抽象方法
  • 任何子类都写实现父类的抽象方法,除非子类也是抽象类。

异常体系

java中异常类型都由Throwable派生,分为Error类和Exception两类;

  • Error: 表示JVM自身运行异常,这里异常无法程序修正

  • Exception: 代表程序运行中发生了意料之外的事情,这些意外可以被异常处理机制处理;

    • RuntimeException(不检查异常): 程序设计错误,数组越界,数值异常等,编码时期不用手动检查;
    • 非RuntimeException(检查异常):这一类异常的发生通常由外部因素导致,是不可预知和避免的。例如,IO异常、类型寻找异常等
  • 自定义异常默认会继承 Exception 或者 RuntimeException,继承于 Exception 的异常默认是受查异常,继承于 RuntimeException 的异常默认是非受查异常

常见面试题:

1.int和Integer的区别

  1. 节本数据类型和包装类,Integer 必须实例化才能使用,默认是null ,int 默认是0
  1. Integer当变量值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同;

2.接口和抽象类的区别

  1. 抽象类不能被实例化只能继承;
  2. 抽象方法一定是抽象类,抽象类不一定都是抽象方法;
  3. 抽象类方法只能public和protected;
  4. 子类继承抽象类,必须实现抽象方法;
  5. 接口只能定义,不能有方法体,default方法体除外,抽象类可以定义和实现,方法在抽象类中实现;
  6. 抽象类只能继承一个,接口可以实现多过;
  7. 接口的成员变量必须是public static final,不能被修改,默认需要初始化,抽象类的成员变量默认是default, 抽象方法不能private、static、synchronized和native修饰.

3.== 和equal的区别?

==比较的值,对于基本类型比较的是其存储的值类型(在缓存范围内),

==对于引用类型比较的引用的地址是否相等;

equal比较的是是否是同一个对象,不能比较基本数据类型