final刷题总结:
final修饰变量(属性):
1、final修饰变量能被显示地初始化并且只能初始化一次;final修饰符通常和static修饰符一起使用创建类常量。
2、final关键字修饰一个变量时等同于常量,引用变量不能变(不能被再次赋值),引用变量所指向的对象中的内容还是可以改变的。
final修饰类:
1、final修饰的类是最终类,final类不能被继承和改写。
2、final不能修饰抽象类,抽象类一般都需要被继承
3、final类的方法能否被同一个包的类访问不是final决定
final修饰方法:
1、final修饰的方法可以被重载但不能被重写
2、final修饰的方法中的参数,称为最终参数
抽象类刷题知识点总结:
抽象类:
1、抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
2、抽象类可以不包含抽象方法,但是有抽象方法的类一定要声明抽象类。(只要包含一个抽象方法的类,该类必须要定义成抽象类,不管是否还包含有其他方法。)
3、抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
4、构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
5、抽象类的子类必须给出抽象类中的抽象方法的具体实现(抽象方法必须由子类来进行重写),除非该子类也是抽象类。
6、抽象类不允许多继承
7、抽象类可以有构造函数
8、abstract 不能与private、static、final或native并列修饰同一个方法。
9、定义的抽象方法没有实体时候,大括号必须省略。
10、JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
抽象类和接口区别和联系:
1、抽象类中可以有普通成员变量,接口中没有普通成员变量。
2、抽象类和接口中都可以包含静态成员常量。
3、一个类可以实现多个接口,但只能继承一个抽象类
4、抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。(JDK1.8后,接口中可以有静态方法,静态方法必须有方法体)
5、一个抽象类可以是public、private、protected、default, 接口只有public;
6、一个抽象类中的方法可以是public、private、protected、default, 接口中的方法只能是public和default
7、抽象类可以含有私有成员变量,接口不含有私有成员变量。
HashTable和HashMap的区别
1、Hashtable 是一个哈希表,该类继承了Dictionary,实现了map接口。(Dictionary->Hashtable->Properties)
2、Hashtable 线程安全的,而 HashMap 是线程不安全的
3、HashTable使用Enumeration,HashMap使用Iterator
4、HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
5、HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
6、HashMap的数据结构是怎样的:数组+链表
7、HashMap实现Map接口,它允许任何类型的键和值对象,并允许将NULL用作键或值 一个null
ArrayList和LinkedList
1、ArrayList和LinkedList均实现了List接口
2、ArrayList访问速度比LinkedList快
3、ArrayList线程不安全的,允许存放重复对象
4、ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构
5、对于随机访问get和set,ArrayList优于LinkedList,因为LikedList要移动指针
6、对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
7、ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
构造函数
1、构造方法的方法名必须与类名相同。
2、构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
3、构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
4、一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
5、构造方法可以重载,以参数的个数,类型,顺序,因此构造器可以有0个,1个或一个以上的参数
重载和重构
重载是一个类中多态性的一种表现;重写是父类与子类之间多态性的一种表现
重载的规则:
1、必须具有不同的参数列表;
2、可以有不同的返回类型,只要参数列表不同就可以;
3、可以有不同的访问修饰符;
4、可以抛出不同的异常;
5、方法能够在一个类中或者在一个子类中被重载。
重写的规则: 两同,两小,一大
1、方法名相同
2、参数类型相同
3、子类返回类型小于等于父类方法返回类型
4、子类抛出异常小于等于父类方法抛出异常
5、子类访问权限大于等于父类方法访问权限。
其他
1、实现了GBK编码字节流到UTF-8编码字节流的转换
dst=new String(src,“GBK”).getBytes(“UTF-8”)
2、局部类可以用哪些修饰符修饰: abstract 和 final
3、Math中的round方法,求的值就是取小于等于(参数+0.5)的最大整数。
4、java8中,忽略内部接口的情况,不能修饰interface里的方法的有:private protected
5、什么操作会使得当前线程停止?
1)、一个异常抛出,或导致线程停止(An InterruptedException is thrown)
2)、线程执行了wait()方法。线程使用了wait方法,会强行打断当前操作,(暂停状态,不会中断线程) 进入阻塞(暂停)状态,然后需要notify方法或notifyAll方法才能进入就绪状态。
3)、线程在MediaTracker上执行了waitforID()调用,