-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjava_based.html
108 lines (90 loc) · 6.35 KB
/
java_based.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>java基础</title>
</head>
<body>
1.什么是java虚拟机?为什么java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行java字节码的虚拟机进程。
java源文件被编译成能被java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。
Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.JDK和JRE的区别是什么?
java运行时环境(JRE)是将要执行java程序的java虚拟机。
它同时也包含了执行applet需要的浏览器插件。
java开发工具包(JDK)是完整的java软件包,包含了JRE,编译器和其他的工具(比如:JavaDOC,Java调试器),可以让开发者开发、编译、执行java应用程序。
3."static"关键字是什么意思?java中是否可以覆盖(override)一个private或者是static的方法?
"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
java中static方法是不能被重写,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法跟类的任何实例都不相关,所以概念上不适用。
4.是否可以在static环境中访问非static变量?
static变量在java中是属于类的,它在所有的实例中的值是一样的。
当类被java虚拟机载入的时候,会对static变量进行初始化。
如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.java支持的数据类型有哪些?什么自动拆装箱?
java语言支持8个基本数据类型:
1)byte
2)short
3)int
4)long
5)float
6)double
7)boolean
8)char
自动装箱是java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。
比如:把int转化成Integer,double转化成double,等等,反之就是自动拆箱。
在jdk1.5之前是没有自动拆装箱,比如:
int转Integer
int i = 0;
Integer wrapperi = new Integer(i);
Integer转int
Integer wrapperi = new Integer(0);
int i = wrapperi.intValue();
在jdk1.5之后java提供了自动拆装箱:
int i = 0;
Integer wrapperi = i;
或
int i = 0;
Integer wrapperi = Integer.valueOf(i);
JDK API文档中对这个新的valueOf方法有明确的解释:
如果不需要新的 Integer 实例,则通常应优先使用该方法,而不是构造方法 Integer(int),因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
引入缓存机制的作用何在?
假如我们在编程时大量需要值为100(100的范围在-128到127之间)的Integer对象。
如果只能通过new来创建,需要在堆中开辟大量值一样的Integer对象。
这是相当不划算的,IntegerCache.cache很好的起到了缓存的作用。
当我们需要Integer i = 100的时候,直接从cache中取出第[100+128]号元素的地址赋值给引用i,再次需要Integer j = 100时,还是直接去这个地址赋值给j。
是不是省去了在堆中不停的创建对象的代价了(空间,时间上的消耗都很大)。
这就是valueOf方法真正的提高性能之处。
正如JDK API文档对valueOf(int i)方法的描述,该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
结论
valueOf(int i)的优化只针对于范围在-128到127的整数。
(摘自http://denverj.iteye.com/blog/745422)
6.java中的方法重写(Overriding)和方法重载(Overloading)是什么意思?
java中的方法重载发生在同一个类里面,两个或者是多个方法名相同但是参数不同的情况。
与此相对,方法重写是说子类重新定义了父类的方法。
方法重写必须有相同的方法名,参数列表和返回类型。
子类可能不会限制它所重写的方法的访问。
7.java中,什么是构造函数?什么是构建函数重载?什么是复制构造函数?
当新的对象被创建的时候,构造函数被调用,每一个类都有构造函数。
在没有给类提供构造函数的情况下,java编译器会为这个类创建一个默认的构造函数。
java中构造函数重载和方法重载很相似,可以为一个类创建多个构造函数。
每一个构造函数必须有它自己唯一的参数列表。
java不支持C++中那样的复制构造函数,这个不同点是因为你如果不自己写构造函数的情况下,java不会创建默认的复制构造函数。
8.java支持多继承吗?
不支持,java不支持多继承,每个类都只能继承一个类,但是可以实现多个接口。
9.接口和抽象类的区别是什么?
java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
1)接口中所有的方法隐含的都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法;
2)类可以实现很多接口,但是只能继承一个抽象类;
3)类如果要实现一个接口,它必须要实现接口声明的所有方法。
但是类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须声明成是抽象的;
4)抽象类可以在不提供接口方法实现的情况下实现接口;
5)java接口中声明的变量默认都是final的,抽象类可以包含非final的变量;
6)java接口中的成员函数默认是public的,抽象类的成员函数可以是private、protected或者是public;
7)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是如果它包含main方法的话是可以被调用的。
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,二十对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
</body>
</html>