1。abstract 类中可以有非abstract方法,在abstract的子类中必须实现父类的所有abstract方法,至少要有一个空的方法体。
2。接口是一种特殊的abstract类,在接口中的方法不能含有方法体,默认的修饰是public abstract,不能人为的设定方法是private等修饰符
,但可以指定方法为abstract方法。当类implements接口,类中实现接口中的方法必须加上public修饰。
3。接口中定义的字段会自动具有static和final属性。它们不能是“空白final”,但可初始化成非常数表达式,接口中的字段可以在其他类中
通过接口调用(如: 在主类中:System.out.println(jiekao.value))。
当然,字段并不是接口的一部分,而是保存于那个接口的static存储区域中。
4.初始化顺序:
class A
class B extends A
Class C extends B
(1)加载类到内存:一般在第一次使用的时候加载类(static)
(2)所有的对象和类变量设定默认,即对象为null,变量默认为0;
(3)初始化static方法和变量
(4)构造函数:从父类开始.在同一个类中,在调用构造函数之前是先类变量的初始化.
思考下面程序的输出:
class A{
private a=11;
public A(){
show();
System.out.println("this is A struction");
}
public void show(){System.out.println("the a is value ="+a+" in class A");}
static{System.out.println("this is a static in class A");}
{System.out.println("this is a clock in class A");}
}
public class B extends A{
private a=22;
public static void main(String arg[]){
//new A();
//A test1=new B();
B test2=new B();
}
public B(){
show();
System.out.println("the B struction");
}
public void show()
{System.out.println("the a is value ="+a+" in class B");}
static{System.out.println("the static in class B");}
{System.out.println("the clock in class B");}
}
5.Math.random() 的范围是:[0,1)
6.将一个float或double值造型成整数值后,总是将小数部分“砍掉”,不作任何进位处理。例如:char a=(char)(1.4+'a')的值为'b';
7.十六进制(Base 16)——0x;八进制(Base 8)----0;
按位运算符~对于+数符号位先取反然后加1.如: ~3=-4;对于-数符号位取反然后减1.如 ~-2=1
8.移位运算符
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型 (主类型的一种)。左移位运算符(<<)能将运算符左边的运
算对象向左移动运 算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算 符左边的运算对象向右移动运算符右侧指
定的位数。“有符号”右移位运算符 使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1 。Java也添加了一种“
无符号”右移位运算符(>>>),它使用了“零扩展”: 无论正负,都在高位插入0。这一运算符是C或C++没有的。
9.垃圾回收机制的设计方案:
reference counting 方案,自适应(adaptive)垃圾回收方案--stop-and-copy(停止-拷贝模式) 和 mark-and-sweep(标志-清扫模式)
10.java有4中访问控制符:public,package(默认),protected,private;类只有两种访问控制权限:public,package(默认),类不能是private或
protected
11.singleton设计模式:
public class A
{
private A(){}
private static A a=new A();
public A getA()
{
return a;
}
}
12.类的装载通常发生在这个类的对象第一次被创建的时候,但是在访问static数据或static方法的时候也被调用.
13.方法重载的方式:
参数的类型不同 or 个数不同 or 顺序不同.
注:仅通过返回值来确定方法的重载,编译不通过.
14.abstract 与 interface:
interface只提供形式,不谈实现:
interface中的数据成员天生就是public static和final的,方法默认是public的,当然在一个类中定义接口或类可以用private等修饰符.
interface允许多重继承(interface A extends B,C{} B,C是接口);
15.普通内部类中不允许有static方法,static属性或static内部类(即嵌套类).
16.java中编译后的.class名字:
如:class A{
class B{
class C{}
}
public void f()
{
class D{}
}
public E getE()
{
return new E(){
};
}
}
interface E{}
编译后得到的.class文件有:A.class,E.class,A$B.class,A$B$C.class,A$1.class,A$1D.class