首页 > 编程语言 >Java构造器

Java构造器

时间:2022-09-20 23:22:06浏览次数:63  
标签:Java String age 构造 Person 构造函数 public name

在 Java 中,可以通过编写构造器来确保每个对象的初始化。但是这里有两个问题:

  1. 这个构造器使用的任何名字都有可能与类里某个成员相冲突;
  2. 编译器负责调用构造器,所以它必须始终知道应该调用哪个方法。

构造器的作用是用来建立一个新的类的实例,当一个对象被创建时,JVM 使用一个构造函数,并为其分配内存空间。

public class Person {
    public Person() {
    }
}    

例如,在下面的示例中,我们创建了一个名为Person的构造方法。在构造函数方法,我们正在初始化 age 变量的值。

public class Person {

    int age;

    public Person() {
        age = 10;
    }

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.age);
    }
}    

注意创建 Person类的对象的语句:Person person = new Person();此时为无参构造,打印的值为10;

构造器目的

构造函数的目的是初始化对象的状态,为所有声明的属性赋值。如果我们没有自定义构造函数,JVM 就会为这些属性分配默认值

构造器分类

在 Java 中,有三种类型的构造器:

    无参构造器

    有参构造器

    默认构造器

无参构造器

构造方法内可能有参数,也可能没有任何参数。如果构造函数不接受任何参数,则称为无参数构造器。例如上述代码中 Person 构造器

    public Person() {
        age = 10;
    }

有参构造器

具有参数的构造器,可用于为不同对象提供不同值

    String name;

    public Person(String name) {
        this.name = name;
        System.out.println("名字:"+name);
    }

    public static void main(String[] args) {
        Person person1 = new Person("小赵");
        Person person2 = new Person("小钱");
        Person person3 = new Person("小孙");
        Person person = new Person("小李");
    }

运行结果:

默认构造器

如果我们不创建任何构造函数,Java 编译器会在程序执行期间自动创建一个无参数构造函数。

 

 

原生方法和构造器的区别

  • 构造函数必须与在 Java 中定义的类具有相同的名称
  • 当方法没有返回任何值时,构造函数不会返回任何类型,而方法则具有返回类型或 void
  • 在对象创建时,仅调用构造函数一次,而方法可以被调用任何次数

如果我们不用构造器来给属性赋值的话,可以先使用 new 运算符获取类的实例,并使用类的 setter 方法设置值,如下:

import java.util.Arrays;

public class Person {

    private String name;
    private int age;

    public String toString(){
        return Arrays.asList(name,String.valueOf(age)).toString();
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
}
class Main
{
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("小赵");
        person.setAge(22);
        System.out.println(person);
    }
}

通过构造器进行初始化就可以省去我们的 setter 方法:

import java.util.Arrays;

public class Person {

    private String name;
    private int age;

    public Person(String name,int age){
        this.age = age;
        this.name = name;
    }
    public String toString(){
        return Arrays.asList(name,String.valueOf(age)).toString();
    }
}

class Main
{
    public static void main(String[] args) {
        Person person = new Person("小赵",22);
        System.out.println(person);
    }
}

运行结果:同为  [小赵, 22]

构造器重载

与 Java 方法重载类似,我们也可以创建两个或多个具有不同参数的构造函数。这称为构造函数重载。

public class Person {

    String name;

    public Person(){
        this.name = "小王";
    }

    public Person(String name){
        this.name = name;
    }

    public void getName(){
        System.out.println("姓名:"+this.name);
    }

    public static void main(String[] args) {

        Person person1 = new Person();
        Person person2 = new Person("小赵");

        person1.getName();
        person2.getName();
    }
}

运行结果:

拷贝构造器

Java 中的拷贝构造方法是一种使用该类的一个对象构造另外一个对象的构造方法。

复制构造函数是一种特殊构造函数,用于将新对象创建为现有对象的副本。它只需要一个参数,它将是同一类的另一个实例。我们可以使用 this () 语句从复制构造函数中显式调用另一个构造函数:

public class Person {

    private String name;

    public Person(String name){
        this.name = name;
    }

    public Person(Person person){
        this.name = person.name;
    }


    public void getName(){
        System.out.println("名字:"+this.name);
    }

    public static void main(String[] args) {

        Person person0 = new Person("小赵");
        Person person1 = new Person(person0);

        person0.getName();
        person1.getName();
    }
}

运行结果:

名字:小赵
名字:小赵

快捷键

Alt+Ins

 

标签:Java,String,age,构造,Person,构造函数,public,name
From: https://www.cnblogs.com/ywwwik/p/16714052.html

相关文章

  • Java将毫秒(时间戳)转时分秒格式或者年月日
    将毫秒值(currentTimeMillis)转换为(年-月-日时-分-秒)的形式,只需一行代码 //首先获取当前的毫秒值   longcurrentTimeMillis=System.currentTimeMillis();......
  • 基于SSM+Vue的农产品销售系统Java农产品在线商城系统(源码调试+讲解+文档)
    ......
  • Java学习笔记---JDK8新特性(Lambda表达式)
    1.Lambda表达式基础格式:()->{};//()为lambda表达式的参数//->为箭头操作符//{}为lambda方法体lambda表达式结果为一个实例对象,用于直接实例化......
  • Java单例模式
    单例模式  单例模式核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。使用场景  需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过......
  • Java面向对象初探
    Java面向对象1.类和对象1.1类和对象的概念:类是抽象的集合,对象是具体的实例。类可以想象为制作蛋糕的模具,对象就是做出来的蛋糕。类中包含属性(字段)和方法(操作)1.2类......
  • Java基础08 自增自减运算符、初识Math类
    publicstaticvoidmain(String[]args){//++--自增自减一元运算符inta=3;intb=a++;//执行完这行代码后,先给b赋值,再自......
  • java: Bridge Patterns
     /***版权所有2022涂聚文有限公司*许可信息查看:*描述:*桥梁模式BridgePatterns*历史版本:JDK14.02*2022-09-12创建者geovindu*2022-09-12......
  • Java基础07 基本运算符
    运算符◆Java语言支持如下运算符:算术运算符:+,-,*,/,%,++,-赋值运算符=关系运算符:>,<,>=,<=,==,!=instanceof逻辑运算符:&&,||,!位运算符:&,|,^,~,>>,<<,>>>了解......
  • java中如何将函数作为参数传递呢?
    函数简介:  函数(function)的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、......
  • Java基础知识,JDK8下载安装环境配置
    Java基础知识Java的三种版本JavaSE:标准版,主要用于开发桌面程序,控制台开发等等JavaME:嵌入式开发,主要用于开发手机,小家电等等,目前使用的比较少JavaEE:企业级开发,主......