java构造方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

关于构造方法:
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

构造方法

  • 格式:

    • 以类名为方法名,没有返回值结构,可以有参数
  • 1: 每个类都有一个默认的隐式空参数构造方法

    • 也就是 创建对象时 一般都可以用 new 类名(); 来创建对象
  • 2: 可以自己显式的写构造方法

    • 1: 显式的构造方法 不管有没有参数 都会覆盖 隐式空参数构造方法
    • 2: 可以重载构造方法,可以根据参数的不同,写不同的构造方法
      • 可以实现 创建对象时,可以传入不同的参数,来创建不同初始化的对象

Java允许两种类型的构造函数,即 -

  • 没有参数构造函数
  • 参数化构造函数
public class Person{
    public String name;
    public  int age;

    // 对所有属性初始化赋值构造方法 
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    //对部分属性初始化赋值构造方法 
    public Person(String name){
        this.name = name;
    }

    // 不传参数的构造方法 部分属性默认赋值
    public Person(){
        this.name = "Robin";
        this.age = 18;
    }
}

构造方法也是方法,也可以进行重载
作用:可以有更多的方式去创建对象
在类中的一个构造函数可以使用this(实参)来调用自己其它的构造函数。

class Test{
    // 写好构造方法的类 创建对象时 给属性赋值要更简单 
    public static void main(String[] args){
        Person p1 = new Person();
        System.out.println(p1.name);
        Person p2 = new Person("Robin1");
        System.out.println (p2.name);
        Person p3 = new Person("Robin33", 18);
        System.out.println (p3.name+" "+p3.age);
        
    }
}

单例模式

我们由构造方法引入单例模式。

  • 构造方法可以有访问修饰符

  • 构造方法设置为私有的访问权限修饰 后:

    • 在类的外部无法访问构造方法 也就不能在外部创建对象
    • 在类的内部可以访问构造方法 也就可以在内部创建对象
  • 限制一个类创建对象的权限:

    • 不想让这个类之外的人创建对象,可以将构造方法设置为私有的
      • 创建对象,有时候是一件很复杂的事情,交给第三方开发者自己创建就会很难配置成功
      • 有时间 一个类可能不能创建多个对象 数量把控。一个国家的国王类 只能有一个国王对象
      • 以上这两种都需要这个类自己来提供对象
        • 在内部创建对象
        • 外部通过 static 关键字来访问
  • static:

    • static 修饰 属性 以及方法 都是可以由类名直接调用的,且只有唯一一份

为什么需要单例模式

有时候我们需要使用一个实用类A,这个类A专门提供一些公共功能供别人调用,而本身并不会处理业务逻辑。由于类A会被许多类乃至线程调用,假设我们的程序非常庞大,在运行的过程中,会访问这个类A100次,为了调用类A的方法,需要先创建A的对象,A a = new A()。这种方法在对A的访问量较少的情况下没问题,但是像我们这种情况,就会创建100个类A的实例,这100个实例是要占用内存的,从这种角度来说,就造成了大量不必要的开销。而单例模式,在整个程序生命周期中,只有一个实例,这样就不会造成不必要的内存消耗

单例模式的特点
 1、单例类只能有一个实例。
 2、单例类必须自己创建自己的唯一实例。
 3、单例类必须给所有其他对象提供这一实例。
单例模式保证了全局对象的唯一性,比如系统启动读取配置文件就需要单例保证配置的一致性。


public class Person{
    public String name;
    public int age;

    // 定义一个本类唯一的对象 必须是static 修饰的保证 唯一性 不然会报错
    private static Person king = new Person ("King", 100);

    // 通过 静态方法 返回 单例对象
    public static Person getKing(){
        return king;
    }

    // 每次调用都是一个新对象产生
    public static Person getPerson(String name){
        return new Person (name);
    }

    // 对所有属性初始化赋值构造方法 
    private Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    // 对部分属性初始化赋值构造方法 
    private Person(String name){
        this.name = name;
        this.age= 18;
    }

    // 不传参数的构造方法 部分属性默认赋值
    private Person(){
        this.name = "Robin";
        this.age = 18;
    }
}
class Test{
    // 写好构造方法的类 创建对象时 给属性赋值要更简单 
    public static void main(String[] args){
        Person p1 = Person.getKing ();
        System.out.println (p1.name);
        System.out.println (Person.getKing ().name);

        // 第二种 模式 每次调用 都可以拿到一个新对象 
        Person p4 = Person.getPerson ("gc");
        System.out.println (p4.name+" "+p4.age);
    }
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文介绍了有关构造方法引入了设计模式中的单例模式,而单例模式还有许多种实现方式可以被了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值