8.java——单例设计模式和main函数的理解

单例设计模式

实现思路——没有办法调用构造器创建对象,创建对象在类里面创建(new)了,也在里边的方法中返回了对象实体。所以类中的方法必须是public的。

饿汉式——立即加载,随着类的加载,当前的唯一就创建了。线程安全,写法简单,更快更方便。但是内存占用时间较长

public class Main {
    public static void main(String[] args) {
        bank b1=bank.getB1();
        bank b2=bank.getB1();
        System.out.println(b1==b2);
    }
}

class bank{
    private bank()
    {}
    private static bank bank1 =new bank();
    public static bank getB1()
    {//方法谁来调用,方法要对象来调,对象要在类内中获取,类外没有办法new对象,返回值必须为对象
        return bank1;
    }
}

懒汉式——延迟加载,在需要时使用创建。线程不安全,占用内存时间较短,节省空间。

public class WFriend {
public static void main(String args[])
{
    Friend F1=Friend.getInstance();
    Friend F2=Friend.getInstance();

    System.out.println(F1==F2);
}
}

class Friend {
    private Friend() {

    }
    private static Friend instance = null;

    public static Friend getInstance() {
        if (instance == null) {
            instance = new Friend();
            return instance;
        }
        return instance;
    }

}

对main的理解

public class Main {
    public static void main(String[] args) {//程序的入口
        String[] arr=new String[]{"aa","bb","cc"};
        test.main(arr); //打印aa,bb,cc
    }
}

class test {
    public static void main(String[] args) {
        System.out.println("Main的main()的调用");
        for (int i=0;i<args.length;i++)
        {
            System.out.println(args[i]);
        }
    }
}

public class Main {
    public static void main(String[] args) {//程序的入口
        String[] arr=new String[]{"aa","bb","cc"};
        Main.main(arr); //栈溢出——Exception in thread "main" java.lang.StackOverflowError
    }
}

class test {
    public static void main(String[] args) {
        System.out.println("Main的main()的调用");
        for (int i=0;i<args.length;i++)
        {
            System.out.println(args[i]);
        }
    }
}

main的剖析 方法一:普通的静态方法

在这里插入图片描述

代码块

类中属性赋值及其位置

构造器初始化是最严格最推荐的,最后把关。代码块和显示都是过一遍而已
在这里插入图片描述
在这里插入图片描述

public class Main {
    public static void main(String[] args) {
       Order o1=new Order();
        System.out.println(o1.orderid); //3
        //System.out.println(o1.a);a没有办法访问,出了代码块就出栈了
    }
}

class Order
{
   public Order()
{
    super();
    orderid=3;
}
    {
        int a=10;
        orderid=2;
    }
    int orderid =1;
}

关于字节码文件中的的简单说明。由父及子,静态先行 (通过插件jclasslib bytecode viewer查看字节码) 方法在字节码文件中可以看到。每个方法都对应着一个类的构造器(声明了几个构造器就会有多少个init)

在这里插入图片描述

代码块先于构造器
在这里插入图片描述
在这里插入图片描述

final

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小卷同學

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值