基础1.object类的方法有哪些clone() protect 创建并返回一个对象的副本equals()用来比较某个对象是否与调用此方法的对象相等finalize() protectgetClass() 返回一个对象的运行时类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 成员方法永远都是public13.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");14.char[][]如何创建char[][] ch1=new char[2][3]; //对char[2][3] ch2=new char[][]; //错char[2][] ch3 = new char[][3];//错char[][] ch5 = new [2]char[3];//错char[][] ch6=new char[2][];//对char[][] ch7=new char[][3];//错char[][] ch8=new char[][];//对char[] ch9[]=new char[2][3];//对16.关于类的修饰符对于外部类public default[默认] final abstract对于成员内部类public protected default[默认] private static final abstract对于局部内部类default[默认] final abstract17.标识符的组成Java标识符由数字、字母、下划线(_)、美元符号($)或人民币(¥)组成,首位不能是数字。
并且Java关键字不能作为标识符protected abstract class $NEW{}//okprotected abstract class ¥NEW{}//ok17.线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。
这就是平台独立的原因。
18.接口类中可以有静态方法,但是不能有静态的抽象方法public interface InterfaceObject {int i=1;void print();static void printf(){ //okreturn ;};static void printff(); //error}19.抽象方法一定是类的成员方法,不能是类方法20.分母和分子只要一个是浮点数算出来的结果也为浮点数System.out.println(1/2.0);//0.5System.out.println(1.0/2);//0.521.向上转型和向下转型子类转型成父类是向上转型,反过来说,父类转型成子类就是向下转型22.local variable==局部变量23.方法的重写(override)两同两小一大原则:方法名相同,参数列表相同子类返回类型小于等于父类方法返回类型(子类重写方法的返回值类型必须为父类方法的返回值类型或父类方法返回值类型的子类类型),子类抛出异常小于等于父类方法抛出异常(子类重写方法抛出的异常类型只能是父类方法抛出的类型或父类方法抛出的异常类型的子类类型),子类访问权限大于等于父类方法访问权限(父类方法是用 protected 修饰的子类就只能用 public 修饰而不能用private 修饰)。
24.finally语句块在什么时候不会执行当try/catch语句块中有System.exit(0)时,不会执行finally语句块25.如果finally和try/catch中都有return语句怎么办?首先会执行try/catch中的return语句中的表达式,但是不一定直接从此处返回,要看情况。
执行完try/catch中return语句中的表达式后会执行finally语句块;如果finally中有return,就从finally中的return直接返回,此时try/catch中的return会忽略,但是finally中没有return的话,就会先执行finally语句块,再从try/catch中的return返回26.在类的静态方法内部可以通过创建一个本类对象来访问私有成员27.import java.util.*; 和import java.util.concurrent.*;的区别import java.util.*; 导入的是uti直接子包下的所有类;不会导入util.concurrent.*下的类。