java练习题目
1.Object的方法:ctrl+F12显示类结构:
- getclass() 返回运行时类
- clone()返回一个对象的拷贝。clone 方法是浅拷贝,对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。
- notify() 唤醒此对象监视器等待的线程 finalize()当垃圾回收器确定不存在此对象的更多引用,执行此的方法
- wait()调用该方法的线程进入WAITING状态,只有等待另外线程的通知或被中断才会返回,需要注意,调用wait()方法后,会释放对象的锁。
2.关于final
- final修饰的变量不允许再次被赋值
- final可修饰方法,方法不可重写,可重载
- final可修饰类,但是此类不可继承
- final不能修饰接口,抽象类
3.关于String
java中的String一旦初始化,其指向的内容是不可变的。String str=“aa”;str=“bb”;第二句并不是改变str储存的值,而是新开辟另一个空间储存"bb",同时str指向"bb",原来的’'aa"不可达,则GC会回收。但是这里是作为参数传递过去,原来的str仍然指向"good"。
4.InterruptedException
InterruptedException出现一般都是因为在线程执行的时候被打断(interrupt),线程(A)不是自己打断自己,一般都是在另外一个线程(B)中执行中断方法(objA.interrupt())。
每个线程都管理一个自己的中断状态(interruption status),它可以通过Thread#interrupt()方法设置位中断状态,或则使Thread#interrupted()重置状态。另外,Thread#isInterrupted()通常用来判断是否处以中断状态。
抛InterruptedException的代表方法有:
- Thread.join
- Thread.sleep
- Object.wait
- CyclicBarrier.await: CyclicBarrier是一个屏障类,await方法可以理解为:等待多个线程同时到达之后才能继续进行,在此之前它就是这些线程的屏障,线程不能继续进行,而对于失败的同步尝试,CyclicBarrier 使用了一种要么全部要么全不 (all-or-none) 的破坏模式:如果因为中断、失败或者超时等原因,导致线程过早地离开了屏障点,那么在该屏障点等待的其他所有线程也将通过 BrokenBarrierException(如果它们几乎同时被中断,则用 interruptedException)以反常的方式离开。
5.Synchronized
采用synchronized修饰实现的同步机制叫互斥锁机制,它所获得的锁叫互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个标记才能访问这个资源,没有这个标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,是为了分配给线程的,防止打断原子操作。每个对象的锁只分配给一个线程。
特别强大,既可以保证可见性也可以保证原子性。
与volatile的区别:volatile就是告诉jvm,当前变量在寄存器的值是不确定的,需要从主存中读取。而synchronized是锁定当前变量,只有当前线程才可以访问该变量,其他被阻塞。volatile不会造成线程阻塞,synchronized会造成。volatile标记的变量不会被编译器优化,synchronized的会。
6.抽象类
包含抽象方法的类叫抽象类,抽象类可以拥有抽象方法、成员变量,普通的成员方法。
- 抽象方法必须为public或者protected。
- 抽象类不能用来创建对象
- 如果一个类继承抽象类,则子类必须实现父类的抽象方法,如果没有实现则必须把子类也定义为抽象类
- 抽象方法不能用static,private,synchronized,native修饰
- 在jdk1.8之前方法默认访问权限是public,1.8时是default
- 可以有构造器,可以有main方法,不可以new一个抽象类
7.接口
- 接口中的方法默认访问权限是public,在1.8访问权限也可以是defalt,到了1.9也可以是private
- 多实现(implements A,B)
- 没有构造器
- 函数类型默认是public,只能有public类型的成员函数
- 非静态成员函数没有方法体,静态成员函数有方法体
- 子类必须实现接口的所有函数非静态成员函数
- 可以有main方法,可以new一个接口,需要在方法体实现所有接口函数
8.static
static为成员变量或函数,在类初始化加载完成,可以被成员函数调用或访问。对于虚函数是c++的,虚函数不可能是static的
9.jsp页面跳转问题
forword,服务器获取跳转页面内容传给用户,用户地址栏不变
redirect,服务器向用户发送转向的地址,地址栏变成新的地址栏
10.关于类多态问题
向上转型:父类只能调用父类方法或者子类重写的方法,子类中单独的方法是无法调用的
多态成员方法的使用规则:编译看左边,运行看右边
运行结果:ABDC
如果把父类的methtwo改成static类型,
运行结果:ABC子类无法覆盖父类的静态方法,只能隐藏。静态方法是属于类的,不属于对象。