• MLDN java面试题


    1、  Java中的异常处理机制的简单原理和应用。

    每当产生异常之后,如果没有程序进行相应的处理,则程序将出现中断的现象,那么,此时实际上一旦产生一个异常之后,JVM会跑出一个异常类的实例化对象,如果此时使用了try语句进行不活的话,则可以进行异常处理,如果没有的话,则交给JVM进行处理,当tru语句捕获到了异常之后,会与catch中的异常类型进行匹配,如果匹配成功,则使用catch语句进行处理。

    应用:简单的引用,就是在所有有throws关键字的地方加入try…catch

    如果按照一个标准做的话,try、catch、finally、throw、throws关键字应该一起使用。

    2、  垃圾回收的优点和原理。并考虑2种回收机制。

    将无用的对象空间进行释放,两种回收:自动回收,手工调用System.gc()方法,实际上调用System.gc()就相当于调用了Runtime.getRuntime().gc()方法。

    3、  Error与Exception有什么区别。

    Error表示有JVM进行处理的,是JVM出错。

    Exception表示可以由程序进行处理的,使用try..catch 进行处理。

    4、  谈谈final,finally,finalize的区别。

    Final是定义常量、方法、类的,生命的方法不能被覆写、生命的类不能被继承。

    Finally:是一场的统一出口。

    Finalize:是垃圾回收前的收尾工作,是Object类中定义的。

    5、  Anonymous Inner Class (匿名内部类)是否可以extends(继承)其他类,是否可以implements(实现)interface(接口)?

    允许继承或实现,因为匿名内部类就是在抽象类和接口的基础之上发展起来的。

    6、  Static Nested Class 和Inner Class的不同。

    使用static声明的内部类就是外部类,可以通过 外部类.内部类 直接访问。

    普通的内部类是不能够直接被外部所访问的,需要通过外部类实例再找到内部类实例。

    7、  HashMap和Hashtable的区别。

    HashMap

           |-JDK1.2之后推出,是新的类。

           |-采用异步处理方式,性能较高,但是属于非线程安全。

           |-允许设置null。

           Hashtable

           |-JDk1.0时推出,是旧的类。

           |-采用同步处理方式,性能较高,但是属于线程安全。

           |-不允许设置null,否则将出现NullPointerException。

    8、  什么时候用assert?

    JDK1.4之后增加的新关键字——assert,表示断言,既程序执行到某个地方之后值肯定是预计好的。

    一般开发中很少使用assert。

    要想使用断言,则必须使用-ea参数。

    9、  GC是什么?为什么要有GC?

    GC:垃圾收集

    使用GC可以进行垃圾空间的释放操作。

    10、sleep()和wait()有什么区别?

           sleep()是Thred类中定义的方法,表示线程的休眠,会自动唤醒。

           wait()是Object中定义的方法,需要手工调用notify()或notifyAll()方法。

    11、String s = new String(“xyz”); 创建了几个String Object?

           产生了两个实例化对象,一个是匿名对象“xyz”,另外一个是通过关键字new实例化的。

    12、Java有没有goto?

           goto属于保留的关键字,java中存在goto,知识无法使用。

    13、数组有没有length()这个方法?String有没有length()这个方法?

           数组中存在length的属性,String中存在length()方法。

    14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

           ·重载:overload

           在一个定义的若干方法。

           所有的方法名称相同,但是参数的类型或个数不同

           ·腹泻:override

           在继承的关系中。

           在类定义了与父类同名的方法,参数类型或个数最好完全一样,注意访问权限不能更加严格。

           ·重载的时候不是依靠返回值类型区分的,而是靠参数。

    15、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?使用==还是equals()?他们有何区别?

           依靠hashCode()和equals()两个方法完成,==属于地址值比较,儿equals()属于内容比较。使用的是equals()方法。

    16、列举出常见的runtime exception。

           NumberFormatException、ArrayOutIndexofBoundException、NullPointerException、ClassCastException

    17、abstract class和interface有什么区别?

           ·抽象类

           由抽象方法和常量、变量、全局常量、构造方法、普通方法组成。

           使用abstract声明。

           子类要通过extends继承抽象类,子类如果不是抽象类,则必须覆写抽象类中的全部抽象方法。

           存在单继承局限,一个子类只能继承一个抽象类。

           抽象类可以实现若干个接口。

           ·接口

           全部由抽象方法和全局变量组成。

           使用interface声明

           子类通过implements实现接口,子类如果不是抽象类,则必须覆写抽象类中的全部抽象方法。

           不存在单继承局限,一个子类可以实现多个接口。

           接口不能继承一个抽象类,但是允许继承多个接口。

    18、启动一个线程是用run()还是start()?

           使用start()方法,因为要通知JVM进行CPU资源的分类。

    19、 try{}里有一个return语句,那么紧跟在这个try{}后的finally{}里的code是不会被执行,什么时候被执行,在return前还是后?

           会执行,在return之前执行,只要是finally{}的代码永远会被执行。

    20、编程题:写一个Singleton出来(单例设计模式)。

           ·核心就是构造方法私有化。

           写上包名

           class单词的首字母要大写

    package org.pzx.demo;

    public class Singleton{

    private static final Singletonsin = new Singleton(); ——在内部产生singleton()对象

    private Singleto(){       }                                          ——将构造方法私有化

                public static Singleton getInstance(){                  ——通过静态方法renturn sin

    return sin;

    }

    }

    21、编一段代码,实现在控制台输入一组数字后,排序后在控制台输出。

           ·假设数字中间使用“”进行分割,既然要排序,则可以使用集合保存,使用TreeSet保存。

    package org.pzx.demo;

    import java.io.BufferedReader;

    import java.io.InputStremReader;

    import java.util.Iterator;

    import java.util.Set;

    import java.util.TreeSet;

    public class Demo{

                  public static void main(String args[]) throws Exception{

                                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

                                System.out.print("请输入一组数据,中间使用空格分隔:");

                                String str = buf.readLine();

                                Set<Integer> set = new TreeSet<Integer>();

                                String s[] = str.split(" ");//进行拆分

                                for (String x : s){

                                              set.add(Integer.parseInt(x));//加入数据

                                }

                                System.out.println("排序之后的结果是:");

                                Iterator<Integer> iter = set.iterator();

                                while(iter.hasNext()){

                                              System.out.print(iter.next() + "、");

                                }

                  }

    }

    以上的操作中,因为所有的数据都已经架设是正确的数字,但是实际中可能是字符串。

    ·第一种方法:允许有字符串,但是将所有的字符串忽略。

    ·第二种方法:不允许有字符串,如果出现了字符串,则程序不再向下继续执行。

    为程序改善功能:第二种方法

    package org.pzx.demo;

    import java.io.BufferedReader;

    import java.io.InputStremReader;

    import java.util.Iterator;

    import java.util.Set;

    import java.util.TreeSet;

    public class Demo{

                  public static void main(String args[]) throws Exception{

                                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

                                System.out.print("请输入一组数据,中间使用空格分隔:");

                                String str = buf.readLine();

                                Set<Integer> set = new TreeSet<Integer>();

                                String s[] = str.split(" ");//进行拆分

                                for (String x : s){

                                              if(x.matches("\\d+")){

                                              set.add(Integer.parseInt(x));//加入数据

                                              }

                                }

                                System.out.println("排序之后的结果是:");

                                Iterator<Integer> iter = set.iterator();

                                while(iter.hasNext()){

                                              System.out.print(iter.next() + "、");

                                }

                  }

    }

    为程序改善功能:第一种方法

    package org.pzx.demo;

    import java.io.BufferedReader;

    import java.io.InputStremReader;

    import java.util.Iterator;

    import java.util.Set;

    import java.util.TreeSet;

    public class Demo{

                  public static void main(String args[]) throws Exception{

                                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

                                System.out.print("请输入一组数据,中间使用空格分隔:");

                                String str = buf.readLine();

                                Set<Integer> set = new TreeSet<Integer>();

                                String s[] = str.replaceAll("\\D+", "").trim()split(" +");//进行拆分

                                for (String x : s){

                                              set.add(Integer.parseInt(x));//加入数据

                                }

                                System.out.println("排序之后的结果是:");

                                Iterator<Integer> iter = set.iterator();

                                while(iter.hasNext()){

                                              System.out.print(iter.next() + "、");

                                }

                  }

    }

    22、列出某文件夹下的所有文件。

           ·递归调用

    package org.pzx.demo;

    import java.io.Files;

    public class ListFiles{

                  public static void main(Strign args[]){

                                File file = new File("D:"+File.separator+"doc");

                                fun(file);

                  }

                  public static void fun(File file){

                                if(file.isDirectory()){

                                              File f[]=file.listFiles();

                                              if(f != null){

                                                            for (int x = 0;x < f.length;x++){

                                                            fun(f[x]);

                                                            }

                                              }

                                }else{

                                              System.out.println(file);

                                }

                  }

    }

    23、char型变量中能不能存贮一个中文汉字?为什么?

           ·可以存放,因为使用的是unicode编码。

    24、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

           ·两种实现方法,继承Thread类,实现Runnable接口

           |-Thread类是Runnable接口的子类。

    |-使用Runnable接口可以实现资源共享的目的

    |-所有的线程操作都必须通过Thread类的Start()方法启动

    ·两种实现同步的方法:

    |-同步代码块:Synchronized(this){}

    |-同步方法

    25、float型 float f=3.4是否正确?

           ·不正确,默认情况下3.4是double类型的数据。

    26、String与StringBuffer区别?

           ·String不可修改,StringBuffer允许修改。

    27、Class.forName的作用?为什么要用?

           Class.forName属于向容器之中加载驱动程序。

    28、int和Integer区别?

           int是基本数据类型,Integer是包装类

           在JDK1.5之后,可以实现自动装箱及拆箱的操作。

    29、用最有效的方法算出2乘以8等于几?

           使用移位操作:2<<3

    30、请说出类集框架的完整结构。

           ·类集框架最大的接口:Collection、Map、Iterator、Enumeration

           ·Collection:存放单值

                  |-List:允许有重复内容

                         |-ArrayList:一步处理,新的操作类,非线程安全

                         |-Vector:同步处理,旧的操作类,线程安全,支持Enumeration输出

                  |-Set:不允许有重复内容,靠hashCode()和equals()进行重复的验证

           ·Map:存放一对值

                  |-HashMap:新的类,异步处理,非线程安全,允许有null

                  |-Hashtable:旧的类,同步处理,非线程安全,不允许有null

                         |-Properties:属性操作类

                  |-TreeMap:有序排列,按key排序,根据Comparable制定排序规则

           ·Iterator:

                  |-迭代输出,依靠Collection接口中的Iterator方法输出,是新的输出标准

           ·Enumeration:旧的输出操作。

    31、是否可以继承String类?

           ·不允许,因为使用了final声明。

  • 相关阅读:
    SQL Server中的事务与锁
    delphi中 dataset容易出错的地方
    Ehlib(Delphi控件) v9.2.024 D7-XE10.2 免费绿色特别版
    Delphi (Library Path Browsing Path)
    XML序列化和反序列化
    C#基础--Attribute(标签) 和 reflect(反射) 应用
    C#特性类的使用
    NOPI使用手册
    【WCF】错误处理(四):一刀切——IErrorHandler
    浅析C#中的事件
  • 原文地址:https://www.cnblogs.com/zhanggaosong/p/2962378.html
Copyright © 2020-2023  润新知