• 面向对象(static、方法区、main方法、帮助文档、单例设计模式)


    static关键字
    静态,是一个修饰符,用于修饰成员变量,成员函数(不能修饰局部变量,函数)
    new出多个对象,对象中都有值相同的country,这样会耗费内存空间,
    那么,可以使用static关键字
    private static country = "China";

    静态成员可以被类名直接调用
    类名.静态成员
     
    静态成员存储的内存区域:方法区/共享区/数据区
    类中定义的方法也在这个区域,类中的共享数据也在这里
     
    1.静态方法只能访问静态成员(方法、变量)
    如下,show方法为静态的,当打印的参数是非静态的name,是不行的
    因为,name是随着对象的创建而创建的,但此时,没有创建任何对象
    2.静态方法中不可以定义this,super关键字
    因为静态优先于对象而存在
     
    局限性:静态虽好,只能访问静态
    ----------------------------------------------------------------------------------
    main方法
    jvm在调用主函数时,传入的是new String[0];
    主函数也是函数,可以被重载
     
    一个类也可以调用另一个类的主函数 - -!
     
     
    可以在一个类中(没有主函数)new另一个类使用
     
    如果看到一个这样的调用,没有new对象就去调用,那么那个方法应该为静态的
     
    可以试一试java库函数能不能new出来呢,如果不能,那么java库里面类的构造函数应该被私有化了
     
    ------------------------------------------------------------------------------------
    帮助文档:
    你创建的工程的说明书
    java的说明书通过文档的注释来完成   
    /**
    @author 艾斯
    @version V1.1 
    */
    ---------------------------------------------------
    ---------------------------------------------------------------------------
    设计模式:
    作者:四人帮 -  -! 偏思想,不偏代码
    java总结出的23种设计模式
     
    说几个典型的:
     
    1.单例设计模式:一个类在内存中只存在一个对象
    情景:比如eclipse平台的字体颜色设置,本页设置后,再打开一个新的,字体都是设置后的颜色
    怎么弄呢:首先,要保证该类不能随便new对象,以保证只能new一个对象;
    所以,将构造函数私有化
    然后,要保证该类能够new出一个对象,可以再类中new一个,但是无法调用啊,因为构造函数被私有了
    那么,就提供一个公有的方法返回这个对象
    但是,这个公有的方法也不能调用啊,因为构造函数被私有了
    所以,可以将这个公有的方法定义为static,不用new就可以调用
    但是,既然公有的方法static了,那么,里面的参数s(即返回的对象)也应该定义为static啊
    所以,是如下图的代码
     
    并且,注意,每次通过共有方法new出来的都是同一个对象,
    因为类中已经写死了,new出来的对象为s
    而在main函数中定义的变量都是指向s
    如图,ss,s1都指向s(且是通过方法区附地址给这两个变量的)
     
    单力设计模式只需要这三步:
    构造函数私有化
    私有静态的类变量接收new出来的对象
    共有静态的方法啊返回这个类变量
    ------------------------------------------------------------------
    单例设计模式的另外一种写法(懒汉式),上面的方法叫(饿汉式),面试可能考
    对象方法被调用的时候才初始化(对象的延迟加载)
    两者的区别呢:就在内存开辟上
    懒汉式,调用Single.getInstance()方法的时候,方法区内的s变量才会去堆内存开辟一块空间
    而饿汉式,在这个方法调用之前,已经在对内存中开辟了空间
    怎么记:懒,太懒,什么时候需要什么时候才new;
    饿,太饿,先new了再说
    但一般都是用饿汉式,为什么呢
    因为计算机运行,同一时间只能执行一个任务;而后台执行的多个任务,
    实际是计算机在多个线程之间快速的切换,所以,如果使用懒汉式,可能会出现一个问题
    假如 s1,s2两个变量,当s1运行到if(s1==null)时,想成切换到了s2,if(s2 ==null)
    线程切换到了s1,s1继续执行,new出来一个对象,线程切换到了s2,s2继续执行,new出了一个对象
    这个,就new出了两个对象,无法保证唯一了
     
    解决方法synchronized(同步)相当于上了一个锁,一次只能有一个执行
    public static synchronized Single getInstance(){
        。。。
    }
    但是这个修饰符一加进来,效率就低了
    所以,定义单例时,建议使用饿汉式
     
     
  • 相关阅读:
    CSU1661: Query Mutiple
    U磁盘检测和大量收集量产工具
    DBMS_RLS包实现数据库表中的行级安全控制
    vim note(4)
    android 时间对话框 TimePickerDialog简介
    手动露天广场和立方体
    将JDBC ResultSet结果集变成List
    PS CS5如何在一张图片里插入另一张图片?
    图文教您轻松学会用PS设计制作名片
    常用颜色的RGB值
  • 原文地址:https://www.cnblogs.com/aisi-liu/p/4133776.html
Copyright © 2020-2023  润新知