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

一,面向对象

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关键字做到这一点。

         



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值