JAVA基础一二三

面向对象

  • 模块化开发
  • 复用性强
  • 可靠性,灵活性
  • 可读性

面向对象的特征

  • 封装:隐藏内部属性,提高可维护性
  • 继承:提高代码重用性,不修改类的情况下给类添加新特性
  • 多态:接口的多种不同的实现方式就是多态。允许子类类型的指针赋值给父类类型,把不同子类对象都当作父类来看
  • 抽象:把类的行为和实现分开

面向对象和面向过程

  • 面向过程:性能高,不用实例化类。Linux,嵌入式一般用面向过程
  • 面向对象:方便维护,复用性高,容易扩展。有封装继承多态的特性,可以设计出耦合度低的系统,更灵活

重写和重载

  • 重载 体现编译多态性,同名方法有不同的参数就是重载
    - 同一个类的不同方法
    - 参数不同
    - 返回值可以不同
    - 权限修饰符可以不同
    - 异常可以不同
    - 方法名必须相同
    - 重载是同一个类中方法之间的关系,是水平关系
  • 重写 体现运行多态性,子类父类之间
    - 子类对父类方法的重写
    - 方法名,参数,返回值必须和父类一样
    - 访问修饰符限制大于父类的方法
    - 子类抛出异常不能大于父类的异常
    - 重写是子类和父类的关系,是从上到下的垂直关系

JDK JRE JVM

  • JDK,Java开发工具包,包含了编写Java必要的编译和运行工具,包含了JRE
  • JRE,Java运行环境,包括虚拟机和丰富的系统类库,封装功能类,提高开发效率
  • JVM,提供字节码文件的运行环境

Java跨平台

  • Java源文件被编译成字节码文件
  • Java虚拟机(JVM)是跨平台的,所以字节码文件是跨平台的

Java和C++

  • 面向对象语言
  • Java没有指针,内存更安全
  • Java的类单继承,C++多继承
  • Java自动管理内存,不需要手动释放

字节码是什么

Java提供虚拟机的概念,在机器和编译程序之间加入了一个抽象的虚拟机器,虚拟机在任何平台都能提供编译程序一个共同的接口
能让虚拟机理解的代码就是字节码
每个平台的解释器不同,但是虚拟机相同。虚拟机把字节码解释给解释器,解释器再翻译成特定机器上的代码,在特定机器运行。体现了Java编译与解释并存的特点

值传递和引用传递

  • 值传递,基本类型的变量,传递的是该变量的一个副本,改变副本不影响变量
  • 引用传递,对象型变量,传递的是对象地址的副本,不是对象本身
    Java内传递是值传递,对象的传递是引用传递

String、StringBuffer、StringBuilder 的区别

  • String:只读字符串,不可更改
  • StringBuffer:可以修改,被synchronized修饰
  • StringBuilder:可以修改,单线程使用,跟StringBuffer一模一样,效率比StringBuffer高

自动拆箱自动装箱

基本类型和引用类型之间的转换

equals和==的区别

基本类型通过==判断,比较两个对象的地址是否相等
引用类型通过equals判断,比较两个对象内容是否相等

Java栈内存和堆内存

  • 存取快,仅次于寄存器
  • 数据大小和生成周期固定
  • 栈内的数据可以共享
  • 基本数据类型,指令代码都保存在栈中
  • 先进后出
  • 存取慢
  • 生存期不固定
  • 堆的数据不可以共享
  • 保存对象实例,每new一次都会创建新对象,因为堆不共享
    Object a=null; 只在栈中分配内存
    new Object(); 只在堆中分配空间
    Object a=new Object(); 在堆中分配空间,指向栈的地址
    堆是栈的子集

和C++不同,Java自动管理堆和栈的内存回收问题,GC会根据栈保存的地址定期扫描堆,优化内存,没有对应地址的直接被清空(refresh),这就是Java的垃圾回收机制

为什么要重写hashCode()方法

HashSet和equals方法判断对象是否相同是通过调用hashCode方法,不重写的话,默认创建对象的hash值不同,即使我创建的对象属性一模一样,HashSet也没办法正常去重,所以需要重写hashCode方法
阿里的开发手册里也规定了,如果自定义对象作为Map的键就必须重写equals和hashCode方法

final,finally,finalize区别

  • final是修饰符,声明属性方法和类,属性不可变,方法不能覆盖,类不能继承
  • finally是异常处理语句,表示总是执行
  • finalize是一个方法,提供垃圾收集器的资源回收

抽象类和接口的区别

  • 接口的所有方法都是抽象的,抽象类里有抽象方法和非抽象方法
  • 类可以实现很多接口,但是只能继承一个抽象类
  • 接口中所有变量都是常量,抽象类可以包含常量和普通变量
  • 接口是绝对抽象的,抽象类可以通过静态方法return实例化

IO

IO操作就是Java进行输入和输出操作,分为字节流和字符流

Java序列化

把Java对象转化为字节序列的过程叫序列化
把字节序列恢复成Java对象的过程叫反序列化

error和exception的区别

  • Error,系统级的错误,Java运行环境错误或者硬件问题
    - 比如内存不足
    - 程序修不了,虚拟机抛出的问题
  • Exception,需要程序处理的异常
    - RuntimeException(运行时异常),程序不能恢复的异常,错误的操作导致的异常,编译器不检查这些异常
    - CheckedException(受检查异常),程序可以处理的异常, 程序可以修复

反射的实现

  • 构造一个类的对象

  • 判断类的成员变量和方法

  • 调用对象的方法

  • 生成动态代理

  • Spring IoC容器通过反射创建对象,注入依赖属性

  • Spring MVC的请求调用对应方法

什么是注解

元数据,描述数据的数据就是注解,添加注解有助于程序的阅读

创建对象

  • new一个对象
  • 通过反射解析一个类的对象
  • 通过clone创建对象
  • 使用反序列化创建对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值