您的位置:首页 > 编程语言 > Java开发

Thinking In Java学习笔记

2004-10-26 22:21 447 查看
Thinking In Java学习笔记(很久以前写的,发现有错要告诉我,不要让我错下去~~~)
===============================================================================
对象的创建:
Java只在堆里动态地创建对象。(new)
在栈里分配、释放内存是最高效的。堆里创建对象(Java)比在栈里新建对象(C++可以)代价要高
栈strack:常规内存区,通过栈指针上下移动快速分配内存,最快最有效的分配内存方式。存储在栈的数据必须知道大小和生命周期,Java把对象的引用存储在本区域(和某些数据,如原始类型数据),但是对象本身不存储在栈中。
堆heap:内存区。分配空间时,无需知道需要分配的大小和生命周期,较strack灵活。Java对象都存储在这里。
原始Primitive类型作为类成员的默认初始值:注意不是类成员的变量不会有默认值
boolean=false
char=/u0000=null
byte=(byte)0
short=(short)0
int=0
long=0L
float=0.0F
double=0.0D
方法参数:
Java传递对象的时候,实际上是传递引用!(except primitive type )
类的比较:
对象使用equals(),原始类型使用== !=
equals() 缺省时是比较 引用 是否相同,所有自己编写的类要比较的时候,必须实现equals()方法
位运算:
&  与
|   或
~  非
^  异或
移位运算
<<   低位用0补充
>>   高位用符号补充,正0负1
>>>  高位用0补充
e值(=10):
float i=1.39e-2f=1.39*10(-2)=0.00139
重载overloading
方法名相同,返回值、参数可以不同
覆写overriding
名,参数,值均相同
finalize() 
GC线程只释放new分配的内存,假若对象所拥有的内存不是new分配的,可是使用finalize()进行清理工作,由GC再释放内存前调用,。(由java的Native Method引发)
类初始化(这个华为笔试考了):
1。装入class文件(派生类->基类)
2。static成员初始化(基类->派生类)
(先基类3.4.5.6 -> 后派生类3.4.5.6)
3。new 对象时,在heap里分配足够内存
4。得到内存清零,这样类变量自动赋值,引用为null
5。成员初始化
6。构造函数
匿名内部类:初始化类变量、对象,可以为静态或非静态变量赋值
public class Test {
    static int MAX;
    static{
        MAX=100;
    }
    int b;
    {
        b=200;
    }
}
Singleton模式:
这个类创建有且只有一个实例对象,必须通过access()方法访问
public class Test{
 private Test(){}
 private static Test t1=new Test();
 public static Test access(){
  return t1;
 }
}
多态性:动态绑定、运行时绑定
public class Test{
 public static void add2(Collection c){
     c.add("test");//运行时才确定c的类型,执行相应的add(Object obj)方法
     c.add("test");
 }
    public static void main(String[] args) {
        Collection list=new ArrayList();//上传转型 upcasting
        Collection set=new HashSet();
        add2(list);
        add2(set);
        System.out.println(list);
        System.out.println(set);
    }
}
一个好的构造函数,应该用最少的工作量把对象设置好,并尽量调用方法,要不就尽量调用final/private方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息