1.java String类型底层是char[]实现的 但是不像c的是它的结尾不是以\0结束的
2. char存储的unicode码
3.接口
所有方法都是public的抽象方法
所有常量都是public static final修饰
为什么是public:因为接口必然是要被实现的,如果不是public,这个属性就没有意义了;
为什么是static:因为如果不是static,那么由于每个类可以继承多个接口,那就会出现重名的情况;
为什么是final:这是为了体现java的开闭原则,因为接口是一种模板,既然是模板,那就对修改关闭,对扩展开放。
4。守护线程与非守护线程
非守护线程(比如主线程)结束时,守护线程也会结束
结束线程的方法是interrupt()
一个线程等待另一个线程的方法是wait()
5.在Applet 中,方法的执行顺序是
init(), start(), paint(),stop(),destroy()
6.内联函数的问题
内联函数就是在程序编译时,编译器将程序中出现 的内联函数调用表达式用内联函数的函数体来直接进行替换。显然,这样就不会产生转去转回的问题,但是由于在编译时将函数体中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。
public final void method1() {
//TODO something
}
这个指示并不是必需的。final关键字只是告诉编译器,在编译的时候考虑性能的提升,可以将final函数视为内联函数。
但最后编译器会怎么处理,编译器会分析将final函数处理为内联和不处理为内联的性能比较了。
7.当编译并运行下面程序时会发生什么结果()
public
class
Bground
extends
Thread{
public
static
void
main(String argv[]){
Bground b =
new
Bground();
b.run();
}
public
void
start(){
for
(
int
i=
0
;i<
10
;i++){
System.out.println(
"Value of i = "
+i);
}
}
}
当继承父类时重写了start()而没有重写run(),这是会调用父类的run方法,而父类run方法没有实际逻辑,所以编译正确却无输出
8.ResultSet跟普通的数组不同,索引从1开始而不是从0开始
9.ArrayList和LinkedList的异同
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
10.Base base = new
Son();
多态调用 意义:使base能够调用Son中的重写方法,而不能调用非重写方法(如果在更新的时候,修改原类代价太大,直接继承,重写方法比较合适)
子类继承父类不能重写静态方法,也就是说它不能被调用
11forward和redirect、
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.
11.java继承中对构造函数是不继承的,只是显式或者隐式调用
12.创建一个子类的初始化过程
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;
执行 Base b = new Sub();时由于多态 b编译时表现为Base类特性,运行时表现为Sub类特性,
Base b = new Sub();不管是哪种状态都会调用Base构造器执行 callName()方法;
13. ”==“和equals()
包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱
包装类的equals()方法不处理数据转型