Java程序员面试宝典-零碎知识汇总二

11.finally{}中的代码总是会执行,当try{}中中有return语句时, finally{} 代码执行于return之前,因为一个函数return之后就会销毁。

 


 

12.静态变量

实例变量,每个实例都有一个。

静态变量,每个类只有一个,所有类的实例都共用一个。

静态变量会在该类的任何静态方法执行之前就初始化,并且赋初始值。

 


 

13.定义在类中的变量会被赋予一个默认的值,boolean型默认初始值为false.


 

 

14.获取键盘输入

一、使用BufferedReader获取键盘输入

class InputData{

    static private String s = "";

    static public void input(){

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

        try{

            s = bu.readLine();

        }

        catch(IOException e){}

    }

   

    static public int getInt(){

        input();

        return Integer.parseInt(s);

    }

}

调用BufferedReader.readLine()方法来获取输入。

二、使用Scanner获取键盘输入

Scanner对象附属于“System.in”,用于控制台输入
Scanner in = new Scanner(System.in);

然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型: nextByte(),nextDouble(),nextFloat,nextInt(),nextLin(),nextLong(),nextShot() 

上述方法执行时会等待用户在命令行输入数据回车确认。

常用函数用法:

拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false;

NextLine()等待用户输入一个文本行并且回车,该方法得到一个String类型的数据。

Scanner cin = new Scanner(System.in);

long a = cin.nextLong();


 

 

15.递归问题:将一个数组中的数组合全部列出,例如1和2列出来为1,2,12,21.

循环递归代码如下:

import java.io.*;

import java.util.*;

 

public class Test{

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

        String [] array = new String []{"1","2","3","4"};

        listAll(Arrays.asList(array), "");

    }

   

    public static void listAll(List candidate,String prefix){

        System.out.println(prefix);

        //System.out.println("循环前candidate.size():"+candidate.size());

       

        for(int i=0; i<candidate.size(); i++){

            //System.out.println("循环后candidate.size():"+candidate.size());

            List temp = new LinkedList(candidate);

            listAll(temp, prefix + temp.remove(i));

        }

    }

}

递归过程:

 

队列[2,3,4]的意思为执行i=0循环后,链表temp中的值;打印[1]表示在执行i=0这次循环时,所打印出的值为1。

i=2和i=3的过程与之类似,就不作说明了。

因此,最终输出结果为: 

 

 



 

16.内存泄漏 (通常OutOfMemoryError)

内存托管语言中产生内存泄漏的主要原因:保留下来却永远不再使用的对象引用。

在Java中,内存的分配是由程序完成的,而内存的释放是由GC完成的。释放对象的根本原则就是该对象不再被引用。

当局部变量不再使用时,没有必要将其显式地设置为null,对这些变量的引用将随着方法的退出而自动清除。


 

 

17.对象和实例

对象是同类事物的一种抽象表现形式,而实例是对象的具体化。

静态方法不用实例化就可以调用,它是为类提供的公共方法,当一个方法被该类的所有对象都共有时,就应定义为静态方法。



 

18.Java集合体系 

 

有序否

允许元素重复否

Collection

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉树排序)

Map

AbstractMap

使用key-value来映射和存储数据,Key必须惟一,value可以重复

HashMap

TreeMap

是(用二叉树排序)

List、Set、Map是集合体系中最主要的三个接口。

其中List和Set继承自Collection接口。

Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。

List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。

Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。

HashMap和Hashtable差别不大,最大的不同是,Hashtable是同步的,而HashMap不是。

SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。

 


 

 

19.构造函数没有返回值

构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。

构造函数和析构函数由编译器来调用以确保它们被执行.如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了.

构造函数的调用之所以不设返回值,是因为构造函数的特殊性决定的。从基本语义角度来讲,构造函数返回的应当是所构造的对象


 

 

20.派生类必须通过super调用父类的含有参数的构造函数。若不指定,就会调用无参数的构造函数。

posted @ 2015-10-14 21:21  剑芒  阅读(144)  评论(0编辑  收藏  举报