1.structs是基于MVC的
2.abstract
用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。
用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。
Abstract是Java中的一个重要关键字,可以用来修饰一个类或者一个方法。 修饰一个方法时,表示该方法只有特征签名(signature),没有具体实现,而是把具体实现留给继承该类的子类。一个类中只要有一个abstract 方法,那么这个类就要被声明为abstract,但是其中可以有非abstract方法。 abstract类可以使得类的设计者能够创建方法的原型,而真正的实现留给使用这个类的人
3.在static方法不能使用this
4.URL u =new URL("http://www.123.com");。如果www.123.com不存在,则返回__http://www.123.com____。
打印URL的类的时候,调用URL类的toString()方法,不管URL中的网址是不是存在的,都可以将其打印出来
5.i=j++的问题
i=j++的执行步骤:
tmp=j;
j++;
i=tmp;
6.集合与map各自的继承关系
.
7.一道绕弯子的题目
public class Test {
public static void main(String [] args){
System.out.println(new B().getValue());
}
static class A{
protected int value;
public A(int v) {
setValue(v);
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
try{
value++;
return value;
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);
System.out.println(value);
}
return value;
}
}
static class B extends A{
public B() {
super(5);
setValue(getValue() - 3);
}
public void setValue(int value){
super.setValue(2 * value);
}
}
}
怎么理解?
首先要理解当A继承B的时候,会继承B的变量和方法,关键点就是A如果调用方法时优先自己的重写方法,当调用父类的方法时,this的意义仍是A类(因为是在A类中执行的)
8.异常
try用throw一个对象抛出异常,catch捕获异常
在方法体上也可以用throws进行异常的抛出
finally时不管是否有异常抛出都执行的代码段
9.集合的线程安全问题
1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。
2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
List list = Collections.synchronizedList(new ArrayList());
Set set = Collections.synchronizedSet(new HashSet());
10.二元操作
两个数值进行二元操作时,会有如下的转换操作:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
故,x==f1[0]中,x将会转换为float类型。
11.类之间存在以下几种常见的关系:
use-a 是依赖关系
has-a 一般是组合关系
is-a 一般是继承关系