黑马程序员技术交流社区

标题: java基础班可以看的java基础面试题 [打印本页]

作者: 画问好送明天    时间: 2015-8-28 01:30
标题: java基础班可以看的java基础面试题
1)java基础部分
Q:Java面向对象有哪些特征?
A:封装、继承、多态。
Q:short s1=1;s1=s1+1有什么错?
      short s1=1;s1+=1;有什么错?
A:第一个是有错的,short在内存中占2个字节,而整数1默认为int型占4个字节,s1+1其实这个时候就向上转型为int类型了,因此第一行代码必须强转才行。第二个之所以可以是以为这句话翻译过来就是s1++,也就是short类型的数据自身加增1,因此不会有问题。
Q:静态成员类、非静态成员类有什么区别?什么是匿名内部类?
A:静态成员类相当于外部类的静态成员,是外部类在加载的时候进行初始化,非静态成员类相当于外部类的普通成员,当外部类创建对象的时候才会初始化。匿名内部一般都是在方法里面直接通过new ClassName(){};形式的类。比如我们new Thread(new Runnable(){}).start();就用到了匿名内部类。
Q:abstract class 和 interface有什么区别?
A:前者是抽象类,可以有抽象方法,也可以没有。后者是接口,只能有抽象方法。他们都不能创建对象,需要被继承。
Q:ArrayList是不是线程安全的?如果不是,如何是ArrayList成为线程安全的?
A:不安全的。可以使用Collections.synchronizedList(list)将list变为线程安全的。
Q:是否可以继承String类?
A:不可以,因为String类是final类。为啥不解释了吧。
Q:以下两条语句返回值为true的有:
     A:"yiyaowang"=="yiyaowang";
     B:   "yiyaowang".equals(new String("yiyaowang"));
A:第一个返回true,都是字符串常量,存储在字符串常量池中,且只有一份。第二个返回true,用equals比较的是字符串内容。
Q:当一个对象被当做参数传递到一个方法后,此方法可以改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
A:java中只有值传递,没有引用传递。这里的引用本身就是值,传递的是引用这个值。
Q:定义类A和类B如下:

    class A{
            int a =1;
            double d = 2.0;
            void show(){
                    System.out.println("Class A:a="+a+"\td="+d);
            }
    }
    class B extends A{
            float a = 3.0f;
            String d = "Hello World!";
            void show(){
                    super.show();
                    System.out.println("Class B:a="+a+"\td="+d);
            }
    }

复制代码
(1)若在应用程序的main方法中有以下语句:
    A a = new A();
    a.show();
    则输出结果是?
(2)若在应用程序的main方法中定义类B的对象b:
    A b = new B();
   b.show();
   则输出结果是?
A:第一个是ClassA :a=1     d=2.0
     第二个是ClassA :a =1    d=2.0  
                    ClassB : a=3.0   d=Hello World!
Q:heap和stack有什么区别?
A:堆和栈。栈存放对象的引用,堆存放对象实体。堆中的对象是有jvm的垃圾回收器负责回收。
Q:请描述下JVM加载class文件的原理机制。
A:JVM加载class是动态性的,也就是当“需要”的时候才会加载,这是也是为节约JVM内存来考虑的。同时JVM的类加载是父类委托机制,这个机制简单来讲,就是“类装载器有载入类的需求时,会先请示其Parent使用其搜索路径帮忙载入,如果Parent 找不到,那么才由自己依照自己的搜索路径搜索类”。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2