8、Java中public,protected,private,default的区别?
public,protected,private是Java里用来定义成员的访问权限的,另外还有一种是“default”,也就是在成员前不加任何权限修饰符。这四个修饰符的访问权限如下表:
-----------------------------------------------
类内部 package内 子类 package外
public 允许 允许 允许 允许
protected 允许 允许 允许 不允许
default 允许 允许 不允许 不允许
private 允许 不允许 不允许 不允许
-----------------------------------------------
Java的访问控制是停留在编译层的,也就是它不会再class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。
其实,通过反射的手段,是可以访问任何包下任何类中的成员的,例如,访问类的私有成员也是可能的。
9、Java中接口的方法只能是public abstract类型的,可以省略,变量只能是final static类型的,可以省略。
10、Java中equal和==的区别是什么?
首先看一段代码:public class Test1{
public static void main(String args[]){
String a="1234";
String b="1234";
String c = new String("1234");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a.equals(c));
}
}
结果:
true
false
true
首先应该先了解java中String new和直接赋值的区别。
第二个为false的原因在于a和c指向的是不同的对象。==运用在基本数据类型的时候,通过比较他们的实际的值来判定是否相等,而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。通过new来创建的字符串单独生成一个对象,所以a和c指向的不是同一个对象。
equal()方法是java.lang.object的方法,也就是所有的Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判定两个对象是否相等。对于字符串String类来说,他的equal方法用来比较字符串的字符序列是否 完全相等。
11、Java中char的取值范围?
Java中char采用Unicode编码格式,用两个字节来表示一个字符,一共16bit,它所能表示的最大值为2的16次方
12、Java中char能否存储汉字?
char是可以存储汉字的,每个中文字符都有对应的Unicode编码。
13、Java中Overload(重载)和Override(覆盖)的区别
重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型,不关心返回值类型。覆盖,是指在子类中对父类的某方法进行重新定义,其子类的该方法名以及参数位置和个数以及返回值均与父类相同,从而在调用子类的该方法时,不会执行父类的方法。如果在父类中以final定义的方法,在子类中无法重写。
14、以下代码的输出是什么?
public class Test1 {
public Test1() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new B();
System.out.println("----------------");
B b = new B();
}
}
class A{
static{
System.out.println("AAAAAAAAAAAAAA static");
}
public A() {
//super();
System.out.println("AAAAAAAAAAAAAA");
// TODO Auto-generated constructor stub
}
}
class B extends A{
static{
System.out.println("BBBBBBBBBBBBBBB static");
}
public B() {
//super();
System.out.println("BBBBBBBBBBBBBB");
}
}
结果:
AAAAAAAAAAAAAA static
BBBBBBBBBBBBBBB static
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
----------------
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法
15、Java中的几种引用方式:强引用、软引用、弱引用、虚引用的区别?
在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜。这种物品现在已经无用了,保留它会占空间,但是立刻扔掉它也不划算,因 为也许将来还会派用场。对于这样的可有可无的物品,一种折衷的处理办法是:如果家里空间足够,就先把它保留在家里,如果家里空间不够,即使把家里所有的垃 圾清除,还是无法容纳那些必不可少的生活用品,那么再扔掉这些可有可无的物品。
从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。
1) 强引用
平时我们 编程的时候例如:Object object=new Object();那object就是一个强引用了。如果一个对象具有强引用,那就类似于必不可少的生活用品,