java八股文易错点(持续更新......)

在学习的过程和笔试过程中,易错的点,记录下来。

Java基础:

1、Math.round() : 四舍五入,Math.round(1.5)=2,Math.round(-1.5)=-1

2、final关键字:

  • 修饰类:表示该类不能被继承; 但是该类可以实例化对象;
  • 修饰方法:表示方法不能被重写,不希望父类的某个方法被子类覆盖/重写;
  • 修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。
  • 进阶:final 和 static 往往搭配使用,效率更高,比如用final static 修饰的一个值在其他类中被使用,不会导致类加载,底层编译器做了优化。

3、抽象类:

  • 抽象类的本质是类,可以有类的各种成员;抽象类的价值更多在于设计(模板设计模式);
  • abstract 只能修饰类和方法;
  • 抽象方法没有方法体;
  • 普通类不能包含抽象方法,抽象类可以包含抽象方法(也可以不包含)和普通方法。 当一个类中存在抽象方法,需要将该类声明为abstract 类;
  • 抽象类不能直接实例化,普通类可以直接实例化;
  • 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法(普通方法不用),除非它自己也是抽象类;
  • 抽象方法不能使用private、final、static 修饰,都是与重写违背。

注:所谓实现方法,就是有方法体!!!

4、接口和抽象类区别:

共同点:都不能被实例化,都可以包含抽象方法,都可以有默认(default)实现的方法(1.8)

  • 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
  • 构造函数:抽象类可以有构造函数;接口不能有。抽象类的构造器并不是用于创建对象,而是让字类调用这些构造器完成属于抽象类的初始化操作。
  • 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
  • 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
  • 接口不能包含普通方法,抽象类可以包含。接口只能定义静态变量(public static final),抽象类无限制。
  • 接口可以有静态方法,抽象类没有。

5、实现接口和继承类:

  • 解决的问题不同,继承的价值主要在于解决代码的复用性和可维护性;接口的价值主要在于设计,设计好各种规范(方法),让其他类去实现这些方法;
  • 接口比继承更加灵活,接口是 like a 的关系,而继承是 is a 的关系;
  • 接口在一定程度上实现代码解耦【即:接口规范性+动态绑定】。

6、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,且不需要实现接口中的方法。抽象类可继承具体类也可以继承抽象类。

7、构造器为何不能用final、abstract、static修饰?

  • 构造器不是通过继承得到的,所以没有必要把它声明为final的。
  • 一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的。
  • 构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。

JUC:

1、sleep 和 wait
共同点:wait()、wait(long) 和 sleep(long) 的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态。
不同点:

  • 方法归属不同,sleep 是 Thread 的静态方法,wait 是Object的成员方法
  • 醒来时机不同,sleep(long) 和 wait(long) 的线程会再等待相应的毫秒后醒来,而wait() 如果不被 notify 等唤醒就一直等待下去
  • 锁特性不同,wait 的调用必须先获取wait 对象的锁,sleep 无此限制,wait方法会释放锁,sleep 不会释放锁。
  • 进阶:为什么方法的归属是上面那样,wait() 是让获得对象锁的线程实现等待,重点是对象,每个对象都拥有锁;sleep() 是让当前线程暂停执行,不涉及对象。

2、synchronized 和 ReentrantLock 区别
共同点:两者都是可重入锁,可重入锁指的是自己可以再次获取自己的内部锁,加了几层锁,释放的时候也需要释放几次。
不同点:

  • synchronized 依赖于JVM,ReentrantLock 依赖于API。ReentrantLock 需要lock() he unlock() 方法配合 try/finally 语句来完成。
  • ReentrantLock 比 synchronized 功能更多:a、等待可中断,提供了一种能够中断等待锁的线程的机制;b、可实现公平锁,synchronized只能是非公平锁;c、可实现选择性通知,将线程对象注册在指定的 Condition 中,从而可以选择性的进行线程通知。

其他:

1、跨域
指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky丶Mamba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值