java基础刷题知识点总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基础

1.object类的方法有哪些

clone() protect 创建并返回一个对象的副本

equals()用来比较某个对象是否与调用此方法的对象相等

finalize() protect

getClass() 返回一个对象的运行时类

hashCode()返回一个对象的hash值

notify()唤醒在此对象监听器上等待的单个线程。如果有多个,则随机唤醒一个

notifyAll()唤醒在此对象监听器上等待的所有线程

registerNatives() 本地私有方法,在类初始化是会调用此方法

toString() 返回当前对象的字符串表示

wait()使当前线程处于等待直到其他线程调用这个对象的notify或notifyAll方法或者超过指定的时间量

2.接口和抽象类的区别

1.首先描述接口和抽象类的特性

抽象类:是子类通用特性的集合

接口:是抽象方法的集合l

从某种意义上说抽象类包含了接口的所有功能。但是通过实现接口可以实现多继承

什么时候用抽象类和接口

1.如果一些方法必须提供默认的实现,就必须用抽象类,比如在dao层,每个类都有增删查改这几个操作,我们可以把这些操作写在抽象类里,并让抽象类提供默认的实现。

否则的话用接口

2.假如要实现多继承,则必须要用接口,java不支持多继承但是可以通过实现多个接口来解决

3.如果基本功能在不断改变,那么就用抽象类。如果不断改变基本功能并且使用接口,子类就必须不停的更改

03.抽象类是否有构造方法

抽象类有构造方法只是抽象类不能够实例化

4.Final finally finalize()方法的区别

5.Sleep()和wait()的区别

①这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

②锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS 分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

③使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,配合synchronized实现等待通信机制,而sleep可以在任何地方使用。

synchronized(x){

x.notify()

//或者wait()

}

6.short s=1;s=1+s;会报错吗?short s=1;s+=1;会报错吗?

(1)报incompatible types错误。不相容的类型错误

(2)不报错。因为s+=1相当于s=(E)(s+1),其中E为s的类型

7.Overload和override的区别

Overload是重载,它是一个类中多态性的一种表现。

Override是重写,它是子类与父类多态性之间的一种表现。

重载是指在定义多个名字相同的方法。但这些方法的返回值类型,参数类型,参数顺序,参数个数必须有一个不同,但是不能只是返回值类型不同的,因为这会使得jvm在调用方法时,不知道该调用谁

重写是覆盖掉父类的方法并重新定义一个新的方法,新的方法的返回值类型,参数类型,参数个数,参数顺序都必须跟父类中的方法保持一致。

以下是这两种定义的具体注意事项

(1)Overload 重载

1.方法的返回值类型,参数的类型,个数,顺序存在不同

2.但不能只有返回值类型

3.是针对一个类而言的

(2)override重写

1.方法的返回值类型,参数的类型,个数,顺序必须一致

2.是针对父类与子类而言的

3.定义为final的方法不能重写

4.重写的方法不能缩小包的访问权限

5.包访问权限为private的方法不能重写,否则只是在子类中定义一个新的方法

8.Java中hashtable和hashmap的区别

1.Hashtable不允许插入空的键值对,否则报错

2.Hashtable是线程安全的,所有方法均是同步的;HashMap是线程是线程不安全的。3.HashTable效率比hashmap低

9.throw和throws的区别

1.throw表示一种抛出的动作,throws表示一种状态,代表方法可能列出的抛出异常

2.throw用于方法体,throws用于方法头

3.throw只能抛出一个异常.throws后申明多个异常

10.内存溢出和内存泄漏的区

内存溢出(out of memory),是指程序在申请内存时,没有足够的内容供其使用.例如要申请一个对象却已经没有能够容纳这个对象的内存

内除泄露(memory leak)是指程序在申请内存后,无法释放掉已经申请的内存.如果频繁的出现内存泄露,最后内存会用尽而导致内存溢出.

11.String,StringBuffer 和StringBuilder的区别

可变/不可变?

String是不可变的,因为其内部的字符数组是final的,所以长度是固定的,连接字符串时实际上是创建了新的字符串对象

StringBuilder,StringBuffer是可变的,因为都继承了abstractStringBuilder ,而abstractStringBuilder 其内部是动态数组,长度不够时会自动扩容

StringBuilder是线程不安全的,StringBuffer是线程安全的,stringBuilder的效率比Strin gBuffer 高

12.抽象类和接口类中方法的访问权限有哪些?

在jdk1.8中,抽象类的成员变量,抽象方法和非抽象方法默认都是default的,意味着抽象方法的访问权限可以为default,protected,public。据说以前都是protected

接口类的成员变量永远都是public static final 成员方法永远都是public

13.Class.forname()与ClassLoader.loadClass()?

Class.forname():是一个静态方法,最常用的是Class.forname(String className);根据传入的类的全限定名返回一个Class对象.该方法在将Class文件加载到内存的同时,会执行类的初始化.

如: Class.forName("com.wang.HelloWorld");

ClassLoader.loadClass():这是一个实例方法,需要一个ClassLoader对象来调用该方法,该方法将Class文件加载到内存时,并不会执行类的初始化,直到这个类第一次使用时才进行初始化.该方法因为需要得到一个ClassLoader对象,所以可以根据需要指定使用哪个类加载器.

如:ClassLoader cl=.......;cl.loadClass("com.wang.HelloWorld");

相关文档
最新文档