static修饰符--静态块--非静态块--常量--单例模式--抽象类--


   一个类在使用之前要经过类加载\类验证\类准备\类解析\类初始化等几个阶段


*static:静态修饰符
    1.修饰成员变量
      (1)修饰的成员变量,不属于对象的数据结构
      (2)静态变量属于类的,通常使用类名去调用
      (3)静态变量与类的信息一起存储在方法区内
                        只存在一份,是对象的公共资源
      (4)静态成员变量在类加载之前初始化
    2.修饰方法
      (1)通常的方法都是与具体对象有关系,即对象的方法(行为)
      (2)如果是static方法,则与对象毫无关系,是类的方法,通常用类名去调用
          常常与参数有关系.
      
       ###:静态成员不能直接访问非静态成员.
                      这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用
                      而静态方法在使用前不用创建任何对象.
      (3)static方法内无法使用this关键字.                      
                    因为静态方法在使用前不用创建任何实例对象
                    当静态方法被调用时,this所引用的对象根本就没有产生
      (4)static方法内也无法使用super关键字.
                           
      (5)static方法作用:一般都用于设计成"工具方法"和"工厂方法"
      
                如:  Arrays.sort(数组名);
                       Math.random(参);
                       Math.sqrt(参);
                       Math.abs(参);
                       Math.sin(参);
                       main(String[] args)方法:
                       --由于java虚拟机需要调用类的main()方法
                          所以该方法的访问权限必须是public
                          又因为java虚拟机在执行main()方法时不必创建对象
                          所以该方法必须是static的
                          该方法接收一个String类型的数组参数
                          该数组中保存执行java命令时传递给所运行的类的参数


      *静态初始化块(类初始化块):       
       static修饰代码块
         static{
                             代码逻辑
         } 
         
       --静态块存储在方法区中,只加载一次,与对象无关
                        执行时机为类初始化阶段,可以理解为在实例化之前
                        
       --作用:通常用于加载程序中所需要的静态资源,如:图片/音频/视频
       
*非静态初始化块:                      
    {
    
    }
       运行时机:在实例化之前执行,每次实例化之前都会执行一次(静态代码块之后执行)
                         无法通过类,对象来调用非静态代码块
                         只在创建java对象时隐式执行(在执行构造器之前执行)
                         
        ###:非静态代码块与静态代码块,成员变量,方法都是类的成员                 
                                   


  *常量:
        一般都是一些特殊值.
        一般都是用成员变量,修饰词为public\static\final
        声明时必须初始化
        命名规则: 字母全都大写  
                   如: Math.PI      


*设计模式之单例模式:
          需求:在程序中,我们想要获取某一个类的唯一对象
                   我们称之为类的单例
                          
    Singleton:
        (1)提供一个私有的静态的本类型的成员变量
        (2)构造器私有化
        (3)提供公有静态的方法获取本类中创建的实例
      
    --饿汉模式: 加载期间就赋值
      public class Singleton{
          private static Singleton instance = new Singleton();
          private Singleton(){}    
          public static Singleton getInstance(){
              return instance;
          }   
      }
    --懒汉模式:调用方法时才创建对象
      public class Singleton{
          private static Singleton instance;
          private Singleton(){}
          public static Singleton getInstance(){
              if(instance==null){
                 instance = new Singleton();
              }
              return instance;
          }
      }  


*抽象类(abstract):      
      因为继承的关系,子类功能可以越来越具体, 相对来说,父类可以更加一般化,通用化
      因为父类封装了子类的通用行为, 所以在定义时,我们可以定义方法的逻辑    
      有的时候,在父类中无法完成子类的功能需求, 此时,不如不写即不写方法体,代码简单化
      但是,此方法必须使用abstract修饰
      那么,此类型也必须使用abstract修饰,即抽象类    
      
 1.抽象方法与抽象类
     1)用abstract修饰的方法不需要写方法体,但是得用;结尾      
     2)有抽象方法的类,必须使用abstract声明(修饰)
 2.抽象类不能实例化
     1)抽象类不能创建对象,没有意义
     2)抽象类可以提供构造器
     3)抽象类中可以没有抽象方法
     4)abstract和final不能同时修饰同一个类型
 3.继承抽象类
     1)若一个类继承了抽象类,那么这个类必须重写(实现)抽象类的所有抽象方法
     2)若一个类没有实现抽象类的所有抽象方法,那么这个类必须用abstract修饰    
 4.抽象类的意义
     1)给不同的子类定义一个父类     
     2)抽象类可以封装子类的共同特征与共同行为
     3)虽然,子类可能有不同的实现逻辑,但是方法的定义是一致的
        


   

猜你喜欢

转载自blog.csdn.net/yk_3215123/article/details/81462299