您的位置:首页 > 职场人生

黑马程序员_java的面向对象(对第六课静态..类的加载过程和单例的总结)

2013-03-30 20:43 267 查看
------- android培训java培训、期待与您交流! ----------

通过今天对java语言面向对象的学习,我来给自己的学习内容做下简单直白的总结:

首先,我来总结下用于定义成员的修饰符:static(静态)关键字:

静态所修饰的成员被所有对象所共享,存在于方法共享区中...比如所有对象的数据值都是一样的,就可以被静态所修饰,存放于方法共享区里,被所有的对象共享这一个数据值...

当成员被静态所修饰后,就多了一种调用的方式,不仅仅可以被对象所调用,还可以被类名直接调用..

static在内存中的特点:

1,随着类的加载而加载,存放于方法共享区里..随着类的消失而消失,生命周期最长..

2,优先于对象先存在..

3,从最上面总结可以看出,它被所有的对象所共享,还多了一种被类名所直接调用..

要掌握使用static(静态)的注意事项:

静态方法的内部只能访问静态的成员变量和成员方法,因为它先加载存在时候,对象还没有..访问不到(静态只访静态)

非静态方法的内部可以访问静态的成员变量和成员方法,因为对象在的时候,静态已经存在了..后者可以访问到前者..

静态方法内部不能出现this..super关键字,因为这些关键字代表对象..静态方法先存在时候..根本访问不到不存在的对象

那么在类中,什么时候使用静态呢:因为静态修饰的内容只有成员变量和成员函数,那就从这2个方面来总结:

什么时候定义静态成员变量:当对象中出现了共享数据值时,该数据值所属的成员变量被静态所修饰...

什么时候定义静态成员方法:当方法内部没有访问到非静态数据(就是对象的特有数据).那么该成员方法可以定义成静态

静态的应用——工具类:在一个有主函数的类中,如果我们定义了功能,虽然该功能可以被复用...但如果又有了一个主函数的类,我们还得在该类中重新定义该功能..那么,有没有更简单的形式呢:我们可以把该功能封装进一个类中,以建立该类的对象或者类名直接调用,就可以在任意能独立运行的类中,使用该方法...这也就是面向对象思想...

构造代码块的代码运用:



下面我来总结下类加载的过程及各部件存放的位置:

当使用到类中的内容时,类就会被加载,比如person p=new person()这句话,当虚拟机执行到new person()的时候,因为new person()用到了person.class(类)里的内容(用到了person类里的构造函数),所以虚拟机会把person.class文件从硬盘当中加载进内存,当person类被加载进内存的时候,除了非静态成员变量(就是对象的特有属性)不会被加载外,其它的都会被加载..

这里注意下:加载,是将类文件中的一行行内容存放到了内存中,加载时期,有输出语句也不会执行...那么,类中的内容存放在什么位置呢:

首先顺序是:静态成员变量(类变量):会被加载进方法区的静态部分..

静态成员方法和非静态成员方法:静态成员方法被加载进方法区的静态部分,而非静态成员方法(包括构造函数)会被加载进方法区的非静态部分...

静态代码块:方法区的静态部分...(他和静态成员变量在类中是按上下顺序而加载的)

构造代码块:方法区的静态部分...

然后:会执行静态代码块,给person类进行初始化..

在堆内存中给person对象开辟空间,分配内存地址值..

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

对堆内存中对象的特有属性进行显示初始化..

执行构造代码块,对对象进行统一初始化..

构造函数初始化,给相对应的对象进行初始化...

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

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

比如,在java中,我们想让一个类在内存中只存在一个对象的时候,23种设计模式中的一种单例设计模式:就能最行之有效帮助我们来实现..

想要保证对象唯一性:

1,将构造函数私有化..

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

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

根据代码和内存图的形式我们更容易来理解:





从上述代码中,我们可以看出:这样就保证了一个类的对象在内存中是唯一的了...注意:上述代码无意义,只是有一个唯一的对象...所以,我们要对于事物该怎么描述还怎么描述,当需要将对象保证唯一性的时候,可以加上以上3步..

以上的单例设计是先初始化对象,称为饿汉式...还有一种是方法被调用的时候,才初始化对象,也叫做对象的延时加载,称为懒汉式,它有一个缺点:存在着线程的安全问题,开发的时候,建议使用饿汉式..

通过本课的学习,以上我对静态的应用和类的加载过程,以及单例设计模式中的饿汉式都一一做了总结,希望能对自己和大家提供些小小的帮助..对于单例设计模式中的另一种方法:懒汉式,应为存在着线程的安全问题,我会在线程学习中在做详细的总结..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐