黑马程序员-Java语言基础 –面向对象 第6天

 ---------------------- android培训java培训、期待与您交流! ----------------------


1static(静态)关键字

      用法:是一个修饰符,用于修饰成员(成员变量和成员函数)。

静态修饰内容被对象所共享。

当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用。

用法:类名.静态成员。

被修饰后的成员具备以下特点:

1、随着类的加载而加载,随着类的消失而消失,所以生命周期最长。

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

3、被所有对象所共享。

4、可以直接被类名调用。(类名.静态成员)

实例变量(非静态成员变量)和类变量(静态成员变量)的区别:

1、存放位置

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

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

2、生命周期

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

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

 

Static静态使用注意事项:

1、静态方法只能访问静态成员(方法、变量)。(非静态方法既可以访问静态,也可以访问非静态。)

2、静态方法中不可以写this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this。

3、主函数是静态的。

静态利与弊:

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

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

 

主函数(main):public static void main(String[] args){ }

是一个特殊的函数,作为程序的入口,被JVM调用。

定义:

public:表示该函数的访问权限最大。

static:代表主函数随着类的加载就已经存在了。

void:主函数没有具体返回值。

main:不是关键字,但是一个特殊的单词,可以被JVM识别。

(String[] args):函数的参数,参数类型是一个字符串类型数组,其中args(变量名)代表arguments(参数),可以改。(可在运行时传入参数。例:java Demo args[0] args[1])

 

主函数格式固定,JVM在调用主函数时,传入的是newString[0];(一个长度为0的数组)

 

 

什么时候使用静态?

从两方面下手:(成员变量和成员函数)因为静态修饰的内容有成员变量和成员函数。

1、什么时候定义静态变量(类变量)呢?

当对象中出现共享数据时,该数据被静态修饰。

对象中的特有数据要定义成非静态存在于堆内存中。

2、什么时候定义静态函数呢?

当功能内部没有访问到非静态数据(对象特有数据)时,就可以将该功能定义成静态的。

 

2、静态的应用[day06-05]

1、每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。

2、每一个方法都没有用到对象中的特有数据,那么为了让程序更严谨,是不需要对象的,则将方法定义为静态的,直接通过类名调用,进一步为了不让该类能够建立对象,则将构造函数私有化。

3、将.class文件发送给他人,其他人只要将文件设置到classpath路径下,就可以使用该工具类,但对方不知道类中有什么方法,所以需要制作程序说明文档。

set classpath =.;c:\myclass //=.是先查找当前目录,再查找设置目录   

 

文档注释

API-Application Programming Interface(应用程序接口)

 

public class 类名(类必须是公共的才能创建注释文档)

/**

这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能,

@author Lisa

@version V1.1

*/

通过javadoc -d myhelp -author -version ArrayTool.java命令生成文档,

再通过所生成的myhelp目录下的index.html浏览帮助文档。

private和default函数不会在文档中显示,public和protected函数会显示)

注意:

一个类中参数的构造函数,系统自动加上的。这个默认的构造函数的权限和所属类一致。

如果类被public修饰,那么默认的构造函数也带public修饰符

如果类没有被public修饰,那么默认的构造函数,也没有public修饰。

默认的构造函数的权限是随着类的变化而变化的。

 

3、静态代码块

 

格式

static

{

     静态代码块中的执行语句。

}

特点:随着类的加载而执行,只执行一次,并优先于主函数。

作用:用于给类进行初始化(一个类进内存,不需要对象的情况下,类需要做些什么事情)

比较:

构造代码块:给对象进行初始化。(对象一建立就运行,而且优先于构造函数运行。)          

静态代码块:用于给类进行初始化 

构造函数:给对应的对象初始化的。

 

类的加载:只有用到类的内容时才涉及类的加载问题。

例如:

StaticCode s = null;//不加载类

s = new StaticCode();//加载(默认空参构造函数)

StaticCode.show();//加载

 

4、对象的初始化过程

 

Person p = new Person("zhangsan",20);

这句话都做了什么事情?

 

1、因为new语句用到了Person.class,所以会先找到Person.class文件并加载到内存中。

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

3、在堆内存中开辟空间,分配内存地址。

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

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

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

7、对对象进行对应的构造函数初始化。

8、将内存地址赋给栈内存中的p变量。

 

5、设计模式

      解决某以问题最行之有效的方法。(Java23种设计模式[GOF])

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

想要保证对象唯一。

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

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

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

 

这三步怎么用代码体现呢?

1、将构造函数私有化

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

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

 

对于事物该怎么描述,还是怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上三步骤加上即可。

 

单例设计模式的两种方式:

饿汉式:先初始化对象。Single类一进内存,就已经创建好了对象。(实际开发用饿汉式

class Single

{

      private Single(){}//私有化构造函数。

      private static Single s = new Single();//(私有并静态对象)创建一个本类函数 静态方法,访问静态成员

      public static Single getInstance()//提供一个方法可以获取该对象。(获取实例instance)

      {

           return s;

      }

}

 

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

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

class Single

{

      private Single(){}

private static Single s = null;

      public static Single getInstance( )                   

      {

           if(s==null)

           {               

                 s = new Single;

           }

           return s;

      }

}

class Single

{

      private static Single s = null;

      private Single(){}

      public static Single getInstance()

      {

           if(s==null)

           {

                 synchronized(Single.class)//锁               

                 {

                     if(s==null)

                         s = new Single;

                 }               

           }

           return s;

      }

}

懒汉式有可能出现线程不同步的安全问题。(解决方法:双重判断(上右模式))

记住原则,定义单例时,建议使用饿汉式。



---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值