JavaSE基础问答

1.JAVA的基本数据类型有哪些?

JAVA的基本数据类型分为4类8种,就是整形 byte、short、int、long。浮点型 float 跟double,字符型 char,跟布尔型 true和 false。

追问:那 int 占几个字节?

整形从低到高分别占1,2,4,8个字节,int 的话就是占4个字节。一个字节8位,就是占32位嘛。然后最大值就是2的32次方,是21亿多。

 

2.说说 String 和 StringBuffer的区别。

String和StringBuffer都能对字符串进行操作,最主要区别就是String类的对象是不可变的,而StringBuffer类的对象是可变的。如果一个字符串改变的话就用StringBuffer,不然用String的话会生成很多新的String对象,浪费内存。

追问:那StringBuffer 和 StringBuilder的区别呢?

这两个类的对象都可以改变。区别是在执行速度方面,StringBuilder 大于StringBuffer,但是在线程安全方面,StringBuilder是线程非安全的,StringBuffer是线程安全的。在多线程时,JVM可以保证StringBuffer可以正确操作。但是大多数时候我们都是用的单线程,所以大多数都是选择用速度较快的StringBuilder。

也就是说少量数据就用String,因为比较方便。 单线程下操作大量数据用StringBuilder,因为速度较快。 多线程下操作大量数据用StringBuffer,因为能搞保证正确性。

 

3.面向对象的特征有哪些?

面向对象主要指的是 封装、多态、继承。  

        封装就是把对象的属性和行为封装在一个模块中,代码上就是封装在一个类中,然后对象的属性用变量定义,行为用方法定义,将属性的访问类型设为私有private的,然后提供一个共有的 get 和 set 方法,然后只有本类的对象才能够对属性进行赋值。封装可以提高代码的安全性。

    多态,就是多种状态。 主要的形式就是左边是父类变量,然后右边实例化一个子类,就是new 一个子类。 然后这个父类变量就有了子类的方法。

        继承,是java中类与类之间的一种关联方式。通过extends关键字就可以实现一个类继承另一个类,比如A extends B,就是A继承B,A称为子类,B称为父类。子类可以对父类的属性和方法进行调用或重新定义。并且可以新增其他的属性或方法。这样可以提供软件的可重用性和可扩展性。

 

4.常用的集合类有哪些?

常用的集合主要是三个,List、Set 和Map。List 的子类又主要是用 ArrayList 和LinkedList,Set 的子类是 hashSet 和 TreeSet,Map 的子类是HashMap 和 HashTable。主要区别是 List 集合能重复,Set 集合不能重复,重复的话会自动覆盖,Map集合的键不能重复,键重复的话值就被覆盖。 对于List 的子类 和ArrayList 和LinkedList,ArrayList 是查询数据快而插入数据慢,LinkedList是查询数据慢而插入数据快。  Set的子类HashSet 用得比较多,TreeSet 的话可以对对象进行排序,但是要实现一个Comparable 接口和 重写里面的 compareTo方法,麻烦一点。 至于HashTable和HashMap的话,就是HashTable是线程安全的,HashMap是线程不安全的,但是HashMap速度比较快。一般单线程下都是用的HashMap。   理解线程安全和速度的关系有点像生活中的‘载客摩托车’ 和 ‘公车’, 有时候赶时间去地铁站,公车的话虽然安全,但是速度有点慢,要多时间,这时候我就选择‘载客摩托车’,因为他好像红灯绿灯都能走,很快,但是不安全。   就是线程安全与执行速度要视情况而定。单线程就是路上车少的时候摩托车挺快也挺安全的,但是多线程就是多车的时候,选择公交就行,虽然慢一点,还是安全重要。

 

5.抽象类和接口的区别。

首先,抽象类和接口都不完整,就是都不能被实例化,他们只有被子类继续或者实现才有意义。

区别是:

    抽象类可以有构造方法,接口没有构造方法。抽象类除了能有抽象方法外,其他的跟普通的类一样。

        抽象类中有普通变量和静态变量,接口中只有public static  final 修饰的常量。

        抽象类中可以有普通方法,抽象方法有没有都行,接口中没有普通方法,只有抽象方法。

抽象类中的抽象方法的访问类型修饰符可以是public 或 protected 的,接口中的抽象方法只能是默认的public abstract ,而且接口中public abstract 还可以省略。

抽象类只能单继承,接口可以多继承。

 

6.final, finally,finalize的区别。

final可以用来修饰类,表示这个类不能被继承。final可以用来修饰变量(不管是类的成员变量还是方法中的局部变量),表示该变量的值不能再改变(即常量)。final还可以用来修饰方法,表示这个方法不能被子类重写。(static可以修饰类中的成员变量,表示类变量。但不能修饰方法中定义的变量。)

finally是异常处理语句结构的一部分,放在try-catch的后面,表示总是执行。里面一般放的是关闭文件、关闭流、关闭系统之类的代码。

finalize是Object类的一个方法。是GC垃圾回收运行机制中的一部分。在垃圾回收的时候会调用被回收对象的这个finalize()方法。可以重写这个方法使垃圾回收时也回收其他资源,例如关闭文件等。这样就能更有效地利用好有限的资源,节省空间。还有就是因为垃圾回收是不定时的,所以JVM不保证这个finalize方法总被调用。

7.如何实现多线程。

线程的实现由两种方式,第一种是继承Thread类,然后重写run方法;第二种是实现runnable接口,然后实现其runnable接口。

追问:怎么启动?

调用线程对象的 start()方法

怎么停止?

1.正常情况下等run方法跑完就停止了,如果run方法里面有while循环的话,一般是通过一个布尔型条件(flag)来控制。

2.用stop()方法来停止。但是这样很危险。可能会产生不可预料的后果。

3.用interrupt 方法来停止。

JSP:

8.请求的GET与POST方式的区别。

9.转发和重定向的区别。

10.说一下JSP的内置对象。

11.说一说Servlet的生命周期

posted @ 2017-03-11 16:19  _AlbertWang  阅读(186)  评论(0编辑  收藏  举报