Java基础面试题.doc
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2第四行编译运行通过。如果是常量相加,会直接计算,然后看运算的结果是否在其数据类型所能描述的范围内
、判断下列代码的第二行和第三行编译是否能通过?并说明理由
short s=5;
s=s+2;//报错,变量s参与运算,会自动提升数据类型至int
s+=2;//编译通过。s+=2隐含了强制类型转换,相当于s=(short)(s+2);
System.out.println(il == i2); //false
—、JDK与JRE有什么区别?答:®JDK: Java开发工具包,包括Java开发工具和JRE。
2JRE:Java运行环境,包括运行Java程序所需的核心类库和JVM。
3JVM:Java虚拟机,保证Java程序的跨平台性。
总结:由JDK开发的Java程序,交给JRE来运行,并由JVM来保证Java程序的
2length是属性,用来获取数组的长度
3length()是个方法,用来获取字符串的长度
十二、
1.public static void main(String[] args)
{
String s = "abc";
change(s);
System.out.println(s);
}
public static void change(String s)
{
public static void main(String[] args)
{
Zi z = new Zi();
Zi z2二new Zi();
}
}
如果子父类中都有静态代码块,构造代码块,构造方法,那么执行顺序为?
父类的静态代码块-->子类的静态代码块-->父类的构造代码块-->父类的构造方
法-->子类的构造代码块-->子类的构造方法
注意:静态代码块只加载一次(.class字节码文件只加载一次的情况下)
Fu静态代码块zi静态代码块
Fu构造代码块
Fu构造方法
zi构造代码块
zi构造方法
Fu构造代码块
Fu构造方法zi构造代码块zi构造方法
八、方法重载和方法重写有什么区别?
1方法重载:同一个类中,出现方法名相同、参数列表不同的两个或多个方法时,
extends Fu
/L箔
static
•瓠、
system.outprintln(Ni®^^ffiM:);
"构造代码块
{
System.out.println("zi构造代码块");
}
public Zi()
{
System.out.printlnC'zi构造方法");
}
}
class BlockCodeDemo2
a=a-b;
七、写出下面程序的运行结果
class Fu
//靈ts
stபைடு நூலகம்tic
{
system.out.printlncFU鄕eHfts^:);
}
//隱窪>l±
{
system.outprintlncFU^BftaM--);
}
public ?()
:lass Zi
•入、
system.out.printlncFU甚蹄^w=);
是字符串对象,一但初始化就不会被改变。
2.public static void main(String[] args) {
String si = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == si + s2);
System.out.println(s3 == "a" + "b");
}
常量相加,直接累加,然后再常量池里找有没有,有结果就是常量池的值。
而变量相加,需要重新在常量池里开辟空间,然后把si、s2替换为"a"、"b",
进行连接,形成一个新的"ab"对象,和s3内容相同,但属于不同的空间即不同的对象,十三、
Integer il=new Integer(127);
Integer i2 = new Integer(127);
五、请用高效的形式写出:2*8
2<<3
六、如何交换两个变量?
①用第三方变量来做(开发做)int temp=a;
a = b;
b = temp;
②用按位异或来做(面试做)按位异或的特性:一个数据对另一个数据异或两次,又变回原本的值。
a=aAb;
b=aAb;
a=aAb;
3用算术运算符
a=a + b;
b=a-b;
4一个字节截取的补码为10000010
5补码10000010的反码为10000001⑥反码10000001的原码为11111110,计算结果为-126
三、判断下面代码第三行和第四行编译会出现问题吗?
byte bl=3;
byte b2=4;
byte b3=bl+b2 ;
byte b4=3+4;
1第三行会出现问题。如果是变量相加,首先会自动提升数据类型,然后再运算。
{
s + = "hello";
把"abc"在String常量池的地址值传递进去,change方法里的s对象指向了"
abc",然后和"hello"连接形成新的字符串"abchello",把新的字符串"abchello"
的地址值赋给change方法里的s,但main方法的s还是指向"abc",因为〃abc"
跨平台性。
二、byte b=(byte)130;的运行结果是?
1130的原码:00000000 000000000000000010000010
2130的反码:00000000 000000000000000010000010
3130的补码:00000000 000000000000000010000010
十、si、s2有区别吗?
String si = new String("abcH);
String s2 = "abc";
答:第一种方式:在内存中存在两个对象,一个在堆内存中中;第二种方式:在内存中只有一个对象,在String常量池中,
i■—、length和length()这两个关键字的区别?
答:①它们都不是关键字
即构成方法重载。
2方法重写:子父类间,出现一模一样的方法时,被称为方法的重写,或者复写、覆盖。也就是要求返回值类型、方法名、参数列表都一致,
dayl2
九、如何理解字符串一旦初始化就不可以被改变。
String s="hello";
s+ ="world";
System.out.println(s);
解释:字符串一旦被初始化就不能被改变,说的不可以改变的是hello这个字符串在常量池中的值不可以被改变,而非s这个引用不能改变
、判断下列代码的第二行和第三行编译是否能通过?并说明理由
short s=5;
s=s+2;//报错,变量s参与运算,会自动提升数据类型至int
s+=2;//编译通过。s+=2隐含了强制类型转换,相当于s=(short)(s+2);
System.out.println(il == i2); //false
—、JDK与JRE有什么区别?答:®JDK: Java开发工具包,包括Java开发工具和JRE。
2JRE:Java运行环境,包括运行Java程序所需的核心类库和JVM。
3JVM:Java虚拟机,保证Java程序的跨平台性。
总结:由JDK开发的Java程序,交给JRE来运行,并由JVM来保证Java程序的
2length是属性,用来获取数组的长度
3length()是个方法,用来获取字符串的长度
十二、
1.public static void main(String[] args)
{
String s = "abc";
change(s);
System.out.println(s);
}
public static void change(String s)
{
public static void main(String[] args)
{
Zi z = new Zi();
Zi z2二new Zi();
}
}
如果子父类中都有静态代码块,构造代码块,构造方法,那么执行顺序为?
父类的静态代码块-->子类的静态代码块-->父类的构造代码块-->父类的构造方
法-->子类的构造代码块-->子类的构造方法
注意:静态代码块只加载一次(.class字节码文件只加载一次的情况下)
Fu静态代码块zi静态代码块
Fu构造代码块
Fu构造方法
zi构造代码块
zi构造方法
Fu构造代码块
Fu构造方法zi构造代码块zi构造方法
八、方法重载和方法重写有什么区别?
1方法重载:同一个类中,出现方法名相同、参数列表不同的两个或多个方法时,
extends Fu
/L箔
static
•瓠、
system.outprintln(Ni®^^ffiM:);
"构造代码块
{
System.out.println("zi构造代码块");
}
public Zi()
{
System.out.printlnC'zi构造方法");
}
}
class BlockCodeDemo2
a=a-b;
七、写出下面程序的运行结果
class Fu
//靈ts
stபைடு நூலகம்tic
{
system.out.printlncFU鄕eHfts^:);
}
//隱窪>l±
{
system.outprintlncFU^BftaM--);
}
public ?()
:lass Zi
•入、
system.out.printlncFU甚蹄^w=);
是字符串对象,一但初始化就不会被改变。
2.public static void main(String[] args) {
String si = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == si + s2);
System.out.println(s3 == "a" + "b");
}
常量相加,直接累加,然后再常量池里找有没有,有结果就是常量池的值。
而变量相加,需要重新在常量池里开辟空间,然后把si、s2替换为"a"、"b",
进行连接,形成一个新的"ab"对象,和s3内容相同,但属于不同的空间即不同的对象,十三、
Integer il=new Integer(127);
Integer i2 = new Integer(127);
五、请用高效的形式写出:2*8
2<<3
六、如何交换两个变量?
①用第三方变量来做(开发做)int temp=a;
a = b;
b = temp;
②用按位异或来做(面试做)按位异或的特性:一个数据对另一个数据异或两次,又变回原本的值。
a=aAb;
b=aAb;
a=aAb;
3用算术运算符
a=a + b;
b=a-b;
4一个字节截取的补码为10000010
5补码10000010的反码为10000001⑥反码10000001的原码为11111110,计算结果为-126
三、判断下面代码第三行和第四行编译会出现问题吗?
byte bl=3;
byte b2=4;
byte b3=bl+b2 ;
byte b4=3+4;
1第三行会出现问题。如果是变量相加,首先会自动提升数据类型,然后再运算。
{
s + = "hello";
把"abc"在String常量池的地址值传递进去,change方法里的s对象指向了"
abc",然后和"hello"连接形成新的字符串"abchello",把新的字符串"abchello"
的地址值赋给change方法里的s,但main方法的s还是指向"abc",因为〃abc"
跨平台性。
二、byte b=(byte)130;的运行结果是?
1130的原码:00000000 000000000000000010000010
2130的反码:00000000 000000000000000010000010
3130的补码:00000000 000000000000000010000010
十、si、s2有区别吗?
String si = new String("abcH);
String s2 = "abc";
答:第一种方式:在内存中存在两个对象,一个在堆内存中中;第二种方式:在内存中只有一个对象,在String常量池中,
i■—、length和length()这两个关键字的区别?
答:①它们都不是关键字
即构成方法重载。
2方法重写:子父类间,出现一模一样的方法时,被称为方法的重写,或者复写、覆盖。也就是要求返回值类型、方法名、参数列表都一致,
dayl2
九、如何理解字符串一旦初始化就不可以被改变。
String s="hello";
s+ ="world";
System.out.println(s);
解释:字符串一旦被初始化就不能被改变,说的不可以改变的是hello这个字符串在常量池中的值不可以被改变,而非s这个引用不能改变