1、作用域public,private,protected,以及不写时的区别 
public 所有类可以访问
Private类内部访问
Protected 不仅同包内访问,其他包的子类可以访问
不写(friendly)同包内访问
2、ArrayList和Vector的区别,HashMap和Hashtable的区别 
(1).同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
.数据增长:当需要增长时,Vector默认增长为原来一倍,而ArrayList却是原来的一半
(2)Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 
只有HashMap可以让你将空值作为一个表的条目的key或value
3、char型变量中能不能存贮一个中文汉字?为什么? 
可以,因为java用的是unicode编码集,一个汉字就是一个unicode编码,占两个字节,而char型变量一般就储存两个字节的字符,所以,可以存贮一个中文汉字。
4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 
有两种方法:实现Runable接口  继承Thread
有同步块和同步方法
5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 
父类: 
package test; 
public class FatherClass 

public FatherClass() 

System.out.println("FatherClass Create"); 


子类: 
package test; 
import test.FatherClass; 
public class ChildClass extends FatherClass 

public ChildClass() 

System.out.println("ChildClass Create"); 

public static void main(String[] args) 

FatherClass fc = new FatherClass(); 
ChildClass cc = new ChildClass(); 


输出结果是什么? 
C:>java test.ChildClass 
FatherClass Create
FatherClass Create
ChildClass Create6、内部类的实现方式? 
(1)示例代码如下: 
package test; 
public class OuterClass 

private class InterClass 

public InterClass() 

System.out.println("InterClass Create"); 


public OuterClass() 

InterClass ic = new InterClass(); 
System.out.println("OuterClass Create"); 

public static void main(String[] args) 

OuterClass oc = new OuterClass(); 


输出结果: 
C:>java test/OuterClass 
//没有输出结果
(2): 有如下内部类
public class OuterClass { 
private double d1 = 1.0; 
//insert code here 

如果你在第三行插入一个内部类,如下那个内部类的声明是有效的(c)
A. class InnerOne{ 
public static double methoda() {return d1;} 

B. public class InnerOne{ 
static double methoda() {return d1;} 

C. private class InnerOne{ 
double methoda() {return d1;} 

D. static class InnerOne{ 
protected double methoda() {return d1;} 

E. abstract class InnerOne{ 
public abstract double methoda(); 
} 9、float型float f=3.4是否正确? 
不正确,应该是float f=3.4f
10、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? 
Collection FrameWork如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements) Map提供key到value的映射
11、Java中异常处理机制,事件机制? 
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回
12、抽象类与接口的区别? 
抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。
13、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在COLLECTION框架中,实现比较要实现什么样的接口? 
答:用插入法进行排序代码如下 
package test; 
import java.util.*; 
class InsertSort 

ArrayList al; 
public InsertSort(int num,int mod) 

al = new ArrayList(num); 
Random rand = new Random(); 
System.out.println("The ArrayList Sort Before:"); 
for (int i=0;i<num ;i++ ) 

al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); 
System.out.println("al["+i+"]="+al.get(i)); 


public void SortIt() 

Integer tempInt; 
int MaxSize=1; 
for(int i=1;i<al.size();i++) 

tempInt = (Integer)al.remove(i); 
if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) 

al.add(MaxSize,tempInt); 
MaxSize++; 
System.out.println(al.toString()); 
} else { 
for (int j=0;j<MaxSize ;j++ ) 

if 
(((Integer)al.get(j)).intValue()>=tempInt.intValue()) 

al.add(j,tempInt); 
MaxSize++; 
System.out.println(al.toString()); 
break; 




System.out.println("The ArrayList Sort After:"); 
for(int i=0;i<al.size();i++) 

System.out.println("al["+i+"]="+al.get(i)); 


public static void main(String[] args) 

InsertSort is = new InsertSort(10,100); 
is.SortIt(); 

} 15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。 
package test; 
class SplitString 

String SplitStr; 
int SplitByte; 
public SplitString(String str,int bytes) 

SplitStr=str; 
SplitByte=bytes; 
System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte); 

public void SplitIt() 

int loopCount; loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split 
Byte+1); 
System.out.println("Will Split into "+loopCount); 
for (int i=1;i<=loopCount ;i++ ) 

if (i==loopCount){ System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); 
} else { System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); 



public static void main(String[] args) 

SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 
0ewldfls=103",4); 
ss.SplitIt(); 

}
16、JAVA多线程编程。 用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。 

17、STRING与STRINGBUFFER的区别。
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
18、谈谈final, finally, finalize的区别。
 final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
19、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
20、静态内部类 和 内部类的不同,说得越多越好(面试题有的很笼统)。
和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。 
除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。

解决方案 »

  1.   

    java的char型数据是双字节的
    今天才知道,以前还以为和c++一样:一个字节呢。
      

  2.   


    不错 谢谢分享                               Thank you very much!!
      

  3.   

    我编译了一下你上面的InsertSort.java系统出现了下面的提示:
    注意:InsertSort.java 使用了未经检查或不安全的操作。运行不成功~~~怎么回事?
      

  4.   

    楼主可以尝试一下,下面代码有问题
    (1)示例代码如下: 
    package test; 
    public class OuterClass 

    private class InterClass 

    public InterClass() 

    System.out.println("InterClass Create"); 


    public OuterClass() 

    InterClass ic = new InterClass(); 
    System.out.println("OuterClass Create"); 

    public static void main(String[] args) 

    OuterClass oc = new OuterClass(); 


    输出结果: 
    C:>java test/OuterClass 
    //没有输出结果 
      

  5.   

    public class OuterClass 

    private class InterClass 

    public InterClass() 

    System.out.println("InterClass Create"); 


    public OuterClass() 

    InterClass ic = new InterClass(); 
    System.out.println("OuterClass Create"); 

    public static void main(String[] args) 

    OuterClass oc = new OuterClass(); 


    有结果输出
    InterClass Create
    OuterClass Create
      

  6.   

    15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。 
    ***************************************
    楼主实现有点复杂,代码好多,我没有全看,因为代码太多了,其实我没有看明白!呵呵
    我的实现是这样的:
        
        问题情景:在字符串中,一个英文字符占位一个字节,而一个汉字却占位两个字节,截取字符串字串的时候是按照字节数量来截取的,所以会出现以上问题
                  有可能截取到半个汉字
        问题解决:如果在字符串里,英文字符和汉字的占位字节是一样的,那么就不会出现这样的问题,我们是否能找到一种转换方法呢?使得英文占位字节数和汉字占位字节数一致,那么问题就能得到很好的解决,其实我们刚开始学java的时候就知道了Java中的char类型的字符是占位两个字节的。那么问题已经解决。
       
          
         算法:
             输入: 字符串,截取的长度;
            1.把字符串转换成char类型的数组(关键转换)
            2.取数组里的等长度字符
            3.构建新串并返回  代码示例以及测试:   public class OuterClass 

       public static String cutString(String str,int length){
       char[] b = str.toCharArray();//把字符串转换成char类型的数组
       String s = new String (b,0,length);//取数组里的等长度字符
       
       return s;
       }
       public static void main(String[] args){
       System.out.println(cutString("wo是好人abc",5));
       }
    }  
    输出:wo是好人另外一种实现方法:public class OuterClass 

       public static String cutString(String str,int begin,int end){
       char[] b = str.toCharArray();
       String s = new String (b,begin,end-begin);//注意点end-begin
       
       return s;
       }
       public static void main(String[] args){
       System.out.println(cutString("wo是好人abc",3,5));
       }
    } 输出:好人