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。
10,单态设计模式:一个类只产生一个对象。
为了一个类只产生一个对象,就必须,private构造方法。从而就不能new该类。而是在类的内部产生该类对象。
在内部创建的对象为了与外部联系,就必须有static方法。
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关键字做到这一点。
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关键字做到这一点。
相关文章推荐
- Reading "Thinking in Java" #2
- Thinking in Java中文版 1
- 《Thinking in Java》读书笔记(更新中2005.11.08)
- 【Notes】《Thinking in Java》【Chapter 11】Part II
- this关键字的使用(摘录Thinking In Java)
- 《Thinking in Java》学习笔记(一)——对象导论
- 《thinking in java》学习手记(四)
- 《Thinking in Java》读书笔记(二)
- 《Thinking in Java》读书笔记(一)
- 重温Thinking in Java(一)
- Thinking in Java 中文版 2
- 《Thinking in Java》读书笔记
- 《Core Java 2》与《Thinking in Java》之我见:)
- Thinking in java Chapter 1 笔记
- Thinking in Java 读书笔记 —— 1.Introducation to Object
- Thinking in Java 10
- Reading "Thinking in Java" #5
- 很多人知道《Thinking in Java》吧,那么《Thinking in C#》呢?
- java 线程[摘抄至《Thinking in Java》]
- Thinking in Java学习笔记(三)(zt)