头图

百万Java 面试题整理(1.0)

马小乎

Java面试题整理
Java 面向对象
image.png

  1. super()与this()的区别?
    This():当前类的对象,super 父类对象。
    Super():在子类访问父类的成员和行为,必须受类继承规则的约束而this 他代表当前对象,当然所有的资源都可以访问.
    在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数
    的构造函数,或这个函数被私有化了(用 private 修饰).此时你必须加入对父类的实例化构造.而 this 就没有这个要求,因为它本身就进行实例化的构造.
    而在方法中super 和this 使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
  2. 作用域public,protected,private, 以及不写时的区别?
    Public:不同包、同一包、类内都可用
    Private:类内
    Protected: 不同包的子类、同一包、类内都可用
    不写时:同一包内、类内
  3. 编程输出如下图形?


    • *
  4. *
    *
    代码如下:
    public class Print {
    public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
    for (int j = 5; j > i; j--) {
    System.out.print("*");
    }
    System.out.println();
    }
    }
    }
  5. JAVA 的事件委托机制和垃圾回收机制
    java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。
    垃圾回收机制 垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为 null,则次对象适合进行垃圾回收
  6. 在JAVA 中,如何跳出当前的多重嵌套循环?
    用 break; return 方法。
  7. 什么是java 序列化,如何实现 java 序列化?(写一个实例)
    序列化:
    可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内容读取,转化为一个对象。
    处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
    序列化的实现:
    将需要被序列化的类实现 Serializable 接口,该接口没有需要实现的方法, implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出(即保存其状态),要恢复的话则用输入流。
  8. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
    可以。如果这个类的修饰符是public,其类名与文件名必须相同。
  9. 排序都有哪几种方法?请列举。用JAVA 实现一个快速排序?
    排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。
  10. Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?
    方法的
    重写 Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。
    重载Overloading 一个类多个方法,名称相同,参数个数类型不同。
    两者都是Java 多态性的不同表现。Overloaded 的方法是可以改变返回值的类型。
    1, public class Ctest()
    {
    Public static void main()
    {
    System.out.prinln(8+8+”88”+8+8);
    }
    }
    168888
  11. Final 类有什么特点?
    属性常量
    方法不可以 overridding
    类不可以继承
  12. 继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么.
    答 : 父 类 :
    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 Create
  13. 内部类的实现方式?
    答:示例代码如下:
    package test;
    public class OuterClass
    {
    private class InterClass
    {
    Public Interlass()
    {
    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
    InterClass Create
    OuterClass Create
    13.用JAVA 实现一种排序,JAVA 类实现序列化的方法(二种)?
  14. 如在COLLECTION 框架中,实现比较要实现什么样的接口?
    Collection 框架中实现比较要实现Comparable 接口和 Comparator 接口
  15. 用插入法进行排序代码如下
    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();
    }
    }
    JAVA 类实现序例化的方法是实现java.io.Serializable 接口
  16. 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我 ABC"4,应该截为"我 AB", 输入"我ABC 汉 DEF",6,应该输出为"我ABC" 而不是"我 ABC+汉的半个"。
    public static void split(String source,int num) throws Exception
    {
    int k=0;
    String temp="";
    for (int i = 0; i <source.length(); i++)
    {
    byte[] b=(source.charAt(i)+"").getBytes(); k=k+b.length;
    if(k>num)
    {
    break;
    }
    temp=temp+source.charAt(i);
    }
    System.out.println(temp);
    }
    17.Java 编程,打印昨天的当前时刻
    public class
    YesterdayCurrent{ public void
    main(String[] args){
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, -1); System.out.println(cal.getTime());
    }
    }
    18.文件读写,实现一个计数器
    public int getNum(){ int i = -1;
    try{
    String stri="";
    BufferedReader in = new BufferedReader(new FileReader(f)); while((stri=in.readLine())!=null){
    i = Integer.parseInt(stri.trim());
    }
    in.close();
    }catch(Exception e){ e.printStackTrace();
    }
    return i;
    }
    public void setNum(){ int i = getNum(); i++;
    try{
    PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false))); out.write(String.valueOf(i)); //可能是编码的原因,如果直接写入 int 的话,将出现java 编码和windows 编码的混乱,因此此处写入的是String
    out.close() ;
    }catch(Exception
    e){ e.printStackTrac
    e();
    }
    19.指出下面程序的运行结果。
    class A{ static{
    System.out.print("1");
    }
    public A(){ System.out.print("2");
    }
    }
    class B extends A{ static{ System.out.print("a");
    }
    public B(){ System.out.print("b");
    }
    }
    public class Hello{
    public static void main(String[] ars){ A ab = new B(); //执行到此处,结果: 1a2b ab = new B(); //执行到此处,结果: 1a2b2b
    }
    }
    注:类的 static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造extends (2)接口只有定义,抽象类可以有定义和实现
    (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
    20.抽象类和接口的区别?
    (1)接口可以被多重 implements,抽象类只能被单一extends (2)接口只有定义,抽象类可以有定义和实现
    (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
    当功能需要累积时用抽象类,不需要累积时用接口。
    21.什么是类的反射机制?
    通过类(Class 对象),可以得出当前类的 fields、method、construtor、interface、superClass、modified 等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring 中一切都是返射、struts、hibernate 都是通过类的返射进行开发的。
    22.类的反射机制中的包及核心类?
    u java.lang.Class
    u java.lang.refrection.Method
    u java.lang.refrection.Field
    u java.lang.refrection.Constructor
    u java.lang.refrection.Modifier
    u java.lang.refrection.Interface
    23.得到Class 的三个过程是什么?
    对象.getClass()
    类.class 或 Integer.type(int) Integer.class(java.lang.Integer) Class.forName();
    24.如何唤起类中的一个方法?
    产生一个Class 数组,说明方法的参数
    通过Class 对象及方法参数得到Method
    通过method.invoke(实例,参数值数组)唤醒方法
    25.如何将数值型字符转换为数字(Integer,Double)?
    Integer.parseInt(“1234”)
    Double.parseDouble(“123.2”)
    26.如何将数字转换为字符?
    1+””
    1.0+””
    27.如何取小数点前两位,并四舍五入。
    double d=1256.22d;
    d=d/100;
    System.out.println(Math.round(d)*100);
    image.png
    有需要全部文件的麻烦关注点赞私信我
阅读 595

1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
文章目录
宣传栏