zoukankan      html  css  js  c++  java
  • 廖雪峰Java2-2数据封装-2构造方法

    在2-2-1中,创建1个实例需要3步

            Person ming = new Person();
    		ming.setName("  小明  ");
    		ming.setAge(16);
    

    问题:能否在创建对象实例时就把内部字段全部初始化为合适的值?
    构造方法因此应运而生

    1.单个构造方法

    • 构造方法可以在创建对象实例时初始化对象实例
    • 构造方法名就是类名
    • 构造方法的参数没有限制
    • 构造方法没有返回值(也没有void)
    • 必须用new操作符调用构造方法
      Person.java
    public class Person {
    	private String name;
    	private int age;
    	public Person(String name,int age) {
    		this.name = name;
    		this.age = age;
    	}
    	public void info() {
    		System.out.printf("我是%s,今年%d岁" ,name,age);
    	}
    }
    

    Hello.java

    public class Hello {
    	public static void main(String[] args) {
    		Person ming = new Person("小明",12);
    		ming.info();
    	}
    }
    
    如果一个类没有定义构造方法,编译器会自动生成一个默认构造方法: * 无参数 * 无执行语句 ```#java public Person() { } ``` 如果我们定义了构造方法,编译器不会再自动创建默认的构造方法

    构造方法初始化顺序:

    • 先初始化字段
    • 没有赋值的字段初始化为默认值:基本类型=0;引用类型=null
    • 再执行构造方法的代码

    多个构造方法

    可以定义多个构造方法,编译器通过构造方法的参数数量、位置和类型区分
    一个构造方法可以调用其他构造放方法,便于代码复用。
    调用其他构造方法的语法是this(...)
    Person.java

    public class Person {
    	private String name;
    	private int age;
    	public Person(String name,int age) {
    		this.name = name;
    		this.age = age;
    	}
    	public Person(String name) {
    		this(name,18);
    	}
    	public Person() {
    		this("Unnamed");
    	}
    	public void info() {
    		System.out.printf("我是%s,今年%d岁
    " ,name,age);
    	}
    }
    

    Hello.java

    public class Hello {
    	public static void main(String[] args) {
    		Person ming = new Person("小明",12);
    		ming.info();
    		Person hong = new Person("小红");
    		hong.info();
    		Person jun = new Person();
    		jun.info();
    	}
    }
    

    3.总结:

    实例在创建时会调用构造方法
    构造方法用于初始化实例
    没有定义构造方法时,编译器会自动创建默认的构造方法。
    可以定义多个构造方法,编译器根据参数自动判断

  • 相关阅读:
    IIS: Idle Timeout vs Recycle
    Window.location
    Web technology for developersSee Web APIsStorage
    Know the basics about NTFS permissions
    设置描述性弹性域某个字段为只读
    adb root
    nvme WVLOCK
    模拟器获取root权限
    Android模拟器emulator基本使用技巧和命令
    人工智能可以产生自主意识吗
  • 原文地址:https://www.cnblogs.com/csj2018/p/10262390.html
Copyright © 2011-2022 走看看