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

------- 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步..


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

 

 

通过本课的学习,以上我对静态的应用和类的加载过程,以及单例设计模式中的饿汉式都一一做了总结,希望能对自己和大家提供些小小的帮助..对于单例设计模式中的另一种方法:懒汉式,应为存在着线程的安全问题,我会在线程学习中在做详细的总结..







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值