java题目整理
来源:互联网 发布:java swing 做登录界面 编辑:程序博客网 时间:2024/06/03 18:09
整理平时遇到的题目.
1.如下会输出什么?
public class Demo1 {public static void main(String[] args) {int c = -128;System.out.println(Integer.toBinaryString(c)); //11111111 11111111 11111111 10000000.short a = 128;byte b = (byte) a;System.out.println(a); //128System.out.println(b);//-128}}
解:java用补码表示,原码反码补码直接的转换关系是:
1.原码:正数第一位用0,负数第一位用1表示,其他位就是其二进制表示,例如 3的原码00000011 -3的 原码 10000011
2.反码:负数原码按位取反(符号位不变)。正数原码本身。 3的反码00000011 -3的反码11111100
3.补码: 负数反码+1,正数原码本身。3的补码是00000011 -3的补码是11111101
所以程序中c为int的-128,-128的原码为10000000 00000000 00000000 10000000,反码为11111111 11111111 11111111 011111111,
补码为11111111 11111111 11111111 10000000.即补码为最终的输出.
下面的两个输出,a是short,2个字节,强转为byte,截取前8位,就变成了10000000,也就是说这是b的补码表示,所以可知其代表的是-128
(这里需要注意10000000的特殊性,按照规则来推的话是退不出-128的,具体的请百度)
2.如下会输出什么?
public class Demo2 {public static void main(String[] args) {System.out.println(~5);}}
解:~ 为取反操作,将-5表示成2进制,取反,得到~5的二进制表示,注意此时是补码,所以从补码推出原码再推出其代表的10进制数:-6
3.Which keyword can protect a class in a package from accessibility by the classes outside the package?
解:default.注意这题不是protected,protected表示子类可以访问,如果子类父类不在一个包也是可以访问的,与题目就矛盾。而default则为只有同一个类或者包里可以访问.
4.如下输出什么?
public class Demo1 {private static final String MESSAGE = "taobao";public static void main(String[] args) {String a = "tao" + "bao";String b = "tao";String c = "bao";final String d = "tao";final String f = "bao";String e = new String("tao"+"bao");System.out.println(a == MESSAGE);System.out.println(e ==MESSAGE);System.out.println((b + c) == MESSAGE);System.out.println((b + c).intern() == MESSAGE);System.out.println((d+f) ==MESSAGE);}}
解:true,false,false,true,true
此题考察的就是String的特殊性以及编译器优化,首先对于以下2种申请String的方式:String s = new String("XX"),String s = "XX"是不一样的,前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象;后者则会在栈中创建一个对象引用变量str,然后 查看字符串池中是否存在"XXX",如果没有,则将"XXX"存放字符串池,并令引用变量str指向它;如果已经有"XXX",则直接令str指向它。这样充分利用 了栈的数据共享优点.
回到这题对于a,编译器会在编译时就将其合并变成taobao,而不是在运行时,所以a指向了常量池中已经存在的MESSAGE,而对于e,则是在堆上new出来的,所以判断地址相等自然返回false,而对于b+c,编译器是不会做出这种优化的,因为编译器不知道运行时b or c当中一个会不会有改变,所以运行时才合并,此时是在堆中合并的!但是d+f呢?因为我将其设成了final,所以编译器编译时就知道其不会改变,所以也做出了优化。intern方法则是会去找常量池中是否已经有存在的,若有,则指向这个,所以intern后返回true。
5.如下输出?
public class Demo2 {public static void main(String[] args) {System.out.println("a.a.a".replaceAll(".", "/"));}}
答案是///// 请注意replaceAll的第一个参数定义:正则表达式,而.在正则表达式中代表任何字符。
6.如下输出?class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); }}public class HelloB extends HelloA { public HelloB() { System.out.println("HelloB"); } { System.out.println("I'm B class"); } static { System.out.println("static B"); } public static void main(String[] args) {new HelloB();}}
解:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
可以看出顺序是:1、执行父类的静态代码块 2、执行子类的静态代码块3、执行父类构造代码块4、执行父类构造函数5、子类构造代码块6、子类构造函数7、如下输出:
public class Dervied extends Base { private String name = "dervied"; public Dervied() { tellName(); } public void tellName() { System.out.println("Dervied tell name: " + name); } public static void main(String[] args){ new Dervied(); }}class Base { private String name = "base"; public Base() { tellName(); System.out.println(this.getClass().getName()); } public void tellName() { System.out.println("Base tell name: " + name); } }
输出:Dervied tell name: null
Dervied
Dervied tell name: dervied
可以看到调用父类构造方法时this的name是Dervied,所以既然Dervied覆盖了父类的tellName,所以此时调用的是Dervied的tellName,而此时还未初始化,所以输出null。(要是把Dervied的name申明为static,就会输出2句一样的语句了)8:
public class Demo2 {public static void main(String[] args) {Foo22 foo22 = new Foo22();foo22.print();}}class Foo2 {private String a = "a";public void print() {System.out.println(this.getClass().getName());System.out.println(this.a);}}class Foo22 extends Foo2 {public String a = "b";}
输出什么? 我不理解
9:
public class Demo3 {public static void main(String[] args) {int a = 33;Integer a2 = 33;Integer a3 = Integer.valueOf(33);Integer a4 = new Integer(33);System.out.println(a==a2);System.out.println(a2==a4);System.out.println(a2==a3);}}
true false true
2个点:
包装类和基本类型比较 包装类会自动拆箱为基本类
IntegerCache(-128-127) valueOf内部也会去使用IntegerCache
10:java中提供了哪两种用于多态的机制:
Java通过方法重写和方法重载实现多态
- JAVA面试题目整理
- JAVA笔试题目整理
- Java面试题目整理。。。
- java 笔试题目 整理
- Java面试题目整理
- Java面试题目整理
- Java面试题目整理
- java题目整理
- Java 面试题目收集整理
- java web 笔试题目 整理
- Java认证经典面试题目整理
- java工程师面试经典题目整理
- 【Java】逻辑思维训练整理的小题目
- 【题目整理】
- Java面试题整理(题目内容非原创)
- POJ 题目整理
- 某博友整理算法题目
- 某博友整理算法题目
- pycharm配置spark
- Hibernate自动建表失败
- 数据统计之饼图实现
- WP 4 i春秋_百度杯”CTF比赛(九月第一场)
- Callable 实用demo
- java题目整理
- OJ热血格斗场
- APK瘦身小技巧--Analyze APK
- Linux学习_第一章_003
- (转)C++ const用法 尽可能使用const
- 进程与线程的联系与区别
- ubuntu 16.04安装git和qt编译环境命令及其相关内容
- HDOJ--2036 改革春风吹满地
- Keras实现LeNet-5网络,并可视化网络结构图