Java基础总结(一)

来源:互联网 发布:在线seo外链 编辑:程序博客网 时间:2024/05/02 02:12

1.  构造函数

构造函数的作用:可以用于给对象一个初始化。

当一个类中没有定义构造函数时,那么系统会默认给该类加一个空参数的构造函数。当自己定义了一个构造函数时,默认的构造函数就没有了。

 

2. 构造代码块

作用:给对象进行初始化

对象一建立就运行,而且优先级大于构造函数的执行。

构造代码块和构造函数的区别:

构造代码块是给所有的对象进行统一初始化的。而构造函数是给对应的对象初始化的。

构造代码块中定义的是不同对象共性的初始化内容。

 

3.  static的特点

1.随着类的加载而加载。也就是说:静态会随着类的消失而消失,说明它的生命周期最长

2.优先于对象存在:明确一点:静态先存在,对象是后存在的。

3.被所有对象所共享

4.可以直接被类名所调用。

 

实例变量和类变量的区别:

1.存放位置。

  类变量随着类的加载而存在于方法区中。

  实例变量随着对象的建立而存在于堆内存中。

2.生命周期

  类变量生命周期长,随着类的消失而消失。

  实例变量生命周期随着对象的消失而消失。

 

静态使用注意事项:

1.静态方法只能直接访问静态成员。不能直接访问非静态成员,如果希望在静态方法中访问非静态变量,可以通过创建类的对象,然后通过对象间接的访问非静态变量.

  非静态方法即可以访问静态也可以访问非静态

2.静态方法中不可以定义this,super关键字。

  因为静态优先于对象存在。所以静态方法中不可以出现this。

3.主函数是静态的。

 

静态的利和弊:

利处:对对象的共享数据进行单独空间的存储,节省空间,可以直接被类名调用。

弊端:生命周期过长。访问出现局限性。(静态虽好,只能访问静态)

 

4.        静态代码块

格式:static{ 静态代码块中的执行语句}

特点:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。而构造代码块随着对象的建立而执行,每建立一次对象就执行一次构造代码块。优先级:静态代码块>构造代码块(普通初始化块)>构造方法。

(静态代码块、构造代码块和构造方法的区别  参考: http://www.cnblogs.com/lezhifang/p/6646351.html)

 

person p=new person();这句话都做了什么事情?

1.因为new用到了person.class。所以会找到person.class文件并加载到内存中。

2.执行该类中的static代码块、如果有的话,给person.class类进行初始化。

3.在堆内存中开辟空间、分配内存空间。

4.在堆内存中建立对象的特有属性。并进行默认初始化。

5.对属性进行显示初始化。

6.对对象进行构造代码块初始化。

7.将内存进行对应构造函数初始化

8.将内存地址赋值给栈内存中的p

 

5.      设计模式  (参考:  http://blog.csdn.net/u011296485/article/details/72074566)

设计模式:解决某一类问题最行之有效的方法。

单例设计模式:解决一个类在内存只存在一个对象。

想要保证对象的唯一:

1.为了避免其他程序过多建立该类对类对象。先禁止其他程序建立该类对象。

2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。

3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

 

这三部怎代码中体现?

1.将构造函数私有化。

2.在类中创建一个本类对象。

3.提供一个方法可以获取到该对象。

 

对于事物该怎么描述还怎么描述。

当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

 

/*

 * 这个是先初始化对象

 * 称为:饿汉式

 * Single类一进内存,就已经创建好了对象。由于private static Single s=new Single();

 */

class Single{

         private Single(){}

         private static Single s=new Single();

         public static Single getInstance(){

                   return s;

         }

}

 

/*

 * 对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式

 * Single类进内存,对象还没有存在,只有调用getInstance方法,才建立对象。

 */

class Single1{

         private Single1(){}

         private static Single1 s=null;

         /*

          *此处可以加一个synchronized(同步),使只有一个线程可以进入该方法,避免错乱。

* 但是每次只有一个线程可以进入导致该方法效率低。

         public static synchronized Single1 getInstance(){

                   if(s==null)

                            s=new Single1();

                   return s;

         }

         */

        

         /*以下方法更为高效*/

         public static Single1 getInstance(){

                   if(s==null){

                            synchronized(Single1.class) {

                                     if(s==null)

                                               s=new Single1();

                            }

                   }      

                   return s;

         }

}