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 找不到,那么才由自己依照自己的搜索路径搜索类”。 |
|