Java题集(3)
1、面向过程与面向对象的区别?
面向过程: 是分析解决问题的步骤,然后再用函数把这些步骤一步一步地实现,然后在使用的时候一一调用即可。性能较高,所以单机片。
面向对象: 是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特性,所以易维护、易复用、易扩展。但性能上,比面向过程低。
2、八种基本数据类型的大小,以及他们的封装类
基本类型 | 大小(字节) | 默认值 | 封装类 |
---|---|---|---|
byte | 1 | (byte)0 | Byte |
short | 2 | (short )0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
boolean | - | false | Boolean |
char | 2 | \u0000(null) | Character |
3、标识符的命名规则?
-硬性要求:
(1)标识符可以包含英文字母,0-9的数字,$以及_
(2)标识符不能以数字开头
(3)标识符不是关键字
-非硬性要求:
(1)类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。
(2)变量名规范:首字符小写,后面每个单词首字母大写(小驼峰式)。
(3)方法名规范:同变量名。
4、instanceof关键字的作用?
是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例。
5、Java自动装箱与拆箱的定义?
-装箱:就是自动将基本数据类型转换为包装器类型(引用类型)
-拆箱:就是自动将包装器类型(引用类型)转换为基本数据类型
6、Java的四种引用是?
(1)强引用:在程序内存不足(OOM)的时候也不会被回收
(2)软引用:在程序内存不足时,会被回收
(3)弱引用:只要JVM垃圾回收器发现了它,就会将之回收
(4)虚引用:回收机制与弱引用差不多,但是它被回收之前,会被放入ReferenceQueue中。
7、深拷贝和浅拷贝的区别是什么?
-浅拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
-深拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换而言之,深拷贝把要复制的对象所有引用的对象都复制了一遍。
8、jsp 和 servlet 有什么区别?
jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
9、String、StringBuffer、StringBuilder区别?
String是字符串常量,StringBuffer、StringBuilder是字符串变量,StringBuffer是线程安全的,StringBuilder线程不安全的,但是速度快(因为它不会为线程安全消耗性能)。
10、poll() 方法和 remove() 方法的区别?
都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。
11、数组有没length() 这个方法 ?String有没有没length()这个方法?
数组没有length这个方法,但是有length这个属性String有length这个方法
12、main方法可以重载吗?
当然可以。通过方法重载,一个类中可以有很多main方法。
13、并行和并发有什么区别?
- 并行:多个处理器或多核处理器同时处理多个任务。
- 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。
14、创建线程有哪几种方式?
创建线程有三种方式:
- 继承 Thread 重写 run 方法;
- 实现 Runnable 接口;
- 实现 Callable 接口。
15、线程的 run() 和 start() 有什么区别?
start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。