1
、
Java
语言有哪些特点
1
、简单易学、有丰富的类库
2
、面向对象(
Java
最重要的特性,让程序耦合度更低,内聚性更高)
3
、与平台无关性(
JVM
是
Java
跨平台使用的根本)
4
、可靠安全
5
、支持多线程
2
、面向对象和面向过程的区别
面向过程
:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发
面向对象
:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,
而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有
封装、继承、多态
的特
性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。 但是性能上来说,比面向过程要
低。
3
、八种基本数据类型的大小,以及他们的封装类
1.int
是基本数据类型,
Integer
是
int
的封装类,是引用类型。
int
默认值是
0
,而
Integer
默认值是
null
,所以
Integer
能区分出
0
和
null
的情况。一旦
java
看到
null
,就知道这个引用还没有指向某个
对象,再任何引用使用前,必须为其指定一个对象,否则会报错。
2.
基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另
一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。
虽然定义了
boolean
这种数据类型,但是只对它提供了非常有限的支持。在
Java
虚拟机中没有任何供
boolean
值专用的字节码指令,
Java
语言表达式所操作的
boolean
值,在编译之后都使用
Java虚拟机中的
int
数据类型来代替,而
boolean
数组将会被编码成
Java
虚拟机的
byte
数组,每个元素
boolean
元素占
8
位。这样我们可以得出
boolean
类型占了单独使用是
4
个字节,在数组中又是
1
个字
节。使用
int
的原因是,对于当下
32
位的处理器(
CPU
)来说,一次处理数据是
32
位(这里不是指的
是
32/64
位系统,而是指
CPU
硬件层面),具有高效存取的特点。
4
、标识符的命名规则。
标识符的含义:
是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等
等,都是标识符。
命名规则:(硬性要求)
标识符可以包含英文字母,
0-9
的数字,
$
以及
_
标识符不能以数字开头 标识符不是关键字
命名规范:(非硬性要求)
类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。 方法名规范:同变量名。
为什么会出现这样的结果?输出结果表明
i1
和
i2
指向的是同一个对象,而
i3
和
i4
指向的是不同的对
象。此时只需一看源码便知究竟,下面这段代码是
Integer
的
valueOf
方法的具体实现:
其中IntegerCache类的实现为:
private static class IntegerCache {
static final int high;
static final Integer cache[];
static {
final int low = -128;
// high value may be configured by property
int h = 127;
if (integerCacheHighPropValue != null) {
// Use Long.decode here to avoid invoking methods that
// require Integer's autoboxing cache to be initialized
int i = Long.decode(integerCacheHighPropValue).intValue();
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
}
private IntegerCache() {}
}
从这
2
段代码可以看出,在通过
valueOf
方法创建
Integer
对象的时候,如果数值在
[-128,127]
之间,
便返回指向
IntegerCache.cache
中已经存在的对象的引用;否则创建一个新的
Integer
对象。
上面的代码中
i1
和
i2
的数值为
100
,因此会直接从
cache
中取已经存在的对象,所以
i1
和
i2
指向的是
同一个对象,而
i3
和
i4
则是分别指向不同的对象。
面试题
2:以下代码输出什么
8、 equals与==的区别
10
、
String
、
String StringBuffffer
和
StringBuilder
的区别是什么
?
按操作对象分类结构图: