Java基础知识

JVM JDK JRE

  • WORA(Write once, run anywhere)从源代码到运行: .java文件->JDK中的javac编译->.class文件->JVM->机器可执行的二进制机器码

  • JDK = JRE +编译器( javac) + 工具(javadoc和jdb)

  • JRE(运行时环境) = JVM + Java类库 +Java命令

Java与C++

  • 指针
  • 多继承
  • 内存管理(GC)

基本数据类型

基本类型 大小(bits) min max 包装类
boolean - - - Boolean
char 16 Character
byte 8 -128 127 Byte
short 16 -215 +215-1 Short
int 32 -231 +231-1 Integer
long 64 -263 +263-1 Long
float 32 IEEE754 IEEE754 Float
double 64 IEEE754 IEEE754 Double
void - - - Void

重载(overload)和重写(override)

  • overload: 同一个类,方法名必须相同,参数列表不同,返回值和访问修饰符可不同,发生在编译时
  • override: 子父类中,方法名和参数列表必须相同,返回值范围小于等于父类,抛出异常小于等于父类,访问修饰符大于等于父类(父类方法private时子类不能重写该方法)

String, StringBuffer, StringBuilder

  • String: 底层是private final char value[],因此不可变。线程安全。
  • StringBuffer, StringBuilder: 底层继承AbstractStringBuilder,没有final修饰,因此可变。 StringBuffer线程安全,效率较低,适用于多线程,出现于jdk1.0。StringBuilder非线程安全,效率比buffer高10-15%,适用于单线程,出现于jdk1.5。

接口与抽象类

  • 接口方法默认public,所有方法在接口中不能实现(Java8开始接口方法可以有默认实现),抽象类可以有非抽象的方法
  • 接口中只能有static、final变量,抽象类不一定
  • 一个类可以实现多个接口,但只能实现一个抽象类
  • 接口方法默认public修饰,为了被重写,抽象方法只可以用除private以外的修饰符修饰
  • 抽象是对类的抽象,接口是对行为的抽象

对象实体与引用

  • 对象实例在堆内存, 对象引用在栈内存
  • 一个对象引用可以指向0或1个对象, 一个对象可以有n个引用指向它

==和equals(重要)

  • ==: 基本数据类型比较值是否相等, 引用数据类型比较内存地址
  • equals: 两种情况:
    1. 类重写了equals方法, 一般来说, 通过重写equals方法来比较两个对象的内容是否相等
    2. 类未重写equals方法, 用Object类中equals方法,即等价于==

hashCode与equals(重要)

面试题:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?

  • hashCode() 的作用是获取哈希码(散列码),实际上返回一个int整数。这个哈希码作用是确定该对象在哈希表中的索引位置。
  • 如果两个对象相等,则hashCode一定也相同
  • 两个对象相等,对两个对象分别调用equals方法都返回true
  • 两个对象有相同hashCode值,他们不一定相等
  • 因此,equals方法被覆盖过,则hashCode方法也必须被覆盖
  • hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

进程与线程

  • 进程是系统运行程序的基本单位
  • 一个进程在执行过程中可以产生多个线程

线程的基本状态

状态名称 说明
NEW 初始状态,线程被构建,尚未调用start()
RUNNABLE 运行状态,操作系统中就绪和运行状态的统称
BLOCKED 阻塞状态,表示线程阻塞于锁
WAITING 等待状态,等待其他线程通知或中断
TIME_WAITING 超时等待状态
TERMINATED 终止状态,表示当前线程执行完毕

final

  • 修饰变量:基本数据类型:初始化后不能改;引用类型:初始化后不能指向其他对象
  • 修饰类:不能被继承。final类中的所有成员方法都会被隐式地指定为final方法
  • 修饰方法:不能被覆盖。类中所有private方法都隐式地指定为final

异常(Exception)与错误(Error)

  • 异常能被程序本身可以处理,错误是无法处理

transient关键字

  • 作用:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。transient只能修饰变量,不能修饰类和方法。

获取键盘输入的两种方法

  • Scanner

    1
    2
    3
    Scanner input = new Scanner(System.in);
    String s = input.nextLine();
    input.close();
  • BufferedReader

    1
    2
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
    String s = input.readLine();

IO流

  • BIO (Blocking I/O): 同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。
  • NIO (New I/O): NIO是一种同步非阻塞的I/O模型
  • AIO (Asynchronous I/O): AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO模型。
0%