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

java杂谈,顺便谈谈《thinking in java》

2015-03-01 15:01 141 查看
一,面向对象

1,new 出来的是堆里面的。

      而对对象的使用只是在使用引用变量。

Person person = new Person();

person 是对对象的引用,而new Person在堆中。

2,当一个对象创建时会在内存中对其各种类型成员变量进行初始化,初始化为0或null,boolean为false。

3,对象怎么变成垃圾?当没有引用时,对象就会变为垃圾。

4,对象的比较:

                 ==  与 equals()

                 ==:除了比较值外,还要比较是否引用相同对象。 

                  equals():只比较值。

5,类的封装性,private就是要求通过set(),get()方法来改变获取变量。

6,如果不定义构造函数,编译器会自动产生一个不带参数构造函数。

7,构造函数的重载就是给一个对象几种初始化方式的备选项,初始化的过程就是先在堆中创建一个变量值为默认值(0或null,boolean为false)

的对象,再根据构造函数初始化。

8,函数的参数传递:引用类型可以通过函数改变值,是因为通过引用改变了堆内存中的变量值。

9,static方法只能调用类中其他static成员,而不能直接访问其他非静态成员。

因为非静态成员需要先创建类的实例对象后才能使用,而静态方法在使用前不需要创建任何对象。

同理,静态方法不能使用super,和this。

public class Test {
static void a(){
b = 1;
}
private static int b;
}

10,单态设计模式:一个类只产生一个对象。

为了一个类只产生一个对象,就必须,private构造方法。从而就不能new该类。而是在类的内部产生该类对象。

在内部创建的对象为了与外部联系,就必须有static方法。

class A{
private A(){
}
static A   myA = new  A();                    //只能在内部创建对象
public static A getInstance(){
return myA;
}
}

class Test{
public static void main(String[] args){
A obj1 = A.getInstance();
A obj2 = A.getInstance();
System.out.println(obj1 == obj2);
}
}

11,内部类可以访问嵌套他的类的成员,包括private。但外部类不可以直接访问其内部类的成员。

12,类不能继承类的构造函数,默认是继承一个无参无效构造函数,但可以用super调用父类构造函数。

13,抽象类不能被实例化,也就是不能被new。

        抽象方法只需声明,不需实现。

        含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化。否则这个子类还是抽象类。

14,子类对象可以自动转换为父类。    父类 a = new 子类();

          父类转换为子类需要强制类型转换。   if(a instanceof B) B b = (B)a;     有必要通过instanceof来检验。

15,所有类都隐含继承Object类。

16,接口中不允许定义变量。只能为public static final 的。所以可以省略修饰符。

17,可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码。可以用this关键字做到这一点。

         
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java