java面试基础知识(二)

1.      Java语言的优势

1 Java为纯面向对象的语言

2 平台无关性(Window、Linux、Macos上都可以通过Jvm运行)

3 Java提供了很多内置的类库

4 提供了对WEB应用的支持

5 具有较好的安全性和健壮性

6 去除了C++中难以理解、容易混淆的特征

2.      Java(面向对象思想:抽象、继承、封装、多态)与C/C++有什么异同

1 java为解释性语言,程序源代码经过编译生成字节码,然后由jvm解释执行;c/C++为编译语言,源代码经过编译和链接后生成可执行的二进制代码。所以java执行速度比C/C++慢,但是Java能够跨平台执行。

2 Java中所有代码必须在类中实现,除数据基本类型外,所有类型都是类。Java中没有全局变量或全局函数。

3 Java中没有指针的概念

4 Java不支持多重继承,所以引入了接口的概念。

5 Java中提供了垃圾回收器来实现垃圾饿自动回收,不需要程序显式地管理内存分配。Java中没有析构函数(C++中用于存放要释放资源的代码),但是引入了finalize()方法。

6 C++语言支持运算符重载,Java不支持。Java不支持自动强制类型转换,提供对注释文档的内建支持,提供用于访问数据库的JDBC库,用于实现分布式对象的RMI标准库等。

3.      为什么需要public static void main (String[] args):Java程序的入口

public 是允许任何类或对象都可以访问这个方法,static即该静态方法中的代码是存储子静态存储区的,只要类被加载后,就可以使用该方法而不需要实例化对象类访问。返回值必须为void。

4.      如何实现main()方法执行前输出HelloWorld

虽然main方法是Java程序的入口,但是main()方法不一定是第一个被执行的模块。可以用静态块实现在main前的输出。

5.      Java程序初始化的顺序

当实例化对象时,对象所在的类所有成员变量首先要进行初始化,才能调用对象所在类的构造函数创建对象。初始化原则:1静态对象优先于非静态对象(变量)初始化,其中静态变量只初始化一次,非静态对象可初始化多次;2 父类优先于子类进行初始化;3 按照成员变量和方法(包括构造函数)定义顺序进行初始化。

6.      Java中的作用域有哪些

变量类型:成员变量、静态变量、局部变量。(静态变量不依赖于特定的实例,而是被所有实例所共享,可以直接通过类名和变量来访问静态变量)。public、private、protected(不能修饰类)、default。

7.      为什么Java中有些接口没有任何方法。

也就是说实现这些接口不需要重写任何方法,这些没有任何方法声明的接口被叫做标识接口。充当一个标识的作用,用来表明实现它的类属于一个特定的类型(相当于汽车的标志图标)。Java类库中已存在标识接口有Clone able和Serializable等。使用时经常会用instanceof来判断实例对象的类型是否实现了一个给定的标识接口(即识别类型)。

8.      Java中对象喝引用的区别

Java在处理基本数据类型(int,char,double等)都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外其他类型都是按引用传递(传递的是对象的一个引用)的方式执行。对象除了在函数调用时是引用传递,在使用“=”赋值时也采用引用传递。

public classTestRef {

  private Obj aObj=new Obj();

  private int aInt=0;

  public Obj getAObj(){

      return aObj;

  }

 

  public int getAInt(){

      return aInt;

  }

 

  public void changeObj(Obj inObj){

      inObj.setStr("changed value");

  }

 

  public void changeInt(intinInt){

      inInt=1;

  }

  public static voidmain(String[] args) {

     

      TestRef oRef=new TestRef();

      System.out.println("************引用类型***************");

      System.out.println("调用changeObj()前:"+oRef.getAObj());

      oRef.changeObj(oRef.getAObj());

      System.out.println("调用changeObj():"+oRef.getAObj());

      System.out.println("**********基本数据类型*****************");

     

      System.out.println("调用changeInt()前:"+oRef.getAInt());

      oRef.changeInt(oRef.getAInt());

      System.out.println("调用changeInt():"+oRef.getAInt());

  }

}

输出的结果:基本数据类型没有改变,还是0。这时候就用到了clone()方法,它的作用是返回一个Object对象的复制,这个复制的函数返回的是一个新的对象而不是引用。

         public class Obj implementsCloneable{

         private int aInt=0;

         public int getAInt(){

                   return aInt;

         }

         public void changeInt(){

                   this.aInt=1;

         }

         public Object clone(){

                   Objecto=null;

                   try{

                            o=(Obj)super.clone();

                   }catch(CloneNotSupportedException e){

                            e.printStackTrace();

                   }

                   return o;

         }

}

输出结果:0,1.

上述是浅拷贝,但是当类中包含了一些对象时,就需要用到深拷贝了,实现方法是在对对象调用clone()方法完成复制后,接着对对象中的非基本类型的属性也调用clone()方法完成深复制。

9.      

Java中创建对象的方式:1通过new实例化一个对象 2通过反射机制创建对象 3通过clone()方法创建对象 4通过反序列化的方式创建对象。

你可能感兴趣的:(经验与总结,java基础)