JAVA编程思想 学习笔记

1 构造器

1)一旦创建一个对象(如 new Rock();),就会分配相应的存储空间,并调用构造器。

解释:(1)只有创建对象时,才会调用构造器;

            (2)如果不是创建对象,只是创建句柄,那么不会调用构造器?

 

2 重载方法

重载方法的区分:每个重载方法都必须采取独一无二的自变量类型列表:

例子:

1)两个函数的参数顺序不一样:可以区分重载方法

如:  static void print(String s, int i)

          static void print(int i, String)

参数顺序不一样,可以区分

注意:这种重载不推荐,因为会产生难以维护的代码。

 

 3主类型的重载

1)主类型:也即基本类型(如int ,long 等)

2)主类型重载时的注意事项:主类型能从一个较小的类型自动的转变为一个较大的类型

如果参数的类型比重载方法中参数的类型小,可以自动的转化为重载方法中参数的类型==>自动向大转换

但是如果参数的类型比重载方法中参数的类型大,必须手动显示转换为重载方法中的参数类型才可以,否则会出现编译错误。

例如

void print(char x);

void print(long x);

print(5);//5为int,自动转化为long,调用print(long x)

void print(long x);

print(5);//此时5为int,小于long,编译出错,应该写成:print( (long)5);

 

4 不能使用返回值来区分重载方法

 

5 关于默认构造器

1)如果没有定义构造器,编译器会自动帮我们实现一个默认构造器;

2)如果定义了一个构造器,编译器就不会帮我们事先默认构造器;

 

6 this指针

1)只能在方法内部使用;

2)常见使用点:(1)希望将句柄返回给当前对象;

                               (2)在构造器中调用构造器;

 

7 在构造器中使用this调用构造器

注意事项:

(1)尽管可用this指针调用一个构造器,但是不可调用两个!

(2)此外,在一个构造器中,使用this调用另外一个构造器时,this构造器调用必须是第一句话,也即第一件事是调用构造器,然后才能做其他事情。

 例子:

 

Flower(int i) { print(i);}

Flower(String s {print(s);}

Flower(String s, int petals)

{

   this(petals);//使用this调用重载方法Flower(int i)

  //this(s);//尝试使用this调用重载方法Flower(int i),==>不允许,因为不能有两个this调用,只能有一个!

this.s = s;//this的另外一个用法

}

 

8 清除

1)垃圾收集器只知道释放那些由new分配的内存;

2)对于不是由new分配的内存,JAVA提供名为finalize()的方法来清除这些内存;

3)垃圾收集器只和内存有关:业绩垃圾回收期存在的唯一原因是为了回收程序不再使用的内存;

 

9 成员初始化

1)在一个方法中的局部变量,不会被自动初始化:

例如:

  void f() {

       int i ;

       i++;

   }

会出现编译错误,i没有初始化就使用!

2)但是如果类的数据成员为一个基本类型,会被自动初始化;

3)在一个类的内部定义一个对象句柄时,如果不将其初始化为新对象,那么这个句柄就会获得一个空值;

 

 10 初始化

1)类定义中初始化:

JAVA中,可以在类内部定义变量的时候也为其赋值,达到初始化的目的;==>  C++中不可以

==>这样做的一个弊端是:每个对象都会获得相同的初始化值;

2)构造器初始化:

 clas Counter {

    int i;

   Counter() { i = 7;}

//i会首先初始化为0,然后初始化为7

3)初始化顺序:

(1)变量:在类中:初始化的顺序是由变量在类中的定义顺序决定的:即使变量定义大量遍布于方法定义的中间,这些变量任然会在任何方法调用之前初始化---甚至是在构造器调用之前;

(2)类的变量的初始化先于构造器调用;

(3)静态数据的初始化:(1)基本类型:自动获得标准基本类型的初始值

                                               (2)指向对象的句柄:如果是新建一个对象,初始值为该对象;否则为空值(NULL)

 (4)初始化数据:

       首先为static,然后是非static对象;

       static初始化只有在必要的时候才会进行:如果不创建对应的类的对象,那么永远都不会初始化static;

 

例如:一个名为Dog的类:

    (4.1)类型为Dog的一个对象首次创建时,或者Dog类的static方法/static字段首次访问时,Java解释器必须找到Dog.class;

    (4.2)找到Dog.class后(它会创建一个Class对象),它的所有static初始化模块都会运行

==>static初始化只发生一次,在Class对象首次载入的时候;

    (4.3)创建一个new Dog()时,Dog对象的构造过程,会现在内存堆(heap)中为一个Dog对象分配足够多的存储空间;

    (4.4)该存储空间会被清为0,将Dog中所有基本类型设为他们的默认值;

    (4.5)进行字段定义时,发生的初始化,(按照字段定义的顺序,此时肯定就不包括static字段了)

     (4.6)执行构造器;

 

 (5)明确进行的静态初始化:static构建从句(也叫 静态块)

  class Spoon { 

            static int i;

            static {  i  = 47; }

   ...

  }

==>和其他static初始化一样,该static静态块,仅执行一次==>首次生成该类的一个对象,或者首次访问属于该类的一个static成员(即便从未生成该类的对象)

注意:只要类的一个static成员第一次被访问,那么其他所有的static都会执行初始化。

 

 >>>截止内容: 4.5 数组初始化

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章