一、JDK和JRE的区别是什么?
JDK:是java开发工具包,可以编写java程序,是面向开发者的工作环境,需要配置环境变量。
JRE:java运行时环境,包含了java虚拟机,java基础类库,java程序能够依赖运行的平台,不需要配置环境变量。
二、什么是构造函数,什么是构造函数重载?什么是复制构造函数?
构造函数是类函数,函数名与类名完全相同,无返回值,重载是指可以写多个构造函数,只是参数类型个数不同。
复制构造函数java中没有,它是指将本类的对象作为参数的构造函数。
三、创建线程有几种不同的方式?哪一种好?
1、继承Thread类
2、实现Runnable接口
3、实现Runnable接口比较好,因为不需要继承Thread类,java是单继承的,不支持多继承,在一个继承了其他类的类中,要想实现线程,只能实现接口来完成。
四、Array和ArrayList有什么区别?什么时候应该用Array而不是ArrayList?
1、Array大小固定,存储数据和对象。声明同时必须进行实例化,至少得初始化数组的大小。只能存储同构的对象(类型一致)。
2、ArrayList是动态增长的,只存对象类型。可以只声明。他可以存储异构的对象。
如果我们想要保存一些在整个程序运行期间都存在而且不变的数据,我们可以用Array。根据他们的区别判断具体什么时候用,不多赘述了。
五、谈谈对异常的理解
异常分为error和exception
1、error是系统异常,不可控。
2、exception是可控的异常。可以分为编译时异常和运行时异常,对于编译时异常可以通过try-catch捕获,或者throw抛出。
六、throw与throws区别
1、throw用来声明异常,后面跟的是一个具体的异常实例,写在方法体内。表示抛出异常,由方法的调用者来处理。
2、throws后面跟的是异常类,异常类可以出现多个,用逗号隔开。
七、作用域public,private、protected以及不写的区别
public:在同包下、不同包下都可以访问
private:私有,只在本类上调用。
protected:受保护的类,只能在同一包下可访问,子类也可以访问。
不写默认为friendly,类同包。
八、抽象方法是否可以同时是static,native,synchronized?
不能是static,抽象方法需要子类重写,静态方法是无法被重写的。
不能是native,本地方法是由本地代码实现的方法,抽象方法没有方法体,没有实现。
不能是synchronized,它跟实现细节有关,抽象方法不涉及实现细节,无方法体。
九、String s=new String(‘xyz’)创建了几个String对象?
可能是一个,也可能是两个。
1、当JVM读到‘xyz’时,首先检查常量池,要是有的话,不会为‘xyz’再次创建,读到new的时候,创建一个对象,把常量池中的‘xyz’的引用地址指向当前对象。所以这种情况一共创建了一个对象。
2、要是常量池中没有,先创建‘xyz’对象,在new的时候,再创建对象指向刚创建的对象。这时创建了两个对象。