java面试:如何破解10大问题

在java异常处理中Throw和Throws有什么区别?
你盯着问你问题的人想,我知道这个问题的答案。但是现在你记不清了,然后就会对自己没有准备这个问题而懊恼。幸运的是这只是一个假想的场景,当时间充裕的时候你一定能够回答这个问题。
典型的公司雇佣java程序员找的是能够脱离指导手册并能熟练编程的人,面官面试的问题不一定是难题,只不过是引出问题更深层的知识。这篇文中给出了java面试中15个潜在被问及的问题。
让我们从简单的开始然后一点点变难。

1、什么是JVM,为什么java被称作是“平台无关的编程语言”?

JVM或者是java虚拟机是接收字节码并执行的解释器,java被称为是“平台无关的语言”主要是源自“一次执行到处运行”的概念,下边就是java中建立平台独立的一系列的步骤。
1、java编译器输出的是被称作“字节码”的代码
2、字节码是可以在java虚拟机上执行的,高度优化的计算机指令的集合。
3、翻译成字节码使程序更容易的在更多的平台上执行,我们所需要的就是针对特定平台所设计的JVM。
4、不同平台上的JVM有不同的配置,这样他们就能理解同一套字节码,这样就可以使java 程序“平台独立”。

2、JDK和JRE的区别

当问到典型的java面试题的时候,大多数java的初学者会对JDK和JRE迷糊。最终是,“只要我得程序运行,什么事都会做”。如果你要以编程作为生活和事业,这样的回答并不会令人满意。
JDK是java开发工具包,是构建在java平台上的一系列的程序,你可以基于这些程序来开发java。
JRE是java运行环境,是java程序执行的实际环境。
通常说,每一个JDK会包含一个或多个JRE还有像java源码编译器,绑定的部署工具,调试工具和开发库等开发工具。

3、static关键字什么意思

我们肯定已经对java基础有很好的了解了,现在我们已经解决了最初的概念。现在我们深入一些特别的东西
static变量和类相关连的而不是那个类的对象,例如:
public class ExplainStatic {
      public static String name = "Look I am a static variable";
}

我们有另一个类,我们尝试着访问刚才定义的静态变量:
public class Application {
        public static void main(String[] args) {
            System.out.println(ExplainStatic.name)
        }
}

我们不能创建类的对象,然后访问静态变量,我们直接使用类名来访问变量:ExplainStatic.name

4、java支持的数据类型是什么,什么是自动装箱和拆箱

这是最常见和最基本的java面试题目之一,当被问道这个问题的时候,你应该有所准备。java支持的8中原始数据类型分别是:

Byte:8-bit(代表0或者1)有符号整数(java中不存在unsigned数据类型),它的取值范围是-128-+127

Short:16-bit有符号整数,取值范围是-32768-32767

Int:32-bit有符号整数,取值范围是-2147483648-2147483647

Long:64-bit的有符号整数,取值范围是 -9,223,372,036,854,775,808-9,223,372,036,854,775,807 

此外还有:Float、Double、Char、Boolean。

自动装箱:为了编译方便,java编译器把原始类型(int、float、double等等)转为与之对应的对象或者是包装类(Integer、Float、Double等)

拆箱,把包装类转为原始的数据类型,这是自动装箱的逆过程。

5、StringBuffer和String的区别

关于这个问题可以参考, 这篇文章

6、java中Over-Riding和Over-Loading的区别是什么?

这是OOP(面向对象编程)中非常重要的概念,对于每一个java程序员来说,都是必须要知道的问题。
Over-Riding。override函数发生在一个类继承自另一个类时。一个override函数替换继承自基类的函数,是以这种方式这种方式被调用,类的实例通过多态实现不同的类型。在基类中可能就是一个小小的实现体,下边的这段代码可以很好的解释这个问题:
public class Car {
public static void main (String [] args) {
Car a = new Car();
Car b = new Ferrari(); //Car ref, but a Ferrari object
a.start(); // Runs the Car version of start()
b.start(); // Runs the Ferrari version of start()
}
}
class Car {
public void start() {
System.out.println("This is a Generic start to any Car");
}
}
class Ferrari extends Car {
public void start() {
System.out.println("Lets start the Ferrari and go out for a cool Party.");
}
}

Over-Loading:Overloading,是利用一个名字不同的参数定义多种方法的活动,这和overriding没有关系也和多态没有关系,在java中函数可以通过两种机制被加载:
1、参数个数的不同
2、参数的类型不同
class CalculateArea{
      void Area(int length){System.out.println(length*2);}
      void Area(int length , int width){System.out.println(length*width);}

      public static void main(String args[]){
      CalculateArea obj=new CalculateArea();
      obj.Area(10);   // Area of a Square
      obj.Area(20,20);  // Area of a Rectangle

      }
}

7、什么是java中Constructors、Constructor重新加载

对于初学者来说,Constructors是OOPs的基本形式
Constructor:构造函数的唯一目的是创建类的实例,类创建对象的时候被调用,下边是构造函数的一些显著的特征。
1、构造函数可以是public、private或者protected的
2、如果有参数的构造函数被创建,那么默认的无参的构造函数就不能被调用了,要想被调用你只能重新写一个无参的构造函数。
3、当类被实例化的时候被调用
4、构造函数的名字和类名是一致的
5、没有返回值,不需要指定void类型
6、如果你没有创建构造函数,那么java会默认的帮你创建无参的构造函数
public class Boss{
     String name; 

     Boss(String input) { //This is the constructor
        name = "Our Boss is also known as : " + input;
    }

public static void main(String args[]) {
     Boss p1 = new Boss("Super-Man");
    }
}

Constructor重载:传递类的不同数量和类型的私有变量,下边是例子:
public class Boss{
   String name; 
   Boss(String input) { //This is the constructor
        name = "Our Boss is also known as : " + input;
   }
   Boss() {
        name = "Our Boss is a nice man. We don’t call him names.”;
   }
public static void main(String args[]) {
      Boss p1 = new Boss("Super-Man");
      Boss p2 = new Boss();
   }
}

8、什么是java的异常处理,错误之间有什么区别,Unchecked异常和Checked异常有什么区别

关于这个问题可以参考, 这篇文章。

9、java中Throw和Throws的区别

Throws:当方法发生异常的时候throws抛出不同类型的异常,警告这个被调用的方法,你需要处理这一系列的异常。除了那些Error类型或者运行时异常,所有的其他异常或者他们子类的异常,必须在throws语句中声明,实现了try-catch块的情况下除外。下边是代码的例子:
public void myMethod() throws PRException
{..} 
This means the super function calling the function should be equipped to handle this exception.
public void Callee()
{
try{
   myMethod();
}catch(PRException ex)
{
...handle Exception....
}
}

Throw:如果想抛出精确的异常,我们使用Throw,Thow语句可以在代码的任何地方使用,下边是代码的例子:
try{
if(age>100){throw new AgeBarException(); //Customized ExceptioN
}else{
....}
}
}catch(AgeBarException ex){
...handle Exception.....
}

10、字节流和字符流的不同

每一个java程序员都会和文件操作打交道,生成用户报告,通过邮件发送附件等等,全面的文件操作知识就变得很重要
字节流:对于读写二进制文件,字节流是无可替代的,程序使用字节流来处理字节的输入和输出:
1、执行InputStream操作或者OutputStream意味着循环的一次一次的读取输入流和写入输出流
2、你可以使用缓存的I/O流来减小开支
字符流:字符流是与字符而不是字节相关联的,在java中字符一Unicode形式存储的,用这种形式存储的话,字符变成平台独立、编程独立和语言独立的了。
原文地址:https://blog.udemy.com/java-interview-questions/

你可能感兴趣的:(java,面试)