经典Java面试题(二)

介绍一下包装类的自动拆装箱与自动装箱

1.自动装箱、自动拆箱是JDK1.5提供的功能;

2.自动装箱:把一个基本类型的数据直接赋值给对应的基本包装类型;

3.自动拆箱:把一个包装类型的对象直接赋值给对应的基本类型;

4.通过自动装箱、自动拆箱功能,简化基本类型变量和包装类对象之间的转换过程。

请你说说Java的异常处理机制

1.异常处理机制让程序具有容错性和健壮性,程序运行出现状况时,系统会生成一个Exception对象来通知程序。

2.处理异常的语句由try、catch、finally三部分组成。try块用于包裹业务代码,catch块用于捕获并处理某个类型异常,finally块则用于回收资源。

3.如果业务代码发生异常,系统会创建一个异常对象,并将其提交给JVM,由JVM寻找可以处理这个异常对象交给这个catch块处理。如果JVM没有找到,运行环境终止,Java程序退出。

4.Java也允许程序主动抛出异常。当业务代码中,判断某项错误的条件成立时,可以使用throw关键字向外抛出异常。

说说你对面向对象的理解

1.面向对象三大特征:封装、继承、多态。

2.封装:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象信息,让外部程序通过该类提供的方法来实现内部信息的操作和访问,提高了代码的可维护性;

3.继承:实现代码复用的重要手段,通过extends实现类的继承,实现继承的类被称为子类,被继承的类称为父类;

4.多态的实现离不开继承,在设计程序时,我们可以将参数的类型定义为父类型。在调用程序时根据实际情况,传入该父类的某个子类型的实例,这样就实现了多态。

请你说说重载和重写的区别,构造方法能不能重写

  得分点:重载的定义、重写的定义、区别

1.重载:发生在同一个类中,方法名相同,参数列表可以不同,修饰符和返回值无关。

2.重写:父子类关系中,方法名相同,参数列表相同,子类修饰符和返回值必须和父类相同或者比父类范围大并且返回值是父类的子类。

3.若父类方法的修饰符为private则子类不能重写改方法。

请你介绍一下访问修饰符

1.java中提供了public, protected,default,private四种访问修饰符。

2.public:类中被public修饰的能被当前项目下的所有类访问。

3.protected:类中被protected修饰的可以被当前类和当前类的包的其他类的子类访问。

4.default:类中被default修饰的只能在当前类和当前类所有包的其他类访问。

5.private:类中被private修饰的只能在被当前类的内部访问。

请你说说泛型、泛型擦除

得分点:使用泛型的原因,泛型和泛型擦除的概念

1.Java在jdk1.5引入泛型,在没有泛型之前,每次从集合中读取的对象都必须进行类型转换,如果在插入对象时,类型出错,那么在运行时转换处理的阶段就会出错; 在提出泛型之后就可以明确的指定集合接受哪些对象类型,编译器就能知晓并且自动为插入代码进行泛化,在编译阶段告知是否插入错误对象,程序变更加安全清晰。

2.泛型的本质:参数化类型,即给类型指定一个参数。

3.泛型的好处:(1)可以在编译时检查类型安全。(2)所有强制转换都是自动和隐式的,可以提高代码的重用率。

4.泛型擦除:编译器在编译期间将我们写好的泛型进行擦除,并相应的做出一些类型转换。

请你说说你对反射的了解

得分点:反射的概念,通过反射机制可以实现什么

1.反射:在程序运行期间动态的获取对象的属性和方法的功能叫做反射。

2.它能够在程序运行期间,对任意一个类,都能知道它所有的方法和属性,对于任何一个对象,都能知道他的属性和方法。

3.获取Class对象的三种方式:getClass();xx.Class;Classforname("");

4.反射的优点:运行期间可以动态的获取类,提高代码的灵活性。

5.反射的缺点:性能比直接的Java的代码慢很多。

6.应用场景:spring的xml配置模式,以及动态代理模式都用到了反射。

请你说说多线程

1.得分点:线程和进程的关系、为什么使用多线程

2.线程是程序执行的最小单位,一个进程可以拥有多个线程。

3.各个线程之间共享程序的内存空间(代码块、数据段和堆空间)和系统分配的资源(CPU,I/O,打开的文件),但是各个线程拥有自己栈空间。

4.多线程的优点:减少程序的响应时间;提高CPU利用率;创建和切换开销小数据共享效率高;简化程序结构

说说线程的创建方式

得分点:Thread、Runnable、Callable

1.创建线程有3种方式:

(1)继承Thread类,重写run()方法;

(2)实现Runnable接口,并实现该接口的run()方法;

(3)实现Callable接口,重写call()方法。

2.前两种方式线程执行完成后没有返回值,最后一种带返回值;一般推荐使用Runnable接口,因为接口不会占用类的继承位置。

说说线程的状态

得分点:创建、就绪、运行、阻塞、销毁

new一个线程后就是创建状态,执行start()方法后处于就绪状态,处于就绪状态的线程获取了cpu之后,就开始执行run()方法,这时候就属于运行状态,当调用sleep()方法时,就进入了阻塞状态,最后run()方法执行完或者跑出一个异常时就销毁了。

说说wait()sleep()的区别

1.得分点:所属的类型不同、对锁的依赖不同、返回的条件不同

2.所属条件不同:wait()是Object类的实例方法,调用该方法的进程进入WATING状态。Sleep()是Thread类的静态方法,调用该方法的线程将进入TIMED_WING状态。

3.对锁的依赖不同:wt()依赖于synchronize锁,通过监视器进行调用,调用后线程会释放锁;sleep()不依赖任和锁,所以在调用后它不会释放锁。

4.返回的条件不同:调用wt()进入等待状态的线程,需要由notify()/notifyAll()唤醒,从而返回; 调用sleep()进入超时等待的线程,需要在超时时间到达后自动返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值