黑马程序员_静态方法,java文档制作和单例设计模式

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

 

为什么会有静态,静态有什么用?

当每一个对象都要使用这个属性或方法的时候,可以把它定义为静态的

因为每个对象都要使用,不必创建很多分,这样很浪费内存,把它定义为静态,在方法区里只有一份,节省内存,加快速度

 

1 静态:static

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

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

 

2 静态static的特点:

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

      优先于对象的存在

       明确一点:静态是先存在,对象是后存在的

      被所有对象共享

      能被类名调用

 

3 类变量和实例变量(成员变量)的区别

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

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

 

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

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

 

4 静态使用注意事项:

      1 静态方法只能访问静态成员

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

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

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

 

  什么时候定义静态?

  当功能内部没有访问到非静态数据(对象的特有数据)

  那么该功能是可以定义成静态的

 

5 静态有利有弊

    利处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每个对象都存储一份,同时还可以直接被类名调用

    弊处:生命周期过长

        访问出现局限性

 

例子:
 
class person
{
         String name;  //成员变量,实例变量
       static String country="cn'; //静态变量的成员,类变量
         public static void show(String name)
         {
         System.out.print(name);//这句有错,因为对象没建立name变量不存在
         hah();  //这句有错,因为对象没建立hah方法不存在
         }
         public void hah();
         {}
}
 
class test1
{
         public stati void main(String[] args)      
         {
         person.country; //静态成员可以被类名直接调用
         person.show;  //这句有错,因为show方法下面的name还没有
         }
}

 

6 解读主函数 public static void main(String[] args)

  主函数是一种特殊的函数,作为程序的入口,可以被jvm调用

 

  主函数的定义:

  public;代表该函数访问权限是最大的

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

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

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

  (String[] arr)函数的参数,参数类型是一个字符串类型的数组

  jvm在调用主函数时,传入的是new String[0];


class person
{
         public static void main(String[] args)
         {
         System.out.print(args);//args.length可以看出数组长度,args可以得到是什么东西
         }
}

7 将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的,为了  更为严谨,强制让该类不能建立对象,可以通过将构造函数私有化完成

  privateArrayDemo(){}


8 文档说明书的制作 /** */可以被文档注释工具提取

/**

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

@author 张三

@version v1.1

 

*/

 

   javadoc -dmyhelp -author -version ArrayTool.java

    -d:目录  

    myhelp:随便的文件夹,如果当前目录有这个文件夹就自动创建有就不创建

         myhelp是文件夹名称,也可以c:\haha\ha这是自己定义要放的文件夹

 

   生成帮助文档的类要是public

   生成帮助文档的类的构造函数一般都要私有,因为不给建对象

 

 

9 一个类中默认会有一个空参赛的构造函数

  这个默认的构造函数的权限和所属类一致

 

10 静态代码块

   格式:

   {

    执行语句

   }

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

      

11 Person p=newPerson("张三",20);

   该句话都做了什么事情?

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

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

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

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

   5对属性进行显示初始化

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

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

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

   3在堆内存中开将内存地址赋给栈内存中的p变量

 

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

   java中有23种设计模式

   单例设计模式:解决一个类在内存中只存在一个对象的情况

 

   想要保证对象的唯一性

   1禁止其他程序建立对象      将构造函数私有化

   2在本类中自定义一个对象    在类中创建一个本类对象

   3把这个对象提供出去,给其他类访问    提供一个方法可以获取到该对象

 

例子:

饿汉式:先初始化对象,person类一进内存,对象就被建立

       开发一般用饿汉式,因为对象迟早都要建立

class person
{
         private static int;
         private static person s=new person();
         public static person getInstance()
         {
         return s;
         }
}
 
class test1
{
         public static void main(String[] args)
         {
         person s1=getInstance();
         }       
}

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

 

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

 

class person
{
         private static int;
         private static person s=null
         public static person getInstance()
         {
         if(s==null)              //如果cpu读到if(s==null)不动的话
         -->A                      //多线程的话,对象的建立就不唯一了
         -->B                      //解决方案:
                                     //if(s==null)
                                     //{
                                     //synchronized(person.class)
                                     //{
                                     //if(s==null)
                                     //s=new person();
                                     //}
                                     //}
         s=new person();       
         return s;
         }
}

 

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值