关闭

Android笔试之JAVA笔试题总结

117人阅读 评论(0) 收藏 举报
分类:

1.静态块  main() 构造块 构造方法的执行顺序

首先看一道题

publicclassB
{
    publicstaticB t1 = newB();
    publicstaticB t2 = newB();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    publicstaticvoidmain(String[] args)
    {
        B t = newB();
    }
}
这段代码打印的结果是:
构造块 构造块 静态块 构造块
分析:JVM加载类的时候,会先执行静态的代码块,静态的对象创建,当静态对象的创建和静态块同时出现时,会按照语句的先后顺序执行,这里先执行 t1 t2的构造,会调用2次构造块代码,然后执行静态块。当类加载完成后,执行main方法中的代码。
总结:静态块只会执行一次,构造块在对象每次创建的时候都会执行。
静态块>main>构造块>构造方法
2.异常的继承关系图


3.下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。
java.exe
javadoc.exe
jdb.exe
javaprof.exe

java,exe是java虚拟机
javadoc.exe用来制作java文档
jdb.exe是java的调试器
javaprof,exe是剖析工具
4.Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串。比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市。正则表达式为()
".*?(?=\\()"

什么是正则表达式的贪婪与非贪婪匹配

  如:String str="abcaxc";

    Patter p="ab*c";

  贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

  非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

编程中如何区分两种模式

  默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

  量词:{m,n}:m到n个

     *:任意多个

     +:一个到多个

     ?:0或一个

参考:http://www.cnblogs.com/xudong-bupt/p/3586889.html
4.类集合之间的继承实现关系图

5.有关Activity生命周期描述正确的是
设置Activity的android:screenOrientation="portrait"属性时,切换屏幕横纵方向时不会重新调用各个生命周期,只会执行onConfigurationChanged方法
未设置Activity的android:configChanges属性,切换屏幕横纵方向时会重新调用onCreate()方法
当再次启动某个launchMode设置为singletask的Activity,它的onNewIntent()方法会被触发
用户正在操作某个Activity,这时如果其他应用程序需要内存,系统会将用户当前操作的Activity强制关闭

A 设置Activity的android:screenOrientation="portrait"属性时,无法切换横竖屏,因此不但不会重新调用各个生命周期方法,而且onConfigurationChanged()方法也不会执行。
 
B 未设置Activity的android:configChanges属性,API上这样说"the activity will be restarted if any of these configuration changes happen in the system.";如何配置有改变,就会重启activity
 
C launchMode为singleTask的时候,通过Intent启到一个Activity, 如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法
 
D 用户正在操作某个Activity,这时如果其他应用程序需要内存。 此时的Activity是Foreground process,应该按照Empty process,Background process,Service process,Visible process顺序kill,最后才是前台进程。
6.以下哪几种方式可用来实现线程间通知和唤醒:( ) 正确答案: A C   你的答案: A D (错误) Object.wait/notify/notifyAll ReentrantLock.wait/notify/notifyAll Condition.await/signal/signalAll Thread.wait/notify/notifyAll 解答:A. wait/notify/notifyAll是Object类的方法,而不是Thread类的。Thread类对线程执行控制的的方法是sleep。
7.遇到下列哪种情况时需要把进程移到前台?
进程正在运行一个与用户交互的Activity ,它的onResume()方法被调用
进程有一正在运行的BroadcastReceiver,它的onReceive()方法正在执行
进程有一个Service,并且在Service的某个回调函数(onCreate()、onStart()、或onDestroy())内有正在执行的代码
所有选项均正确
进程有一个Service,该Service对应的Activity正在与用户交互

8.使用SimpleAdapter作为 ListView的适配器,行布局中支持下列哪些组件?

正确答案: A C D

TextView
ProgressBar
CompoundButton
ImageView
根据SimpleAdapter的源码可以知道,使用SimpleAdapter作为适配器是,会按照如下顺序判断View:
 
1、该view是否实现checkable接口
 
2、该view是否是TextView
 
3、该view是否是ImageView
public abstract class CompoundButton extends Button implements Checkable
9.下列哪个说法是正确的:

正确答案: D   你的答案: A (错误)

ConcurrentHashMap使用synchronized关键字保证线程安全
HashMap实现了Collection接口
Arrays.asList方法返回java.uti.ArrayList对象
SimpleDateFormat对象是线程不安全的
ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。
10.JAVA中,下列语句哪一个正确()

正确答案: C   你的答案: B C (错误)

class中的constructor不可省略
constructor必须与class同名,但方法不能与class同名
constructor在一个对象被new时执行
一个class只能定义一个constructor

public class Main {

	public Main(){
		
	}
	public  void Main(){
		
	}
	public static void main(String[] args) {
		
	}
}

10.

packageWangyi;
classBase
{
    publicvoidmethod()
    {
        System.out.println("Base");
    
}
classSon extendsBase
{
    publicvoidmethod()
    {
        System.out.println("Son");
    }
     
    publicvoidmethodB()
    {
        System.out.println("SonB");
    }
}
publicclassTest01
{
    publicstaticvoidmain(String[] args)
    {
        Base base = newSon();
        base.method();
        base.methodB();
    }
}

正确答案: D   你的答案: B (错误)

Base SonB
Son SonB
Base Son SonB
编译不通过
11.

list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()
1
2
3
4
5
6
7
8
9
10
11
Iterator it = list.iterator();
intindex = 0;
while(it.hasNext())
{
    Object obj = it.next();
    if(needDelete(obj))  //needDelete返回boolean,决定是否要删除
    {
        //todo delete
    }
    index ++;
}
  • it.remove();
  • list.remove(obj);
  • list.remove(index);
  • list.remove(obj,index);
正确答案:A

list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()
1
2
3
4
5
6
7
8
9
10
11
Iterator it = list.iterator();
intindex = 0;
while(it.hasNext())
{
    Object obj = it.next();
    if(needDelete(obj))  //needDelete返回boolean,决定是否要删除
    {
        //todo delete
    }
    index ++;
}
12.程序运行结果:
publicvoidtest()
    {
        Byte a = 127;
        Byte b = 127;
        add(++a);
        System.out.print(a + " ");
        add(b);
        System.out.print(b + "");
    }
publicvoidadd(Byte b)
    {
        b = b++;
    }

-128 127.
解析:add()方法不是引用传递,因此只需要计算++a,因为Byte的值范围是在-128~+127之间,当127+1之后就相当于 0111 1111 加1变成
1000 0000 这个补码的二进制是 -128 。
13.有如下一段代码,请选择其运行结果()
1
2
3
4
5
6
7
8
9
10
publicclass StringDemo{
  privatestatic final String MESSAGE="taobao";
  publicstatic void main(String [] args) {
    String a ="tao"+"bao";
    String b="tao";
    String c="bao";
    System.out.println(a==MESSAGE);
    System.out.println((b+c)==MESSAGE);
  }
}
答案:点此链接


14.重写equals方法为什么要重写hashcode方法?
答:因为equals默认判断的是对象的地址,当然系统已经将某些个复合类型的equals方法重写了。我们自己重写的话
必须重写hashcode,因为equals说明了这两个对象的hashcode也必须相等。所以必须重写。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6244次
    • 积分:276
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类