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.总结:

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

  • 相关阅读:
    Feli的生日礼物
    session cookie
    ArcGIS FLEXnet Licensing error:96,491错误解决
    CSS块元素与内联元素(转)
    铝伯世
    netsh修改IP及DNS

    JAVA代码查错(转)
    windows7查看占用端口的进程
    php 中文字符串截取子串
  • 原文地址:https://www.cnblogs.com/csj2018/p/10262390.html
Copyright © 2011-2022 走看看