Java 面试题-----个人总结

以下面试题皆为自己进行总结的,来源是书本上大家容易忽略的知识点以及自己经历过的那些面试题。


1、面向对象与面向过程的比较?面向对象有什么优点?


答:面向对象的基本哲学认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的,不同对象之间的相互作用和通讯构成了完整的现实世界。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。而面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现,使用的时候一个个依次调用就可以。这就好比需要一台电脑,面向过程的解决方法就是自己造一台电脑,面向对象的解决方法就是自己组装一台电脑。使用面向对象思想进行开发有以下优点: 
1、易维护 
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便

和较低成本的。 
2、易复用
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。  
3、易扩展 
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。


2、Java的一大特点就是平台无关性,怎样理解“write once,run everywhere”?

答:Java语言的出现就是源于对独立于平台语言的需要,Java之所以能够做到这一点,是因为Java可以在计算机的操作系统之上再提供一个Java运行环境,

该运行环境由Java虚拟机、类库以及一些核心文件组成,也就是说,只要平台提供了Java运行环境,Java编写的软件就能在其上运行。

平台是由操作系统和处理器CPU所构成的,与平台无关是指软件的运行不因操作系统、处理器的变化无法运行或出现运行错误。

每个平台都会形成自己独特的机器指令,所谓平台的机器指令是指可以被该平台直接识别、执行的一种由0,1,组成的序列代码。

C/C++针对当前C/C++源程序所在的特定平台对其源文件进行编译、链接,生成机器指令,即根据当前平台的机器指令形成可执行文件,

那么,可以在任何与当前平台相同的平台上运行这个可执行文件。但是,不能保证C/C++源程序所产生的可执行文件在所有的平台上都正确运行,

不同平台可能具有不同的机器指令。Java在平台之上还提供一个JRE,Java虚拟机的核心就是字节码指令——可以被Java虚拟机直接识别、执行的

一种由0,1组成的序列代码。字节码并不是机器指令,因为它不和特定的平台相关,不能被任何平台直接识别、执行。Java针对不同平台提供的Java

虚拟机的字节码指令都是相同的。Java语言提供的编译器将源程序编译成称为字节码的“中间代码”,Java虚拟机将字节码翻译成虚拟机所在平台的

机器码,并让当前平台运行该机器码。


3、为什么一个Java源文件中至多只能有一个public类?

答:java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。 只能有一个public类是为了给类装载器提供方便。 一个public 类只能定义在以它的类名为文件名的文件中。每个编译单元(文件)都只能有一个public类。这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出出错信息。


4、JDK1.5之后的编译器和以前版本的编译器有一个很大的不同,不再向下兼容?

答:对。


5、Java之父是谁?说说他的事迹。为什么这语言叫做Java?

答:Java之父是James Gosling,出生于加拿大,是一位计算机编程天才。在卡耐基梅隆大学攻读计算机博士学位时,编写了

  多处理器版本的Unix操作系统,是Java的创始人。12岁时就能设计电子游戏机,帮助邻居修理收割机。

Java名字的来源----在马来西亚有一个盛产咖啡的小岛,叫做Java岛(爪哇岛)。将这种语言命名为Java,意为为世人献上一杯可口的咖啡。


6、有哪些不是关键字但是不能作为标识符的呢?

答:null , true ,false


7、语句byte x = (byte)30 + 'b' ;能否通过编译?为什么?

答:不能。类型不匹配,不能从int 转化为 byte。byte占一个字节,范围为-128——127,表达式右边值为128超出了byte的数据范围,右边结果类型为int 

占四个字节。而表达式左边的表达式类型为byte。

8、说说面向对象编程的三个特性。

答:面向对象编程的三个特性:封装、继承、多态。

封装:面向对象编程的核心思想之一就是将数据和对数据的操作封装在一起。通过抽象,即从具体的实例中抽取出共同的性质形成一般的概念,比如类。

继承:子类可以继承父类的属性和行为,即继承了父类所基友的数据和数据上的操作,同时又可以增添子类独有的数据和数据上的操作。

多态:允许不同类的对象对同一消息做出响应。

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块;多态可以实现接口的重用。


9、为什么Java不允许用户程序拓展String类?

答:这在Java语言定义的时候,String类就是修饰成final类型的,即不能被继承,不能有子类。

String类对于编译器和解释器的正常运行有很重要的作用,Java不允许用户程序拓展String类,出于安全性的考虑,Java将其修饰为String类。


10、什么叫对象的上转型对象?

答:我们经常说“老虎是动物”、“狗是动物”,这就完全可以体现Java语言的上转型对象。

比如Animal类是Tiger的父类,当用子类创建一个对象,并把对象的引用放到父类的对象中,如

Animal  a ;   Tiger b = new Tiger();  a =b; 此时,称对象a是对象b的上转型对象。

对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。

上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。


11、比较下abstract类和接口。

答:1.abstract类和接口都可以有abstract方法。

2.接口中只可以有常量(public、static、final),不能有变量;而abstract类中既可以有常量也可以有变量。

3.abstract类中可以有非abstract方法,接口不可以有。


12、什么是接口回调?

答:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。


13、带finally的try-catch语句有没有什么值得注意的特殊情况?

答:执行机制:在执行try-catch语句后,执行finally子语句,也就是说无论在try部分是否发生过异常,finally子语句都会被执行。

特殊情况:1、如果在try-catch语句中执行了return语句,那么finally语句仍然会被执行。

    2、如果在try-catch语句中执行了System.exit(0),则不会执行finally语句(当然包括其后的所有语句)。


14、如果在Thread子类覆盖的run方法中编写了运行代码,同时也为Thread子类对象传递了一个Runnable对象,那么,线程运行时的执行代码是子类的run方法的代码?

还是Runnable对象的run方法的代码?

答:查看Thread类的run方法的源代码,可以看到这两种方式都是在调用Thread对象的run方法,如果Thread类的run方法没有被覆盖,

并且为该Thread对象设置了一个Runnable对象,该run方法会调用Runnable对象的run方法。很明显,在此面试题中,已经重写了

Thread类的run方法,因此会执行子类的run方法代码。


15、.多线程会提高程序的运行效率吗?为什么会有多线程下载?

答:不会;抢占的是服务器的带宽。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java面试题真的很多,下面我来回答一个有关多线程的问题。 在Java中实现多线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式有何区别? 继承Thread类的方式是直接定义一个类继承Thread,并重写它的run()方法。然后创建该类的对象,并调用对象的start()方法来启动线程。这种方式简单直接,但因为Java是单继承的,所以如果某个类已经继承了其他类,就不能再直接继承Thread类实现多线程。 实现Runnable接口的方式是定义一个类实现Runnable接口,并实现其唯一的抽象方法run()。然后创建Thread类的对象,将实现了Runnable的对象作为参数传递给Thread类的构造方法。最后调用Thread对象的start()方法来启动线程。这种方式灵活性更大,因为Java允许一个类实现多个接口,所以即使某个类已经继承了其他类,仍然可以通过实现Runnable接口来实现多线程。 另一个区别在于资源共享的问题。继承Thread类的方式,不管是数据还是方法,都是线程自己拥有的,不存在共享的情况。而实现Runnable接口的方式,多个线程可以共享同一个对象的数据和方法,因为多个线程共同操作的是同一个Runnable对象。 总结来说,继承Thread类方式简单直接,但只能通过单继承来实现多线程;实现Runnable接口方式更灵活,可以解决单继承的限制,并且多个线程可以共享同一个Runnable对象的数据和方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值