您的位置:首页 > 职场人生

Java面试题大全(Java基础十二)

2016-09-29 16:53 295 查看
66、说出一些常用的类,包,接口,请各举5个

常用的包有:

java.lang包下包括Math、System、StringBuilder、StringBuffer、Runtime、Thread、Runnable等。

java.util包下包括List、Set、Map,以及这些接口的常用实现类:ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。

java.io包下包括InputStream、OutputStream、Reader、Writer、FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter等

java.sql包下包括Connection、Statement、PreparedStatement、ResultSet等。

java.net包下包括Socket、ServerSocket、URL、URLConnection、DatagramPacket、DatagramSocket等。

如果为让别人感觉你对Android很熟悉,还应该增加一些Android常用的包、类,如:

android.app包下有:Activity、ListActivty、TabActivity、AlertDialog、AlertDialog.Builder、Notification、Service等。

android.content包下有:ContentProvider、ContentResolver、ContentUris、ContentValues、Context等

android.database包下有Cursor等

android.database.sqlite包下有:SQLiteDatabase、SQLiteOpenHelper等

android.graphics包下有Bitmap、BitmapFactory、Canvas、Color、Matrix、Paint、Path等。

android.widget包下有TextView、Button、CheckBox、RadioButton、ListView、GridView、Spinner、Gallery等。

67、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。字节流由InputStream OutputStream派生出来,字符流由Reader、Writer派生出来。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

68、字节流与字符流的区别

字节流和字符流区别非常简单,它们的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同:字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。

字节流主要由InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。

字节流直接是基于字节进行输入、输出的,因此它的适用性更广。字符流则在处理文本内容的的输入、输出时更加方便——不会出现读取半个字符的情形。

Java提供了将字节流转换为字符串的InputStreamReader和OutputStreamWriter,但没有提供将字符流转化为字节流的方法。因为:字节流比字符流的使用范围更广,但字符流比字节流操作方便。如果有一个流已经是字符流了,也就是说是一个用起来更方便的流,为什么要转换成字节流呢?反之,如果现在有一个字节流,但我们知道这个字节流的内容都是文本内容,那么把它转换成字符流来处理就会更方便一些,所以Java只提供了将字节流转换字符流的转换流,没有提供将字符流转换成字节流的转换流。

69、什么是Java序列化,如何实现Java序列化?或者请解释Serializable接口的作用。

象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流(无论是从磁盘中获取,还是通过网络获取),都可以将这种二进制流恢复成原来的Java对象。

实现Java序列化有两种方式:

A.让Java类实现Serializable接口。

B.让Java类实现Externalizable接口,实现该接口时还必须实现readExternal、writeExternal O这两个方法。

一旦Java类实现了上面两种接口,接下来程序中就可通过ObjectInputStream、ObjectOutputStream来读取、保存Java对象。

Serializable接口只是一个标记接口,实现该接口无需实现任何方法,实现了该接口的类就是可序列化的类。

序列化对于Java开发非常重要,例如在web开发中,如果对象需要保存在了Session中,Tomcat在某些时候需要把Session中的对象序列化到硬盘,因此放入Session中的对象必须是可序列化的,要么实现Serializable接口,要么实现Externalizable接口。还有,如果一个对象要经过网络传输(比如RMI远程方法调用的形参或返回值),这个对象也应该是可序列化的。

70、描述一下JVM加载class文件的原理机制?

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过

加载

连接

初始化

三个步骤来对该类进行初始化,如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。

类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。

类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是我们前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器。

通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:

A.从本地文件系统来加载class文件,这是前面绝大部分类加载方式。

B.从JAR包中加载class文件,这种方式也是很常见的,前面介绍JDBC编程时用到的数据库驱动类就是放在JAR文件中,JVM可以从JAR文件中直接加载该class文件。

C.通过网络加载class文件。

D.把一个Java源文件动态编译、并执行加载。

当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构:

1.Bootstrap ClassLoader:根类加载器。

2.Extension ClassLoader:扩展类加载器。

3.System ClassLoader:系统类加载器。

Bootstrap ClassLoader,被称为引导(也称为原始或根)类加载器。它负责加载Java的核心类。在Sun的JVM中,当执行java.exe的命令时使用-Xbootclasspath选项或使用-D选项指定sun.boot.class.path系统属性值可以指定加载附加的类。

Extension Classloader,被称为扩展类加载器,它负责加载JRE的扩展目录(%JAVA_HOME%/jre/lib/ext或者由java.ext.dirs系统属性指定的目录)中JAR包的类。

通过这种方式,我们就可以为Java扩展核心类以外的新功能,只要我们把自己开发的类打包成JAR文件,然后放入JAVA_HOME/jre/lib/ext路径即可(对于笔者的安装环境来说,扩展路径为:D:/Java/jdk1.7.0/jre/lib/ext)。

System Classloader,被称为系统(也称为应用)类加载器,它负责在JVM启动时加载来自java命令的-classpath选项、java.class.path系统属性,或CLASSPATH环境变量所指定的JAR包和类路径。程序可以通过ClassLoader的静态方法getSystemClassLoader()获取系统类加载器。如果没有特别指定,则用户自定义的类加载器都以类加载器作为父加载器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面试题