JAVA SE基础知识点复习-----看到什么记什么

1.Java中抽象类和接口中均不能定义静态的抽象方法

static修饰符修饰的方法和变量属于类方法类变量,在JVM类加载过程的准备过程会为其赋值,值为对应类型的0值,比如对象就是null,int就是0,而抽象类不能被实例化,所以就不能分配内存,二者矛盾,接口同理。

2.抽象类不一定有抽象方法

静态static是属于字节码的。一个抽象类可以没有抽象方法,使用abstract只是为了不被实例化。以上两点可以说明,静态方法只要有字节码存在就可以运行,所以抽象类中可以有静态方法。

3.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,该说法是否正确,为什么?

不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:

  1. 如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同
  2. 如果两个对象的hashCode相同,它们并不一定相同
    你可以不按照规定这么做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降

4.final,finally,finalize有什么区别?

  • final:

    • final修饰类,表示该类不可以被继承
    • final修饰变量,表示该变量不可以被修改,只允许赋值一次
    • final修饰方法,表示该方法不可以被重写
  • finally:

    • finally是java保证某些代码一定要被执行的一种机制。
  • finalize:

    • finalize是Object的一个方法,它的目的是保证对象在被垃圾收集前完成特定资源的回收。不过finalize已经不推荐使用,JDK9已经标记为过时。

5.内存泄漏和内存溢出

内存泄漏:其实就是当我们在创建对象或者是变量之后,并且该对象或者变量在程序中都不再使用了,但是又没有办法回收这些没用的对象和变量。而且还一直占用着系统的内存空间,此时的现象就是内存泄漏

解决:

  • 我们在使用静态变量的时候尽量减少对静态变量的使用,因为静态变量是存储在方法区(也就是永久代),不会被回收
  • 如果在程序中有不用的对象,应该及时进行释放。

内存溢出:其实就是当我要申请一块内存的时候,但是此时虚拟机不能够给我提供这么大的内存,就说明内存溢出了,比如出现OutOfMemoryError,StackOverflowError 这种错误信息的时候

解决:

  • 修改 JVM 启动参数, 直接增加内存。 (-Xms, -Xmx 参数一定不要忘记加。一般要将-Xms 和-Xmx 选项设置为相同, 以避免在每次 GC 后调整堆的大小; 建议堆的最大值设置为可用内存的最大值的 80%)
  • 根据日志进行分析哪里的问题所在,进行排查
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值