Java基础语法:JVM、JRE和JDK-重载和重写-三大特性-反射-equals和==的区别-equals 和 hashCode 的关系-Object都有那些方法-基本数据类型-序列化-简述泛型

1 JVM、JRE和JDK

1.1 JVM

Java虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。

1.2 JRE

JRE 是 Java运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但是,它不能用于创建新程序。

1.3 JDK

JDK是Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。

2 重载与重写

重载:发生在同一个类中,方法名必须相同,参数类型、个数、顺序不同,返回值和权限修饰符可以不同,发生在编译时。
重写:发生在继承时,方法名和参数列表必须相同,返回值范围小于父类,抛异常范围小于等于父类,权限修饰符范围大于等于父类;父类是private修饰的话子类就不能重写改方法。

3 三大特性

3.1 封装

封装就是把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法。

3.2 继承

继承是用来扩展类的,子类可以继承父类的非私有属性和方法,增加多样性。

3.3 多态

多态已封装和继承为基础,根据运行时对象实际类型使同一行为具有不同表现形式。

4 反射

在运行状态中,对于任意一个类都能知道它的所有属性和方法,对于任意一个对象都能调用它的任意方法和属性,这种动态获取信息及调用对象方法的功能称为反射,缺点是破坏了封装性及泛型约束。

5 equals和==的区别

  1. ==是判断两个变量或实例是不是指向同一个内存空间;equals是判断两个变量或实例所指向的内存空间的值是不是相同 ;
  2. ==是指对内存地址进行比较 ;equals()是对字符串的内容进行比较
  3. ==指引用是否相同;equals()指的是值是否相同

6 equals 和 hashCode 的关系

每个对象都有默认散列码,值由对象存储地址得出。字符串散列码由内容导出,值可能相同。为了在集合中正确使用,一般需要同时重写 equals 和 hashCode,要求 equals 相同 hashCode 必须相同,hashCode 相同 equals 未必相同。

7 Object都有那些方法

  1. equals:检测对象是否相等,默认使用 == 比较,可以重写该方法自定义规则。
  2. hashCode:每个对象都有默认散列码,值由对象存储地址得出。字符串散列码由内容导出,值可能相同。
  3. toString:默认打印表示对象值的一个字符串。
  4. getClass:返回对象所属类的 Class 对象。
  5. wait:阻塞持有该对象锁的线程。
  6. notify:唤醒持有该对象锁的线程,notify 随机唤醒一个线程,notifyAll 唤醒全部线程。

8 八大基本数据类型

在这里插入图片描述

9 简述序列化

  • Java对象在JVM退出时会全部销毁,如果需要将对象持久化就要通过序列化来实现,将内存中的对象保存在二进制流中,需要时再将二进制流反序列化成对象。
  • 对象序列化保存的是对象的状态,属于属性的静态变量不会被序列化。

常见的三种序列化

Java原生序列化
Hessian序列化
JSON序列化

  • Java 原生序列化,实现 Serializabale 标记接口,兼容性最好,但不支持跨语言,性能一般。序列化和反序列化必须保持序列化 ID 的一致,一般使用 private static final long serialVersionUID 定义序列化 ID,如果不设置编译器会根据类的内部实现自动生成该值。
  • Hessian 序列化,支持动态类型、跨语言。
  • JSON 序列化,将数据对象转换为 JSON 字符串,抛弃了类型信息,反序列化时只有提供类型信息才能准确进行。相比前两种方式可读性更好。

  • 注意:序列化通常使用网络传输对象,容易遭受攻击,因此不需要进行序列化的敏感属性应加上 transient 关键字,把变量生命周期仅限于内存,不会写到磁盘。

10 简述泛型

泛型本质是参数化类型,解决不确定对象具体类型的问题,可以在类或方法中预支地使用未知的类型。

  • 好处:
    1. 类型安全,不存在ClassCastException
    2. 提升可读性,编码阶段就显式知道泛型集合、泛型方法等处理的数据类型。

11 抽象类和接口的区别

相同点

  • 都不能被实例化
  • 接口实现类或抽象类的子类都只有实现了接口或继承抽象类才能用

不同点

  • 抽象类是用来捕捉子类的通用特性的;接口是抽象方法的集合
  • 抽象类可以有定义和实现;接口只有定义,不能有方法的实现
  • 继承抽象类用extends;实现接口用implements
  • 抽象类强调所属关系;接口强调特定功能的实现
  • 抽象方法用abstract修饰,只能被public或protect修饰,不带花括号;接口成员变量默认用public static final修饰,成员方法用public abstract修饰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值