Java笔记-一些概念区分

1、Error和Exception的区别

异常的分类:

  • 错误Error
  • 异常Exception:
    编译时(检查)异常:无法提前预见的异常(文件不存在等)
    运行时异常:递归调用、空指针、数组下标越界等编译时不能发现的异常

相同点:

Java中异常被当作对象处理,Error和Exception的父类都是Throwable类

区别:

(1)Error:一般是指与虚拟机相关的问题,如系统崩溃、内存空间不足、栈溢出等,这类错误会导致应用程序中断,仅靠程序本身无法预防和恢复
(2)Exception:指程序可以处理的异常,可以捕获(try-catch\throws)并抛出(throw new),可能恢复的异常

2、重载和重写的区别

重载

功能类似,可以使用相同的名字定义不同的方法,如加法(整数相加、浮点数相加)
(1)同一个类中,方法名相同,形参列表不同(参数类型、参数个数、参数顺序)
(2)static方法可以重载
(3)早绑定,编译期间可以确定调用地址
(4)构造器只能重载不能重写
(5)final方法可以被重载和继承

重写

(1)子类重写父类的方法(不在同一个类):子类根据自身需求,定义自己的行为
(2)需要使用@Override注解,重写的方法名和形参列表相同
(3)权限(修饰符)大于等于父类,private除外(不能重写)
(4)异常小于等于父类
(5)返回值类型优先级小于等于父类(void-void,A-A或A子类,基本数据类型-基本数据类型)
(6)static方法不能重写,因为static是随类加载,不能被覆盖
(7)final方法不能被重写

3、类和接口的区别

(1)类extends单继承,关键字是;接口implements是多实现,多继承
(2)类可以实例化(抽象类不行),接口不能直接实例化
(3)类中方法的修饰符没有限制,接口中有限制:

  • 接口中属性是public static final;
  • 接口中方法是abstract时,无方法体
  • 接口中方法是default、static时,有方法体

4、抽象类和接口的区别

(1)抽象类是根源的抽象,如人可以分为男人和女人;接口是动作的抽象,叫声可以有猫叫和狗叫
(2)抽象类是单继承,接口是多实现(因为可以有多个动作)
(3)抽象类不能被实例化(需要子类继承此抽象类完成相关操作),但抽象类有构造器,便于子类实例化调用

5、abstract关键字

(1)修饰类(不能修饰final类,final类不能被继承)和方法(抽象方法只有方法声明,没有方法体)
(2)不能修饰构造方法和属性(构造器只能重载不能重写)
(3)不能修饰private、static、final方法,因为如果修饰了,private、static、final 方法不能被重写
(4)抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
(5)子类继承父类后,如果子类重写了父类(包括直接 / 间接父类)的所有抽象方法,子类才可以实例化
(6)子类继承父类后,如果子类没有重写父类的所有抽象方法,则子类也属于抽象类,需要用abstract声明,不能被实例化

6、final关键字

final的意义是最终的,不可改变的
(1)修饰变量:就作为常量,值不可变
(2)修饰对象,值可以变,引用不变
(3)修饰方法:不可被重写
(4)修饰类:不可被继承
在这里插入图片描述

7、如何调用接口的方法

(1)static静态方法:InterfaceA.method()
(2)default默认方法:InterfaceA.super().method()
(3)接口的实现类如果已经重写了接口的default方法,就调用重写后的方法
(4)类优先原则:类同时继承了类和实现接口时,且父类和接口声明了同名同参数的方法,子类在没有重写该方法时,默认调用类的方法
(5)实现类实现了多个接口,且多个接口均定义了同名同参数的方法,子类没有重写这些方法时,调用时会报错

8、==和equals的区别

==运算符: 如果是基本数据类型,则比较存储的值是否相等;如果是引用数据类型,则比较的是引用指向对象的地址是否相等(是否是同一个对象)
equals是Object的方法:不能用于比较基本数据类型,没有重写时比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。

  • 比较的类没有重写equals,比较的是引用的类型变量指向的地址
  • 比较的类重写了equals(如String类重写了equals),则比较的是对象的内容

9、equals和hashcode的区别

equals:Object类的方法,默认情况下比较的是对象的地址,重写后比较的是对象的内容
hashcode:Object的方法,返回一个哈希值,同一个对象的hash值一定相等,不同对象的hash值可能相等
因此两个对象比较时,如果equals相等,hashcode一定相等;equals不同,hashcode可能不同;hashcode相等,equals不一定相等。

10、int和Integer的区别

(1)int是基本数据类型,Integer是int的包装类
(2)int不需要实例化,Integer使用需要new Integer进行实例
(3)int直接存储数据,Integer是对象引用
(4)int默认是0,Integer是null
(5)Integer在-128~127之间比较用==,超出范围使用equals

11、数组和链表的区别

数组:由栈分配,存储区间连续,查询简单,增删困难,空间大小固定,不能动态扩容
链表:在堆中分配,物理空间不连续,查找效率低,增删快,空间大小可以动态扩展,内存利用率高

12、Hashcode如何计算索引key的位置

设数组长度是length=2^n
(1)取模,hash%(2^n-1)。
缺点:hash值为负数时,计算有误,且与位运算相比,%慢
(2)位运算,用hash&(length-1);
2^n-1:二进制全为1

13、进程和线程的区别

进程:
1、是操作系统进行调度的基本单位,资源分配的最小单元。一个程序的运行就是一个进程。

线程:
1、指的是处理器进行资源调度的基本单位,也是程序执行的最小单位,一个进程包括一个或多个线程。

java默认有两个线程:main和GC

14、并发和并行的区别

并发编程是为了充分利用CPU资源
并发:同一时刻多个线程访问同一个资源(多线程资源共享),比如抢票和秒杀
并行:多个线程一起执行,互不影响。比如泡方便面,可以在烧水的同时,将调料放入碗中

15、用户线程和守护线程

用户线程:自定义线程
守护线程:后台中的特殊线程,比如垃圾回收,守护线程的唯一目的是服务用户线程
使用Thread.currentThread().isDaemon()可以判断线程是否是守护线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值