面试中的一些问题

android是什么?Android的框架;javascript

android是基于linux平台的自由及开放的操做系统,主要用于移动设备如手机和移动PDA等设备,有google和开放手机联盟共同推出。包括操做系统、中间件、用户界面以及应用程序。html

Android的框架从上往下主要包括:applications(应用包括:通信录、短信等)、application frameworkactivityservice等)、libraries c/c++库)android runtimeandroid运行时)、linux kernal(包含camer 驱动、mediaplayer 驱动等);java

2.android四大组件及各自含义;linux

Activity:活动,一个activity对应一个界面,能够加载对应xml中的控件也能够监听并响应用户事件。android

使用方式:继承activity,重写onCreateonStart等方法;c++

Service:服务,不含界面,不能与用户直接交互,运行于程序后台,一般用于处理一些耗时长的操做,避免阻塞主线程;程序员

使用方法:继承Service,启动模式重写onStartCommond方法,绑定方式重写onBind();注意Service运行在主线程中,所以耗时操做须要另开线程,或者用IntentServiceweb

Broadcast Receiver:广播接收器,使用它能够过滤一些事件而只对本身感兴趣的事件做出响应,他没有界面,可是能够经过activityservice来响应响应事件、也能够经过震动、响铃或者notification来响应;算法

使用方法:继承BroadcastReceiver,重写onReceive方法,onReceive的是处理时间是10S,所以耗时操做不能直接写在里面,须要经过intent传给Service来处理;sql

注册方式:静态注册,在manifest中注册,应用关闭也存在;动态注册,通常在须要接受广播的组件中onResume时注册,onPause是取消注册;

Content provider:内容提供者,它为android应用之间进行数据共享的统一访问方式。

使用方法:采用ContentResolver来实现增删改查,uri地址格式:conten//惟一标准(一般是包名)/资源路径/资源ID

自定义:继承ContentProvider,实现querydeleteupdate等方法,而后在manifest中注册。

3.Activity启动模式;

Standard:默认模式、标准模式。每次激活activity时,都会从新建立activity实例,退出都会销毁该activity实例;

Single Top:须要被激活的activity位于栈的顶部的时候,不须要从新建立activity实例,不然都须要建立activity实例;

Single Task:只要须要被激活的activity位于栈中,就会将其上面的全部activity移除,经过newInstance重用该activity实例,始终使其处于栈顶;

Single instance:在启动的时候,会开启一个新的BackStack,这个BackStack里只有一个Activity的实例存在,而且把这个BackStack得到焦点。这是一种很极端的模式,它会致使整个设备的操做系统里,只会 存在一个这个Activity示例,不管是从何处被启动的。

4.Activity转屏(ctrl+f12)生命周期变化、界面跳转、回到桌面生命周期变化;

Activity生命周期:onCreate(建立)--onStart(可见、无焦点)--onResume(可见、有焦点)--onPause(可见、无焦点)--onStop(不可见、无焦点)--onDestory(销毁);

Activity生命状态:active--pause--stop--destory

启动activity的过程:onCreate--onStart--onResume

界面跳转:onPause1--onCreate2-onStart2--onResume2--onStop1

界面返回:onPause2--onRestart1--onStart1--onResume1--onStop2--onDestory2

回到主界面:onSaveInstanceState1--onPause1--onStop1

转横屏:onSaveInstanceState()--onPause()--onStop()--onDestory()--onCrate()--onStart()--onRestoreInstanceState()--onResume()

转竖屏:onSaveInstanceState()--onPause()--onStop()--onDestory()--onCreate()--onStart()--onRestoreInstanceState()--onResume()--onSaveInstanceState()--onPause()--onStop()--onDestory ()--onCreate()--onStart()--onRestoreInstanceState()--onResume()

manifest中加入:configChanges=orientation

转横屏:onSaveInstanceState()--onPause()--onStop()--onDestory()--onCreate()--onStart()--onRestoreInstanceState()--onRsume();

转竖屏:onSaveInstanceState()--onPause()--onStop()--onDestory()-onCreate()--onStart()--onRestoreInstanceState()--onResume()--onConfigurationChanged();

manifest中加入:configChanges=orientation|keyboardHidden

转横屏:onConfigurationChanged()

转竖屏:onConfigurationChanged()--onConfigurationChanged();

5.Activity之间数据的传输方式?

Activity之间的数据经过intent.putExtra();传输,简单的直接传递,复杂的能够经过Bundle传输,注意bundle传递的对象必需要通过序列化,实现parcelable

6.同一个应用中,不一样的activity中是否能够放在不一样的Task中?

答:能够放在不一样的Task中。须要为不一样的activity设置不一样的taskaffinity属性,启动activityIntent须要包含FLAG_ACTIVITY_NEW_TASK标记

7.Activity变成窗口?

两种方式:一种是自定义样式的方式实现:在manifesttheme=@style/myStyle”,另外一种是调用系统的窗口样式在manifesttheme=@androidstyle/Theme.dialog”;

8.如何退出activity?彻底退出整个应用?

退出activity能够采用finish()、system.exit()killProcess();

退出整个应用有如下几种方式:

用列表记住打开的activity,退出时一一关闭(经过application单例模式实现);

经过广播关闭:在须要关闭的activity中注册广播,收到广播后关闭;

抛出异常关闭:须要处理异常弹出框.

9.Service启动方式及生命周期;

启动模式:Context.startService()--onCreate--onStart--运行--Context.StopService()--onDestory;须要主动调用stopService中止服务,不然可能会一直运行;

绑定模式:Context.bindService()--onCreate--onBind--运行--onUnbind()--onDestory,与绑定的activity生命周期一致,无需手动关闭服务。

10.IntentService

IntentService经过Context.startService(Intent)的方式启动了一个能够处理异步请求的service,使用时只须要继承IntentService,添加一个空的构造方法(调用父类含字符串的方法),重写onHandleIntentIntent.

主要特色:1在应用的主线程外建立一个单独的工做线程来处理传递到onStartCommand()方法的Intent组件;2建立一个工做队列,每次传递一个IntentonHandleIntent,开发人员不须要考虑多线程问题, 3当全部请求处理完后,会自动中止服务不须要开发人员显示调用stopSelf方法,4提供了onBind的实现并返回null5提供了onStartCommond的默认实现,将全部的intent发送到一个工做队列,并进一步发 送到onHandleIntent。应用场景:下载任务

这是一个基于消息的服务,每次启动该服务并非立刻处理你的工做,而是首先会建立对应的Looper,Handler而且在MessageQueue中添加的附带客户Intent的Message对象,当Looper发现有Message的时候 接着获得Intent对象经过在onHandleIntent((Intent)msg.obj)中调用你的处理程序.处理完后即会中止本身的服务.意思是Intent的生命周期跟你的处理的任务是一致的.因此这个类用下载任务中很是好,下 载任务结束后服务自身就会结束退出。

10.Service远程调用;

Aidlandroid interface definition languageandroid接口定义语言)。

在服务端:1)建立aidl2)编译aidl,在eclipse中直接在gen文件夹下面;3)实现aidl中的Stud类;4)将新建的服务添加到manifest中;

在客户端:1)将aidl文件拷贝到客户端,在gen下面自动生成接口类;2)在客户端中经过serviceConnection调用服务器服务remoteService.Stub.asInterface(service);

11.数据存储的方式;

SharePreferences:存储各类参数,以xml格式存储。以key-value的方式存储数据,keyString类型,value能够是基本数据类型和String类型的数据;

       经过preferenceManager.getDefaultSharedPreferences(this);或经过this.getSharedPreferences(MODE_);经过SharedPreferences.Editor存放数据,执行完后须要用Editor,commit();

   经过preferences.registerOnsharedPreferenceChangedListener()监听;

contentProvider:内容提供器,提供数据共享接口。

Sqlite:轻量级的本地数据库,可支持sql语句,注意sqlite不能一次读取过多条数据,会致使溢出,能够先查一下有多少条,而后按每次少于5000取;

File:经过IO流存储和读取,会涉及SDcard权限;IO流分两种:字符流、字节流

网络:经过HTTPwebservice实现数据存储

数据存储在/data/data/packagename/share_prefs(filesdatabase)

12.Android经常使用控件;

ButtonTextViewListViewEditTextSpinnerGridView

13.Fragment的使用、生命周期;

Fragment:碎片,他有本身的生命周期、布局文件也能处理本身的事件,可是他不能单独存在,必须依附于activity,其生命周期也将受到activity生命周期的影响。

activity中使用fragment有两种方式:一种是在activityxml文件中经过<fragment>来使用,注意必须添加name=“自定义的fragment”;另外一种则是直接在activity的代码中建立,经过FragmentManager manager  = getFragmentManager();FragmentTranSaction  ft= manager.beginTranSaction(); MyFragment fragement = new MyFragment(); ft.add(R.id.layout,fragment);ft.commit();

Fragment生命周期:onAttach--onCreate--onCreateView--onActivityStarted--onstart--onResume--onpause--ondestoryView--onDestory--onDetach

Activity一块儿的生命周期:onCreateActivity--onAttach--onCreate--onCreateView--onStartActivity--onActivityStart--onStart--onResumeActivity--onResume--onPause--onPauseActivity-onStop--onStopActivity--onDestoryView--onDestory--onDetach--onDestoryActivity)。

14.ViewPager的使用;

1.ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,因此在引用时记得在BuilldPath中加入“android-support-v4.jar”;

2.xml文件中添加viewpager;建立每一个子页面的xml文件

3.onCreate内实例化viewpager,实例化各个子页面的view,并将view添加到List<View>中;

4.实例化PagerAdapter,重写instantiateItem方法;

5.viewpager.setAdapter(pageAdapter)

15.Listview的优化;

Listview每条数据显示的时候都会执行getView操做,所以Listview的优化主要体如今这个模块。不作优化,即每次滚动都新建View会形成巨大的资源浪费,判断convertview是否为空,在为空时实例化,不 为空时仅仅更换数据能够提升效率2倍,可是经过viewHolderconvertView.setTag能够再提升0.5倍效率。

16.其余的一些加载速度、性能优化:

1)图像:预先缩放视图大小,避免实时缩放;originalImage = Bitmap.createScaledBitmap(originalImage, // 缩放图像view.getWidth(), // 视图宽度view.getHeight(), // 视图高度true); // 线性过滤器

2)背景:默认的状况下窗口有个默认的背景,当高层视图不是透明的或者或者高层视图覆盖整个区域则不须要显示窗口默认背景,所以能够去掉:在onCreategetWindow().setBackgroundDrawable(null); 节省时间;

3)Xml:若窗口包含的视图太多、则绘制时间会很长,界面反应速度会很慢。所以:使用中间件合并视图,如merge能够减小根节点;使用relativeLayout减小层次;使用自定义视图;使用自定义布局;

4)内存分配:在性能敏感的代码里,避免建立java对象:onMeasure();onDraw();getView();onLayout();onTouchEvent();

5)管理好对象:使用软引用:内存缓存;使用弱引用:避免内存泄露。

17.列表中含有按钮如何解决焦点冲突?

1)自定义按钮控件,将按钮对应的数据传给自定义按钮;

2)自定义一个onCLickListener,获取View中的数据,在onClick中进行处理,并将执行结果绑定到Button按钮中便可。

18.自定义控件如何实现?

实现方式有三种:

1)继承已有的控件来实现自定义控件:通常是自定义控件与原有控件有不少类似功能,须要在其上进行扩展的时候;

2)继承LinearLayout来实现自定义控件:通常来讲作组合控件的时候能够采用此方法。此时不用onDraw方法,在构造函数中经过inflater来加载xml文件,再addViewv),自定义控件就加在过来了。

3)继承View来实现:经过GDI来绘制组件界面。

了解View属性:Android系统的视图结构的设计也采用了组合模式,即View做为全部图形的基类,ViewgroupView继承扩展为视图容器类。

View的绘图操做:measure()layout()draw(),其内部又分别包含了onMeasure()onLayout()onDraw()三个子方法。

 measure操做主要用于计算视图的大小,即视图的宽度和长度。在view中定义为final类型,要求子类不能修改。measure()函数中又会调用onDraw函数:onMeasure(),视图大小的将在这里最终肯定,也就 是说measure只是对onMeasure的一个包装,子类能够覆写onMeasure()方法实现本身的计算视图大小的方式,并经过setMeasuredDimension(width, height)保存计算结果。

layout操做:用于设置视图在屏幕中显示的位置。在view中定义为final类型,要求子类不能修改。layout()函数中有两个基本操做:setFramel,t,r,b),l,t,r,b即子视图在父视图中的具体位置,该函数用于 将这些参数保存起来;onLayout(),在View中这个函数什么都不会作,提供该函数主要是为viewGroup类型布局子视图用的。

draw操做利用前两部获得的参数,将视图显示在屏幕上,到这里也就完成了整个的视图绘制工做。子类也不该该修改该方法,由于其内部定义了绘图的基本操做:绘制背景;若是要视图显示渐变框,这里 会作一些准备工做;绘制视图自己,即调用onDraw()函数。在viewonDraw()是个空函数,也就是说具体的视图都要覆写该函数来实现本身的显示(好比TextView在这里实现了绘制文字的过程)。而对ViewGroup则不须要实现该函数,由于做为容器是“没有内容“的,其包含了多个子view,而子View已经实现了本身的绘制方法,所以只须要告诉子view绘制本身就能够了,也就是下面的dispatchDraw() 方法;绘制子视图,即dispatchDraw()函数。在view中这是个空函数,具体的视图不须要实现该方法,它是专门为容器类准备的,也就是容器类必须实现该方法;若是须要(应用程序调用了setVerticalFadingEdge 或者setHorizontalFadingEdge),开始绘制渐变框;绘制滚动条。从上面能够看出自定义View须要最少覆写onMeasure()onDraw()两个方法。

19.OnClickonTouch的区别,能不能同时使用?

onTouchdown返回false表示是按键事件,若为true则表示是触摸事件,而up标记此事件此事件的结束时间,判断是否为长按(为true表示此时间一直没结束);所以:

1)若onTouchfalse,则:首先是down事件,此时,若长按,则出发onLongClick事件,接着up事件,按键事件结束,触发onClick事件;

2)若onTouchtrue,则线是down事件,而后是up事件,不会触发onClickonLongClick事件;

3)若downtrueupfalse,则表示是触摸事件,不会触发按键事件;

4)若downfalseuptrue,则表示是按键事件,up一直为true,表示此事件一直没有结束,达到长按临界值时就会触发onLongClick事件,不会触发onClick事件;

20.Android图片处理,OOM

Android应用程序的内存大小有限制,根据平台而定有16Mb24Mb。通常耗内存的就是图片、音频和视频,可是音频和视频android采用边解析边播放的方式,所以通常不会出现OOM。所以图片比较容易出 现此类情形:1)显示单张图片,体积大道3000*4000级别时;2)在listViewgallery中一次性加载过多图片;

解决方案:1)采用软引用缓存图片到内存,不要每次都从新加载;2)对于不一样分辨率的手机调整图片大小;3)采用低内存编码方式,如好比Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内 存;4)及时回收图像,若是引用了大量Bitmap对象,而应用又不须要同时显示全部图片,能够将暂时用不到的Bitmap对象及时回收掉;5)自定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配;

21.Java对象的引用方式:

java内存管理分为内存分配和内存回收,都不须要程序员负责。垃圾回收的机制主要是看对象是否有引用指向该对象。

1)强引用:建立一个对象并把这个对象赋给一个引用变量,垃圾处理器即便报OOM也不肯意回收强引用;

2)软引用:经过SoftReference类来实现,只具备软引用是,当内存空间足的时候不会被垃圾处理器回收,当内存不足时会被回收;能够单独使用;

3)弱引用:经过weakReference类来实现,只具备弱引用时,当垃圾处理器扫描到它时,无论内存是否够用都会被回收;能够单独使用;

4)虚引用:虚引用不能单独使用,需引用的做用是就跟踪对象被垃圾回收的 状态,程序能够经过检测与虚引用关联的虚引用队列是否已经包含了指定的虚引用,从而了解虚引用的对象是否即将被回收。 一个 对象持有虚引用,任什么时候候均可能被回收。

若是使用软引用,弱引用,虚引用的引用方式引用对象,垃圾回收就可以随意的释放这些对象,若果但愿尽量减少程序在起声明周期中所占用的内存大小,能够灵活使用这些引用。

  若是使用了这些引用就不能保留这些对象的强引用(强制引用应该置null),不然就浪费了这些类提供的任何好处。

22.GC是什么,何时会出现内存泄露?

GC是垃圾收集器。java对内存的释放采起的垃圾自动回收机制,在编程的时候不用考虑变量不用时释放内存,java虚拟机能够自动判断出并收集到垃圾,但通常不会当即释放它们的内存空间,固然也可 以在程序中使用System.gc()来强制垃圾回收,可是要注意的是,系统并不保证会当即进行释放内存。要请求垃圾收集,能够调用下面的方法之一:System.gc();或者Runtime.getRuntime().gc()。

  1. 数据库的cursor没有关闭

2.构造adapter,没有使用缓存contentview

  1. 衍生listview的优化问题-----减小建立view的对象,充分使用contentview,能够使用一静态类来优化处理getview的过程

4.Bitmap对象不使用时采用recycle()释放内存

5.activity中的对象的生命周期大于activity

6.调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size]

23.Support包的做用?

   版本兼容,高版本兼容低版本。如api-8(android2.2)必会兼容api-4(android 1.6);可是反之则不会,你使用2.2的平台版本build了一个apk,若想能在1.6上运行,则须要作向下兼容。android support-xxgoogle 官方的向下兼容包.如名所示,会帮助构建程序向下兼容到1.6版本.不过也并不是万能的,仍是会受限制.

24.多线程的实现方式及区别、线程启动方式,销毁方式?

多线程的实现方式有:继承Thread和实现Runnable。重写run方法。启动方式:myThread.start();new Thread(new myRunnable()).start();销毁方式:

区别:实现Runnable的好处:避免了单继承的局限性;适合多个相同代码的线程去处理同一个资源(同一runnable实例的多个线程);加强了程序的健壮性,代码能被多个线程共享,代码是独立的。

25.线程同步及线程池的概念;

线程同步:同步是为了防止多个线程访问同一数据对象,对对象形成破坏。同步两步骤:1)将须要同时被多个线程访问的资源设置为private类型;2)对于会修改须要同步资源的代码用关键字synchronized 法或代码块。每个对象有且仅有一个锁;当程序运行到非静态同步方法上时,会得到与该类实例有关的锁,其余线程会等待该同步方法释放锁才能得到该锁的机会。

同步与锁:1)只能同步方法和代码块,不能同步变量和类;2)每个对象有且仅有一个锁;3)没必要同步类中的全部方法,能够同时含有同步方法和非同步方法,4)若是两个线程执行一个类中同步方法,并 且使用同一个实例,则只能有一个线程得到锁,另外一个须要等待第一个释放锁为止;5)一个类中含有同步和非同步方法时,多线程能够对非同步方法任意访问;6)线程sleep时不会释放所;7)线程能够得到 多个锁,如在一个类的同步方法中调用另外一类的同步方法则会得到两个锁;8)同步损坏并发性,应尽可能减小同步范围;9)使用同步块时须要指定在哪一个对象上同步,synchronizedthis);10要同步静态方 法,须要一个用于整个类对象的锁,这个对象是就是这个类(XXX.class)

静态同步与非静态同步的区别:一、调用同一个对象中非静态同步方法的线程将彼此阻塞。若是是不一样对象,则每一个线程有本身的对象的锁,线程间彼此互不干预。二、调用同一个类中的静态同步方法的线程将 彼此阻塞,它们都是锁定在相同的Class对象上。三、静态同步方法和非静态同步方法将永远不会彼此阻塞,由于静态方法锁定在Class对象上,非静态方法锁定在该类的对象上。四、对于同步代码块,要看清 楚什么对象已经用于锁定(synchronized后面括号的内容)。在同一个对象上进行同步的线程将彼此阻塞,在不一样对象上锁定的线程将永远不会彼此阻塞。静态同步与非静态同步不会相互影响;

线程安全:当一个类已经很好的同步以保护它的数据时,这个类就称为“线程安全的”;

线程死锁:两个或两个以上的进程在执行过程当中,因争夺资源而形成的一种互相等待的现象,若无外力做用,它们都将没法推动下去。缘由通常是两个对象的锁相互等待形成的。缘由:由于系统资源不足;进程运行推动的顺 序不 合适;资源分配不当。

线程同步方法:1)用synchronized 2wait()+notify/notifyall()wait(long)+notify()/notifyall()wait(long,int)+notify()/notifyall();

同步块与同步方法的区别:同步块是对一段代码同步,其锁是括号中的对象的锁,所以住一次对象不要选择可能在锁的做用域改变值得对象,为null会报错。

26.线程的运行状态

1)新状态:线程对象已建立,尚未调用start();

2)可运行状态:调用start()后或者线程在运行以后或者阻塞回来之后的状态,注意调用start()方法后并不会立马进入运行状态,须要等调度程序调用,即分片处理到达该线程才会进入运行状态;

3)运行状态:线程调度程序从可运行池中选择一个线程做为当前线程时线程所处的状态。这也是线程进入运行状态的惟一一种方式。

4)阻塞/等待/睡眠:这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,可是当前没有条件运行。换句话说,它是可运行的,可是若是某件事件出现,他可能返回到可运行状态。

5)死亡状态:当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,可是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 若是在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

27.线程的优先级

范围:1-10;默认的优先级为父类优先级,mainThread的优先级为Normal=5;最大优先级为父类最大优先级,且不能超过父类的最大优先级;可经过setPriority来修改优先级;当设计多线程应用程序的时候,必定不要依赖于线程的优先级。由于线程调度优先级操做是没有保障的,只能把线程优先级做用做为一种提升程序效率的方法,可是要保证程序不依赖这种操做。

28.Android屏幕自适应;

1)使用layout_weightlayout_width=0pxlayout_height=0px或者wrap_contentmatch_parent或者dp

2)定义不一样的尺寸文件;

3)代码中实现:首先咱们要作的是获取当前屏幕的宽高度,DisplayMetrics displayMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);Constant.displayWidth =  displayMetrics.widthPixels;Constant.displayHeight = displayMetrics.heightPixels;LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,(int) (Constant.displayHeight * 0.1f +  0.5f));

4)多个布局,针对largsmall等写不一样xml文件,在manifest<supports-screens android:largeScreens="true"android:normalScreens="true" android:anyDensity="true" />

5)不一样分辨率采用不一样分辨率的图片;

6)不要使用Absolutely,像素用dip,文本用sp

29..9文件的使用?

.9.pngandroid平台上定义的一种能够被拉伸不失真的图片格式,边缘含有11个像素点的区域,用于对图片的可扩展区和内容区进行定义;

特色:1)可拉伸不变形;2)可扩展区容许内容被延伸;3)内容区用于显示文字和其余内容;4)占用资源小,节省流量,提高加载速度。

30.图片、视频的基本参数,如dppxptsp之间的定义及区别;

Dipdevice independent pixels(设备独立像素). 不一样设备有不一样的显示效果,这个和设备硬件有关,通常咱们为了支持WVGAHVGAQVGA 推荐使用这个,不依赖像素。Dpdip一致

px: pixels(像素). 不一样设备显示效果相同,通常咱们HVGA表明320x480像素,这个用的比较多。

pt: point,是一个标准的长度单位,1pt1/72英寸,用于印刷业,很是简单易用; 

sp: scaled pixels(放大像素). 主要用于字体显示best for textsize

31.NDK是什么?

NDK全称:Native Development Kit。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将sojava应用一块儿打包成apk;NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差别,开发人员只须要简单修改mk文件(指出哪些文件须要编译编译特性要求等),就能够建立出so

好处:使用NDK,咱们能够将要求高性能的应用逻辑使用C开发,从而提升应用程序的执行效率;使用NDK,咱们能够将须要保密的应用逻辑使用C开发。毕竟,Java包都是能够反编译的;NDK促使专业so组件商的出现。

32.ANR是什么?怎么产生,怎么预防,如何定位?

ANRapplication not responding。产生的缘由是应用长时间无响应,在activity中响应时间通常是5S,超过5S就会报ANR,所以应该避免将一些耗时的操做直接放在主线程中,能够采用开启线程和service后台处理来解决这问题。应该注意的是service中也是须要开新线程的。

33.Handler机制、Looper

andriod提供了Handler 和 Looper 来知足线程间的通讯。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)UIthread 一般就是main thread,而Android启动程序时会替它创建一个MessageQueue 

1)Handler建立消息:Handler建立消息时首先查询消息池中是否有消息存在,若是有直接从消息池中取得,若是没有则从新初始化一个消息实例。使用消息池的好处是:消息不被使用时,并不做为垃圾回收,而是放入消息池,可供下次Handler建立消息时使用。消息池提升了消息对象的复用,减小系统垃圾回收的次数。

2)Handler发送消息:UI主线程初始化第一个Handler时会经过ThreadLocal建立一个Looper,该LooperUI主线程一一对应。使用ThreadLocal的目的是保证每个线程只建立惟一一个Looper。以后其余Handler初始化的时候直接获取第一个Handler建立的LooperLooper初始化的时候会建立一个消息队列MessageQueue

3)3Handler处理消息:UI主线程经过Looper循环查询消息队列UI_MQ,当发现有消息存在时会将消息从消息队列中取出。首先分析消息,经过消息的参数判断该消息对应的Handler,而后将消息分发到指定的Handler进行处理。

34.Collection类,Arraylistlinklist的区别,优缺点、arrayListvector的区别,MapHashMapHashTableSet的原理?

Collection-->set-->hashsetlinkedhashset: sortedSet-->TreeSet

  List-->arrayList:ArrayList 可以动态地增长或减少其大小。数组列表以一个原始大小被建立。 当超过了它的大小,类集自动增大。当对象被删除后,数组就能够缩小。Arrays.asList()返回一个列表      LinkedList:提供了一个连接列表数据结构;

 ArrayList 底层采用数组完成,而 LinkedList 则是以通常的双向链表(double-linked list)完成,其内每一个对象除了数据自己外,还有两个引用,分别指向前一个元素和后一个元素。若是咱们常常在 List   的开始处增长元素,或者在 List 中进行插入和删除操做,咱们应该使用 LinkedList , 不然的话,使用 ArrayList 将更加快速。

Map-->hashMap: 映射(map)是一个存储关键字和值的 关联或者说是关键字/值对的对象。给定一个关键字,能够获得它的值。关键字和值都是对 象。关键字必须是惟一的。但值是能够重复的。有些映射能够接收 null 关键字和 null 值。而 有的则不行。

SortedMap-->TreeMap:

35.泛型,通配符,限制性通配符与非限制性通配符;

泛型是对 Java 语言的类型系统的一种扩展,以支持建立能够按类型进行参数化的类。能够把类型参数看做是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符同样。

泛型的做用:1提升 Java 程序的类型安全。经过知道使用泛型定义的变量的类型限制,编译器能够在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者若是幸运的话,还存在于代码注释中)。经过在变量声明中捕获这一附加的类型信息,泛型容许编译器实施这些附加的类型约束。类型错误如今就能够在编译时被捕获了,而不是在运行时看成 ClassCastException 展现出来。将类型检查从运行时挪到编译时有助于您更容易找到错误,并可提升程序的可靠性。2消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,而且减小了出错机会。3潜在的性能收益。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。可是更多类型信息可用于编译器这一事实,为将来版本的 JVM 的优化带来可能。

通配符:<?>,它们为一个泛型类所指定的类型集合提供了一个有用的类型范围。

限制性通配符:<? Extends >

36.经常使用代码管理工具;

SVNlinuxwindows都支持,在任何任何因特网接入点获取最新代码;安全性和版本管理功能较强,能够实现异地开发的支持,但 SVN 安装和使用多采用命令行方式,学习曲线高,同时不提供对变动管理的功能,对于小型团队,能够采用 SVN 进行管理。

VSS 的使用简便易学,但 VSS 的功能和安全性较弱,且只对 windows 平台进行支持,建议做为项目配置管理的入门时采用的工具;

ClearCase 功能完善,安全性好,能够支持复杂的管理,但学习曲线和学习成本高,须要集成 ClearQuest 才能完成完整的配置管理功能。大公司若是采用异地多研发中心同时开发的模式,推荐使用ClearCase

37.代码的质量审查;

  • 1编码标准、代码重复、代码覆盖率、依赖项分析、复杂度监控 2)工具:CheckStyle、PMD 的 CPD 、Coverlipse 、JDepend 、Eclipse Metric 、findbugs

38.AsyncTask的使用;

Asynctask:异步任务,是一个轻量级的异步类。使用于一些简单的异步处理之中,不太适用于多个异步后台任务处理中。使用该类时只须要继承它,而且复写它的doInbackGround()(与主线程无关,不能在 这里操做)、onPreExcute()、onPostExcute()方法便可,AsyncTask定义了三种泛型类型 ParamsProgressResultParams 启动任务执行的输入参数,好比HTTP请求的URLProgress 后台任务执行的百分 比。Result 后台执行任务最终返回的结果,好比String。相对于来讲,handler则不适用于处理一些简单的异步处理之中,这样反而显得代码过多,结构过于复杂,子线程在主线程中经过start开启,同时handler 将子线程执行的消息经过handler.sendToTarget()传递给主线程的messageQuenelooper经过循环检查messageQuene中的message执行处理过程,并反馈到主线程UI控制上面。

39.Http的含义?HTTPHTTPS的区别?HTTP的方法有哪些?http的实现原理、异步HTTP的实现原理?

HTTP:超文本传输协议。用于从服务器传输超文本到本地浏览器(客户端)的传送协议。它能够使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示。特色是:1)支持客户端/服务器模式;2)简单快速:客户端向服务器请求时,只须要传递请求方法和路径;3灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4HTTP 0.91.0使用非持续链接:限制每次链接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。HTTP 1.1使用持续链接:没必要为每一个web对象建立一个新的链接,一个链接能够传送多个对象。5无状态:HTTP协议是无状态协议(可经过cookiessession来保持状态,第一次客户端请求时成功后服务端返回一个session,以后每一次请求客户端将此session发给服务器,服务器检验合法后再返回相应数据)。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。

HTTPS:安全超文本传输协议。比HTTP(明文传输)协议多提供了SSL安全机制。HTTP端口80HTTPS端口:443.它的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全; 另外一种就是确认网站的真实性,凡是使用了 https 的网站,均可以经过点击浏览器地址栏的锁头标志来查看网站认证以后的真实信息,也能够经过 CA 机构颁发的安全签章来查询

请求方法:Head向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法能够在没必要传输整个响应内容的状况下,就能够获取包含在响应消息头中的元信息。

      Post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建和/或已有资源的修改。

  GET向特定的资源发出请求。相似于查询,不会修改服务器数据,可认为是数据安全的和幂等的。提交给服务器的请求行的长度不要超过1K

  PUT向指定资源位置上传其最新内容,相似于添加功能;

  DELETE请求服务器删除Request-URI所标识的资源。相似于删除功能;

  TRACE回显服务器收到的请求,主要用于测试或诊断;

HTTP原理:HTTP是基于TCP的协议,TCP是一个端到端的面向链接的协议。所谓的端到端能够理解为进程到进程之间的通讯。因此HTTP在开始传输以前,首先须要创建TCP链接。在传输完成之间并不断开TCP链接

  TCP:面向链接;数据流;保证正确性;保证顺序;结构复杂;系统资源要求多。

        3次握手:客户端向服务器发送同步序列号标志位SYN;服务端收到客户端请求返回带有确认应答ACK和同步序列SYN;客户端再回复确认应答ACK,完成三次握手。

  UDP:面向无链接;数据报;可能丢包;不保证顺序;结构简单;系统资源要求少。(应用于DNS

HTTP请求的基本过程

HTTP协议是无状态的链接,能够多个链接同时进行,不须要等到另外一个链接完毕才进行。

1)创建链接:HTTP协议是TCP/IP模型中的应用层协议,两个应用程序之间的通讯必须先创建TCP链接。经过网址找到对应IP,创建TCP链接;

2)客户端向服务器发送请求信息;

3)服务器返回响应请求信息;

4)客户端获取返回信息后解析;

5)关闭链接。

异步HTTP原理:

1)定义一个MyHandler抽象类类继承自Handler,构造方法onSuccess();onStart();onStop()onFailure()等。

2)封装一个异步MyHTTP类,构造如POST方法,传入参数URLStr以及MyHandler,在方法内新建子线程,经过MyHandler发送消息到主线程messagequene中,从而操做UI

3)在Activity须要使用的地方用MyHttp(urlStr,myHandler{//复写onStart等方法处理UI便可})

40.WEBSERVICE

能使得运行在不一样机器上的不一样应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 不管它们所使用的语言、 平台或内部协议是什么, 都 能够相互交换数 据。Web Service是自描述、 自包含的可用网络模块, 能够执行具体的业务功能。Web Service减小了应用接口的花费。

主要技术:1xml:可扩展标记语言 2SOAP简单对象访问协议用于交换xml标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内 容定义了框架,将 程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定 :SOAP使用XML消息调用远程方法,这样web services能够经过HTTP协议的postget方法与远程机器交互,而 且,SOAP更加健壮和灵活易用;

Web Service自己实际上是在实现应用程序间的通讯。咱们如今有两种应用程序通讯的方法:RPC远程过程调用 和消息传递。使用RPC的时候,客户端的概念是调用服务器上的远程过程,一般方式为实例化 一个远程对象并 调用其方法和属性。RPC系统试图达到一种位置上的透明性:服务器暴露出远程对象的接口,而客户端就好像在本地使用的这些对象的接口同样,这样就隐藏了底层的信息,客户端也就根本不 须要知道对象是在哪台机器上。

41.推送方案及区别;

客户端获取服务器最新数据的方式:第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现。第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。

1)轮询(pull):应用程序应当阶段性的与服务器进行链接并查询是否有新的消息到达,你必须本身实现与服务器之间的通讯,例如消息排队等。并且你还要考虑轮询的频率,若是太慢可能致使某些消息的延迟,若是太快,则会大量消耗网络带宽和电池。

2)SMSpush):经过拦截SMS消息而且解析消息内容来了解服务器的意图,并获取其显示内容进行处理。可是问题是这个方案的成本相对比较高,咱们须要向移动公司缴纳相应的费用。咱们目前很难找到免费的短消息发送网关来实现这种方案。

3)持久链接(push):这个方案能够解决由轮询带来的性能问题,可是仍是会消耗手机的电池。这个方案存在着不少的不足之处,就是咱们很难在手机上实现一个可靠的服务

解决方案:

1)C2DMcloud to device messaging):

2)MQTT协议实现android推送:

3)RSMB实现推送:

4)XMPP协议实现推送:

5)第三方平台:百度云推送、极光推送

6)本身搭建一个平台。

42.JSON解析方式;

JSON就是一串字符串 只不过元素会使用特定的符号标注。生成: JSONObject jsonObject = new JSONObject();jsonObject.put(key, value);

解析方式:1jsonObject.get(“key”);2)用GSON:Gson gson = new Gson();list = gson.fromJson(jsonString, new TypeToken<list<t>>();t = gson.fromJson(jsonString, cls);

3FastJson t = JSON.parseObject(jsonstring, cls);list = JSON.parseArray(jsonstring, cls);list = JSON.parseObject(jsonstring,new TypeReference<list<map<string,  object="">>>() {}.getType());效率最高。

43.分页查询的原理是什么?

分页的意义在于减小每次传输的数据量,根据用于所需查找某一页信息,减小没必要要的信息传递,节省流量。分页能够在客户端、服务器和数据库进行,可是在客户端的方式效率最低。经过客户端经过首次进请求得到总的页数,当前页数这些信息,而后每次请求能够指定页数进行跳转。

44.ZXING开元框架,二维码基本原理。

ZXING是一个二维码的开元框架,集成了二维码扫描、解析等工做,只须要根据本身所需修改部分效果便可。二维码用到的包是:

45.XMPP协议、ASMACK包(只实现了文本传输,语音和图片是如何进行的)

XMPP协议:Extensible Messageing and presence protocol,可扩展消息与存在协议。是一种基于XML的协议,它继承了xml灵活的发展性具备良好的可扩展性,通过扩展后的xmpp能够经过发送扩展的信息来处理用户的需求,以及在xmpp顶端创建如内容发布系统和基于地址的服务等应用程序。XMPP包含了针对服务器端的软件协议,使之能与另外一个进行通话,这使得开发者更容易创建客户应用程序或给一个配好系统添加功能。

46.Android的新技术有哪些?

 

47.Android的开发环境有哪些?

Eclipse+adt;  

48.有没有用过别人的框架?

49.有没有涉及源码?

50.Static的使用?静态块在何时加载?

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也能够造成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的全部实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。所以,static对象能够在它的任何对象建立以前访问,无需引用任何对象。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的全部实例共享同一个static变量。static变量前能够有private修饰,表示这个变量能够在类的静态代码块中,或者类的其余静态成员方法中使用(固然也能够在非静态成员方法中使用--废话),可是不能在其余类中经过类名来直接引用,这一点很重要。

静态变量和实例变量:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程当中完成静态变量的内存分配,可用类名直接访问(方便),固然也能够经过对象来访问(可是这是不推荐的)。 对于实例变量,没建立一个实例,就会为实例变量分配一次内存,实例变量能够在内存中有多个拷贝,互不影响(灵活)。

静态方法:静态方法能够直接经过类名调用,任何的实例也均可以调用,
所以静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

静态块:static代码块也叫静态代码块,是在类中独立于类成员的static语句块,能够有多个,位置能够随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,若是static代码块有多个,JVM将按照它们在类中出现的前后顺序依次执行它们,每一个代码块只会被执行一次。

static和final一块用表示什么 :static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!对于变量,表示一旦给值就不可修改,而且经过类名能够访问;对于方法,表示不可覆盖,而且能够经过类名直接访问。

51.Finalfinallyfinalized的区别?

final为关键字;final定义基本类型变量时,要求变量初始化必须在声明时或者构造函数中,不能用于其它地方。该关键字定义的常量,除了初始化阶段,不能更改常量的值。final定义对象的引用,该引用的初始化与定义常量时的要求一致; 该关键字定义的对象内容能够改变,可是引用指向的地址不能改变;定义参数:若是传入该参数定义的变量时,方法不能对该参数内容进行修改(错误),与定义变量的修改规则相同;java方法中传递基本类型时是传值的,java方法对于对 象的传递是传参的;<归根结底,java中方法的传递是依靠传递副本:对于基本类型,首先创建一个Copy,并将传入的值赋值给Copy,而后对Copy进行操做;对于对象类型,首先创建一个引用Copy,并将传入的对象引用赋值给Copy> 使用final关键字定义的类,不能被子类继承;修饰方法,方法不能被覆盖

finally为为区块标志,用于try语句中;finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序一定会进行;

finalize()为方法;finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,相似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(好比进行I/0操做);

52.抽象类与接口的区别?

1)接口是抽象类的变体,接口中全部的方法都是抽象的,而抽象类容许含有普通方法;2接口能够多继承,抽象类不行,只能单继承;3抽象类能够有本身的成员变量,而接口只能有static final类型的成员变量;4abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。 5.接口中的方法默认都是 public,abstract 类型的。

 

53.==equals的区别?何时须要重写equals方法?

==是应用对象的地址相等,而equals是值相等。队医基本数据类型,==也是比较值是否相等。

默认equals在比较两个对象时,是看他们是否指向同一个地址的。
但有时,咱们但愿两个对象只要是某些属性相同就认为他们的qualstrue。好比:
Student s1 = new Student(1,"name1");
Student s2 = new Student(1,"name1");
若是不重写equals的话,他们是不相同的,因此咱们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较

54.熟练掌握一下算法与数据结构知识:

1)二叉树的生成,遍历、深度、层数、求第K曾的节点数、求节点所在的层数、求两节点的公告最低父节点;

2)链表的生成、插入、删除、查找;

3)线性表的生成、插入、删除、查找;

4)经常使用的排序法有哪些?代码实现;

直接插入排序、希尔排序、快速排序、冒泡法、选择法、堆排序。

55.什么是内部类?Nest ClassInner Class的区别?

nest class就是static inner class,而inner class就是no-static inner class。可见用inner class能够模拟closure的特性,就是运行时定义class的某些状态。inner class和nest class之间的区别就是后者是静态类。前者必须经过wrap class的实例来调用new,e.g. new Test().new innerClass。由于nest class是静态类,因此能够添加static member 或者static method,而inner class 不行。匿名内部类是inner class的一种特殊形式,因此也不能添加static member 或者static method。

56.Java面向对象的特性有哪些?分别说明;

封装:一个类继承另外一个类,则称继承的类为子类,被继承的类为父类。继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。
另外子类能够写本身特有的属性和方法,目的是实现功能的扩展,子类也能够复写父类的方法即方法的重写。

继承:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操做封装在一块儿,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽量地隐藏内部的细节,只
保留一些对外接口使之与外部发生联系。系统的其余部分只有经过包裹在数据外面的被受权的操做来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方法的实现细节,但能够根据对象提供的外部接口(对象名和参数)访问该对象。

多态:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不一样。对象的方法在实例时不能明确是哪一个方法,须要到具体运行时才能知道调用的哪一个方法。

57.Sleepwait的异同?

Sleep不释放锁;wait释放锁,等到notifynotifyall唤醒。sleep(milliseconds)能够用时间指定来使他自动醒过来,若是时间不到你只能调用interreput()来强行打断;wait()能够用notify()直接唤起. sleep是Thread类的静态方 法。wait是Object的方法sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定wait()是由某个肯定的对象来调用的。

sleep和wait的区别有:

1,这两个方法来自不一样的类分别是Thread和Object;2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其余线程能够使用同步控制块或者方法。;3,wait,notify和notifyAll只能在同步 控制方法或者同步控 制块里面使用,而sleep能够在;任何地方使用synchronized(x){x.notify()//或者wait()}4,sleep必须捕获异常,而wait,notify和notifyAll不须要捕获异常

58.关于相关、依赖、聚合的概念;

依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另外一个类的定义。例如,一我的(Person)能够买车(car)和房子(House),Person类依赖于Car类和House类的定义,由于Person类引用了Car和House。与关 联不一样的是,Person类里并无Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。通常而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。

关联(Association)关系是类与类之间的联接,它使一个类知道另外一个类的属性和方法。关联能够是双向的,也能够是单向的。在Java语言中,关联关系通常使用成员变量来实现。

聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是总体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便总体和个体的关系。与关联关系同样,聚合关系也是经过实例变量实现 的。可是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个表明总体,另外一个表明部分。

组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中表明总体的对象负责表明部分对象的生命周期,组合关系是不能共享的。表明总体的对象须要负责保持部分对象和存活,在一些状况下将 负责表明部分的对象湮灭掉。表明总体的对象能够将表明部分的对象传递给另外一个对象,由后者负责此对象的生命周期。换言之,表明部分的对象在每个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和总体 的生命周期同样。

59.设计4个线程、两个递增、两个递减(代码实现);

60.UML了解不?如何画?

61.经常使用的设计模式有哪些?

单例模式、观察者模式、工厂模式等。

62.堆内存与栈内存?

堆内存:new建立出来的对象;垃圾回收器管理;动态分配内存,存取速度慢;

栈内存:基本类型的变量和对象的引用;超过变量做用域释放;取速度快,仅次于寄存器,二者都是java用来在ram存数据的地方。

63.什么是sdkadt

    Sdksoftware development kit,软件开发包。SDK是一些公司针对某一项技术为软件开发人员制做的一套辅助开发或者减小开发周期的工具。一般包含对应的jar包以及说明文档。

Adtandroid development tool,安卓开发工具。

64.ERRORException的区别?

    error 表示恢复不是不可能但很困难的状况下的一种严重问题。好比说内存溢出。不可能期望程序能处理这样的状况。 

    exception 表示一种设计或实现问题。也就是说,它表示若是程序运行正常,从不会发生的状况。

65.运行时异常与普通异常,常见的异常有哪些?

     普通异常又叫作checked 异常,也就是咱们常常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求咱们必需对出现的这些异常进行catch。因此,面对这种异常无论咱们是否愿意,只能本身去写一大堆catch块去处理可能的异常。 

运行时异常,咱们能够不处理。当出现这样的异常时,老是由虚拟机接管。好比:咱们历来没有人去处理过NullPointerException异常,它就是运行时异常,而且这种异常仍是最多见的异常之一。 
    出现运行时异常后,系统会把异常一直往上层抛,一直遇处处理代码。若是没有处理块,到最上层,若是是多线程就由Thread.run()抛出,若是是单线程就被main()抛出。抛出以后,若是是线程,这个线程也就退出了。若是是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有通常异常的特色,是能够被Catch块处理的。只不过每每咱们不对他处理罢了。也就是说,你若是不对运行时异常进行处理,那么出现运行时异常以后,要么是线程停止,要么是主程序终止。若是不想终止,则必须扑捉全部的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,而后记录日志。不该该因为异常数据而影响下面对正常数据的处理。在这个场景这样处理多是一个比较好的应用,但并不表明在全部的场景你都应该如此。若是在其它场景,遇到了一些错误,若是退出程序比较好,这时你就能够不太理会运行时异常,或者是经过对异常的处理显式的控制程序退出。

 

66.Try-catch-finally的执行,含有return的执行过程?

try中没有异常的状况下trycatchfinally的执行顺序 try --- finally

若是try中有异常,执行顺序是try --- catch --- finally

若是try中没有异常而且try中有return这时候正常执行顺序是try ---- finally --- return

若是try中有异常而且try中有return这时候正常执行顺序是try----catch---finally--- return

总之 finally 永远执行!

try-catch-finally里都没有return finally 以后有个return ,若是try中有异常,finally执行完后,还能执行return吗?那是不可能执行的了,try中有异常之后,根据java的异常机制先执行catch后执行finally,此时错误异常已经抛出,程序因异常而终止,因此你的return是不会执行的。

67.&&&|||的区别?

&按位与:两边是数字时进行按位与运算,当两边是bool类型时执行与运算,判断左右表达式的真假;

&&逻辑与:当左边为假时,右边再也不执行;

|按位或:两边是数字时进行按位或运算,当两边是bool型或表达式时执行或运算,判断左右表达式的真假;

||逻辑或:当左边为真时,右边再也不计算。

68.StringstringBufferStringBuilder的区别?

String:字符串常量,定义为final类型,不能改变其值,在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,而后将指针指向新的 String 对象,因此常常改变内容的字符串最好不要用 String ,由于每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了之后, JVM 的 GC 就会开始工做,那速度是必定会至关慢的。

StringBuffer:字符串变量,线程安全的,每次结果都会对 StringBuffer 对象自己进行操做,而不是生成新的对象,再改变对象引用。因此在通常状况下咱们推荐使用 StringBuffer ,特别是字符串对象常常改变的状况下。可是常量相加的时候仍是推荐使用String,对象相加的时候推荐StringBuffer

StringBuilder:与StringBuffer相似,字符串变量,非线程安全的。

69.Xml的解析方式及区别?

XML如今已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。

解析方式:SAX和DOM

SAX:事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优势:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件事后,若没保存数据,那么数据就丢了;无状态性;从事件中只能获得文本,但不知该文本属于哪一个元素;使用场合:Applet;只需XML文档的少许内容,不多回头访问;机器内存少;

DOM:解析器读入整个文档,而后构建一个驻留内存的树结构,而后代码就能够使用 DOM 接口来操做这个树结构。优势:整个文档树在内存中,便于操做;支持删除、修改、从新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需屡次访问这些数据;硬件资源充足(内存、CPU)。 

70.Mysql的基本语句使用,连表查询?

建立一个数据库表:CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

显示表的结构:DESCRIBE MYTABLE;

往表中加入记录:insert into MYTABLE values (”hyq”,”M”);

删除表:drop TABLE MYTABLE;

清空表:delete from MYTABLE;

更新表中数据:update MYTABLE set sex=”f” where name=’hyq’;

连表查询:select * from table a as a ,table b as b where a.cc=b.cc

71.JSP包含哪些?

一、request对象 客户端请求,此请求会包含来自GET/POST请求的参数经过它才能了                   解到客户的需求,而后作出响应。

        二、response对象 响应客户请求的有关信息

三、session对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个      WebApplication开始,直到客户端与服务       器断开链接为止。

       四、out对象   它是JspWriter类的实例,是向客户端输出内容经常使用的对象

五、page对象   它是指向当前JSP页面自己,有点象类中的this指针,它是 java.lang.Object类的实例

六、application对象 它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭

七、exception对象 它是一个例外对象,当一个页面在运行过程当中发生了例外,就产生这个对象。

       八、pageContext对象 它提供了对JSP页面内全部的对象及名字空间的访问

       九、config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的 

72.Servlet的生命周期;

1)初始化阶段  调用init()方法

2)响应客户请求阶段  调用service()方法

3)终止阶段  调用destroy()方法

73.androidManifest中含有那些东西?

权限、包名、版本号、四大组件等。

74.Contentvalues存放数据的格式?

key-value的方式存储,其中keyString类型,value可为基本数据类型和String

75.android动画的分类有哪些、特色及区别?

有两种:TweenFrame

Tween这种实现方式能够使视图组件移动、放大、缩小以及产生透明度的变化;在xml文件中:alphaAlphaAnimation;ScaleScaleAnimation

Frame传统的动画方法,经过顺序的播放排列好的图片来实现,相似电影。Zaixml文件中:translateTranslateAnimationrotateRoateAnimation

76.Android的五中布局方式?

LinearLayout:线性布局;

RelativeLayout:相对布局;

AbsolutelyLayout:绝对布局;

FrameLayout:帧布局;

TableLayout:表格布局。

77.Java的基本数据类型有哪些?

Intfloatdoublecharbytelongshortboolean

78.Androiddvm进程与linux进程的是一个概念吗?

    DVMdalivk的虚拟机。每个Android应用程序都在它本身的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每个DVM都是在Linux 中的一个进程,因此说能够认为是同一个概念。

79.Android工程的结构,分别含有什么?

Src--源代码

Lib--库文件

Gen--自动生成的文件,R文件,资源索引

Res--资源文件:raw:原始文件,如MP3文件、视频文件等;drawable:图片文件;layout:布局文件;values:字符串文件等;

androidManifest:清单文件,包含权限、四大组件的申明等。

80.java.io包中的objectinputstreamobjectoutputstream类;

用于从底层输入流中读取对象类型的数据和对象类型的数据写入到底层输出流。将对象中全部成员变量的取值保存起来就等于保存了对象,将对象中全部成员变量的取值还原就相等于读取了对象。 所读写的对象必须实现了Serializable接口

81.JavaIO流;

包括字节流和字符流。

字节流:InputStream OutputStream;字符流处理的单元为2个字节的Unicode字符,分别操做字符、字符数组或字符串;若是是音频文件、图片、歌曲,就用字节流好点;字节流转换成字符流能够用 InputSteamReader OutputStreamWriter,并转换成BufferdReader BufferedWriter 他们具备缓冲区

字符流:Reader Writer ;处理单元为1个字节,操做字节和字节数组;若是是关系到中文(文本)的,用字符流.

82.重载与复写的区别?

    重载:方法名称相同,参数的个数或者类型不一样;发生在同一个类中;

    重写:方法名称相同,参数的个数和类型相同,方法体不一样;发生在继承关系中,是由子类进行复写

  1. 请使用命令行的方式建立一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下,名字为scard.img,并指定屏幕大小HVGA

84.Androidjni的调用过程?

1)安装和下载Cygwin,下载 Android NDK;

2)在ndk项目中JNI接口的设计;

3)使用C/C++实现本地方法;

4)JNI生成动态连接库.so文件;

5)将动态连接库复制到java工程,在java工程中调用,运行java工程便可.

85.请继承SQLiteOpenHelper实现:

建立一个版本为1的“diaryOpenHelper.db”的数据库,.同时建立一个 “diary” 表(包含一个_id主键并自增加,topic字符型100长度, content字符型1000长度);.在数据库版本变化时请删除diary表,并 从新建立出diary表。

86.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度显示工做。

87.如何捕获ANR异常?如何定位?

 

88.设计一个应用节约电量?

1)service是后台服务,长期存在会比较耗内存,也会耗电量,所以尽可能关闭没必要要的后台服务;

2)算法上进行优化,减小运算复杂度;

3)设置应用长期不触碰让屏幕变暗以节省电量。

89.你是如何解决问题的,常看哪些书、上哪些网站?

90.请解释下Android程序运行时权限与文件系统权限的区别。

运行时权限是Dalvik( android受权) ;文件系统 是linux 内核受权。

91.系统上安装了多种浏览器,可否指定某浏览器访问指定页面?

能够,经过intent实现。具体以下:

Intent intent = new Intent();  intent.setAction("android.intent.action.VIEW");

Uri content_url = Uri.parse("http://www.163.com");

intent.setData(content_url);
  intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent); 

  1. 你如何评价Android系统?

优势:

1)开源特性,获得众多厂商及软件开发者的支持;

2)无缝结合的Google应用

3)自由性极高的Android将会让咱们更加的接近网络化,而让咱们不要再为花费烦扰,这里主要说的是经过软件咱们能够实现各类各样的网络会话,而不是长途,漫游。

4)减小运营商的束缚。

 缺点:

1)安全和隐私:因为手机与互联网的紧密联系,我的隐私很可贵到保守。除了上网过程当中经意或不经意留下的我的足迹,Google这个巨人也时时站在你的身后,洞穿一切,所以,互联网的深刻将会带来新一轮的隐私危机。

2)首先开卖Android手机的不是最大运营商;

3)运营商仍然可以影响到Android手机

4)同类机型用户减小;

5)过度依赖开发商缺乏标准配置。

93.你认为android将来的发展趋势,前景如何?(本身总结回答)

1)市场足够大,Android这几年的发展可谓有目共睹,就像前面所说,天天的设备激活数目就达到了50万台

2)有足够多的大公司参与其中,或者成就了一些公司:除了Google自己外,Motorola移动、HTC,前者借Android咸鱼翻身,后者借Android成了市值超越Nokia的公司。

3)开放平台取代了封闭平台。让参与者均能经过本身的努力而得到利益。

  1. 什么状况会致使Force Close ?如何避免?可否捕获致使其的异常?

程序出现异常,好比nullpointer避免:编写程序时逻辑连贯,思惟缜密。能捕获异常,在logcat中能看到异常信息

95.程序调试方式?

1)断点Debug:在须要调试的地方加上断点,F11运行程序,F5逐句调试,F6略过方法,F7逐句进入方法后退出,ctrl+R运行到光标处,F8断点运行到结束。

2)Logcat:在代码中经过Log.i;Log.v等标记打印的数据,在LogCat中对应能够查看;另外也能够在Logcat中建立过滤器,Log cat->create filter->设置Filter Nameby tab name

3)Adb:经过链接手机或者模拟器进行调试,虚拟机的调试能够经过DDMS调试监控服务;

4)traceView:跟踪并报告程序运行过程当中的全部方法调用和每一个方法的耗时。

96.Android自己的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会致使什么问题?如何解决?

会,好比nullpointerException。我遇到过,好比textview.setText()时,textview没有初始化。会致使程序没法正常运行出现forceclose。打开控制台查看logcat信息找出异常信息并修改程序。

97.Intentintentfilter的区别?

Intent是一种在不一样组件之间传递的请求消息,是应用程序发出的请求和意图。做为一个完整的消息传递机制,Intent不只须要发送端,还须要接收端。

IntentFilter类表示Intent过滤器大部分状况下每个component都会定义一个或多个IntentFilter, 用于代表其可处理的Intent.通常来讲, componentIntentFilter应该在AndroidManifest.xml文件中定义。定义的方法<activity>, <receiver>, <service>元素中增长一个或多个<intent-filter>子元素.

Intent分为显示Intent(明确指定了目标组件名称的Intent,显式Intent更多用于在应用程序内部传递消息 )和隐式Intent没有明确指出目标组件名称的Intent,经过intent-filter 来寻找与隐式Intent相关的对象,它不会用组件名称定义须要激活的目标组件,它更普遍地用于在不一样应用程序之间传递消息 )。一个声明了IntentFilter的组件既能够响应显式Intent请求,也能够响应隐式Intent请求。在经过和 IntentFilter比较来解析隐式Intent请求时,Android将如下三个因素做为选择的参考标准。

Action:action属性是一个字符串表明某一种特定的动做. Intent类预约义了一些action常量开发者也能够自定义action. 通常来讲自定义的action应该以application的包名做为前缀而后附加特定的大写字符串例如"cn.xing.upload.action.UPLOAD_COMPLETE"就是一个命名良好的action.

Data:data属性指定所操做数据的URI. data常常与action配合使用若是actionACTION_EDIT, data的值应该指明被编辑文档的URI; 若是actionACTION_CALL, data的值应该是一个以"tel:"开头并在其后附加号码的URI; 若是actionACTION_VIEW, data的值应该是一个以"http: "开头并在其后附加网址的URI...

Category:category属性也是一个字符串, 用于指定一些目标组件须要知足的额外条件. 

98.如何将打开res aw目录中的数据库文件

Android中不能直接打开res aw目录中的数据库文件,而须要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,而后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法得到res aw目录中资源的 InputStream对象,而后将该InputStream对象中的数据写入其余的目录中  相应文件中。在Android SDK中能够使用SQLiteDatabase.openOrCreateDatabase方法来打开任 意目录中的SQLite数据库文件

99.sim卡的EF 文件有何做用 

SIM卡里的全部文件按树来组织:
主文件MF(Master File)——每一块SIM卡只有一个惟一的主文件其余全部文件都是它的子孙主文件只有文件头,里面存放着整个SIM卡的控制和管理信息
专用文件DF(Dedicated File)——也是只有一个文件头里面存放着整个目录的管理控制信息专用文件至关于一个目录的根.
基本文件EF(Elementary File)——既有文件头,也有文件体文件头存放该文件的位置和控制信息文件体存放真正的数据整个SIM卡中只有基本文件有文件体也只有基本文件才用来存放数据.

sim卡的文件系统有本身规范,主要是为了和手机通信,sim本 身能够有本身的操做系统,EF就是做存储并和手机通信用的

100.Android引入广播机制的用意

1)从MVC的角度考虑(应用程序内)其实回答这个问题的时候还能够这样问,android为何要有那4大组件,如今的移动开发模型基本上也是照搬的web那一套MVC架构,只不过是改了点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制能够方便几大组件的信息和数据交互;

2)程序间互通消息(例如在本身的应用程序内监_听系统来电);

3)效率上(参考UDP的广播协议在局域网的方便性);

4)设计模式上(反转控制的一种应用,相似监_听者模式)。

101.嵌入式操做系统内存管理有哪几种,各有何特性 

什么是嵌入式实时操做系统, Android 操做系统属于实时操做系统吗

嵌入式实时操做系统是指当外界事件或数据产生时,可以接受并以足够快的速度予以处理,其处理的结果又能在规定的时间以内来控制生产过程或对处理系统做出快速响应,并控制全部实时任务协调一致运行的嵌入式操做系统。主要 用于工业控制、 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就须要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,所以属于软实时。

102.一条最长的短信息约占多少byte? 

中文70(包括标点),英文160,160个字节

103.说说mvc模式的原理,它在android中的运用 

mvcmodel-view-controller。

Model应用程序的主体部分,全部的业务逻辑都应该写在该层。

View是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户惟一能够看到的一层,接收用户的输入,显示处理结果。

Controller是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,用户出发的相关事件,交给model处理。

Androidmvc

Model(模型层):对数据库的操做、对网络等的操做都应该在model里面处理,固然对业务计算等操做也是必须放在的该层的。

View(视图层):通常采用xml文件进行界面的描述,使用的时候能够很是方便的引入,固然,如何你对android了解的比较的多了话,就必定 能够想到在android中也能够使用javascript+html等的方式做为view层,固然这里须要进行javajavascript之间的通 信,幸运的是,android提供了它们之间很是方便的通讯实现。

Controller(控制层):android的控制层的重 任一般落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要经过activity交割model业务逻辑层处理, 这样作的另一个缘由是android中的acitivity的响应时间是5s,若是耗时的操做放在这里,程序就很容易被回收掉

  1. DDMSTraceView的区别

DDMS是一个程序执行查看器,在里面能够看见线程和堆栈等信息,TraceView是程序性能分析器。

105.java中如何引用本地语言

经过JNI实现本地C语言的调用。本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。经过调用本地的库文件的内部方法,使JAVA能够实现和本地机器的紧密联系,调用系统级的各接口方法。在JAVA程序中,首先须要在类中声明所调用的库名称,以下:

static {

       System.loadLibrary(goodluck);

}

还须要对将要调用的方法作本地声明,关键字为native。而且只须要声明,而不须要具体实现。以下:

public native static void set(int i);

public native static int get();

而后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

106.谈谈Android进程间通讯有哪些:

contentProvider:不一样应用间数据的共享;

Intent:在四大组件中来去自如,能够实现不一样进程间的通讯;

BroadcastReceiver:一旦注册、能够接受不一样进程间的消息,也算进程通讯的一种;

Service:服务能够控制其余应用的一些事件,也算进程间通讯;

Activity:不一样activity之间的通讯;

远程调用:客户端调用服务端应用,属于进程调用的典型;

IBinderBinder是一种进程间通讯机制,它是一种相似于COMCORBA分布式组件架构,通俗一点,实际上是提供远程过程调用(RPC)功能。在Android系统的Binder机制中,由一系统组件组成,分别是ClientServerService  ManagerBinder驱动程序,其中ClientServerService Manager运行在用户空间,Binder驱动程序运行内核空间。Binder就是一种把这四个组件粘合在一块儿的粘结剂了,其中,核心组件即是Binder驱动程序了,Service Manager 提供了辅助管理的功能,ClientServer正是在Binder驱动和Service Manager提供的基础设施上,进行Client-Server之间的通讯。

107.Activityservice属于同一进程吗?是同一线程吗?

同一个包内的activityservice,若是service没有设定属性android:process=":remote"的话,service会和activity跑在同一个进程中,因为一个进程只有一个UI线程,因此,serviceacitivity就是在同一个线程里面的。所以耗时 的操做必须在service中新开线程而不能直接放在service中。android:process=":remote"值得注意他的用法!!!若是Activity想访问service中的对象或方法,若是service设定属性android:process=":remote",那么就是跨进程访 问,跨进程访问容易出现意想不到的问题,仍是慎重给service 设定属性android:process=":remote"

108.View, surfaceView, GLSurfaceView有什么区别

1)view是最基础的,必须在UI主线程内更新画面,速度较慢。

2)SurfaceView view的子类,相似使用双缓机制,在新的线程中更新画面因此刷新界面速度比view快

3)GLSurfaceView SurfaceView的子类,opengl 专用的

109.本身的理解描述下Android数字签名。

(1)全部的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序;

(2)Android程序包使用的数字证书能够是自签名的,不须要一个权威的数字证书机构签名认证;

(3)若是要正式发布一个Android程序,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。

(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。若是程序已经安装在系统中,即便证书过时也不会影响程序的正常功能。

110.Gravitylayout_grivaty的区别?

Gravity相对于元素自己来讲所处的位置;

Layout_gravity相对于父元素来讲,处于父元素的什么位置。

111.DalvikJVM的区别:

(5)基于的平台不一样:dalvik基于寄存器,JVM基于栈;

(6)运行环境不一样:在有限的内存中,容许同时运行多个davlik实例,而且每个Dalvik应用做为一个独立的Linux进程执行。 JVM只能运行一个JVM实例,因平台的不一致进程也不一致;

(7)运行语言:Dalvik能够运行不一样的语言,如javaScalaJVM能够运行不一样的语言,如javaPython语言

(8)运行格式不一样:JVM通常是.classDalvik.dexKVM通常是.class 

(9)编写语言:Dalvik是通常由CC++编写,JVM通常是C++java编写,KVM通常是CC++ 

(10)效率不一样:Dalvik是基于寄存器因此效率高于基于栈的JVMKVM 加载函数不一样:DalvikDexfile加载class类文件,JVMKVMClassLoader 

112.Socket通讯编程:

Socket一般也称做"套接字",用于描述IP地址和端口,是一个通讯链的句柄。在Internet上的主机通常运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不一样的端口对应于不一样的服务。 网络上的两个程序经过一个双向的通信链接实现数据的交换,这个双向链路的一端称为一个Socket。Socket一般用来实现客户方和服务方的链接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址 和一个端口号惟一肯定。在java中,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是创建网络链接时使用的。在链接成功时,应用程序两端都会产生一个Socket实例,操做这个实例, 完成所需的会话。

服务端:1)建立一个ServerSocket,用于监听客户端Socket的链接请求 :实例ServerSocket:ServerSocket server = new ServerSocket(PORT); 

    2)采用循环不断接受来自客户端的请求:经过server .accept()返回一个对应客户端的socket;socket.getOutputStream()得到传给客户端的输出流;

客户端:实例socket:Socket socket = new Socket(HOST, PORT);经过socket.getInputStream()得到服务端的输入流。

113.双缓冲技术原理以及优缺点:

建立一幅后台图像,将每一帧画入图像,而后调用drawImage()方法将整个后台图像一次画到屏幕上去。

优势:双缓冲技术的优势在于大部分绘制是离屏的。

        将离屏图像一次绘至屏幕上,比直接在屏幕上绘制要有效得多。

        双缓冲技术能够使动画平滑。

缺点:要分配一个后台图像的缓冲,若是图像至关大,这将占用很大一块内存。

114.Selector的使用方式:

selector是在文件夹drawable中进行定义的xml文件。主要是用来描述控件不一样状态时的效果。它主要定义控件在下pressedselectedfocused及日常状态下的属性。

越前面定义的状态,其优先级越高。对定得某个状态,若是某个属性没有显示说明,则表示此时该属性为任意值,都不要紧。

115.能说一下java的反射(reflection)机制吗

Java运行时环境中,对于任意一个类,可否知道这个类中有哪些属性和方法?对于任意一个对象,可否调用它的任意一个方法?答案是确定的,这种动态获取类的信息以及动态调用对象的方法的功能来自java反射机制。

反射提供的功能:1)在运行时判断任意一个对象所属的类;2)在运行时任意构造一个类的对象;3)在运行时任意判断一个类所具备的成员变量和方法;4)在运行时调用任意一个对象的方法。

相关文章
相关标签/搜索