在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岁\n" ,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.总结:

实例在创建时会调用构造方法

构造方法用于初始化实例

没有定义构造方法时,编译器会自动创建默认的构造方法。

可以定义多个构造方法,编译器根据参数自动判断

廖雪峰Java2-2数据封装-2构造方法的更多相关文章

  1. 廖雪峰Java2面向对象编程-2数据封装-1方法

    1.数据封装 一个class可以包含多个field.直接把field用public暴露给外部可能破坏了封装,例如传入不合理的数值(年龄填入1000).如下 public class Person { ...

  2. 廖雪峰Java2面向对象编程-2数据封装-1方法重载

    方法重载 方法重载Overload是指:多个方法的方法名相同,但各自的参数不同 参数的个数不同 参数的类型不同 参数位置不同 方法返回值类型通常都是相同的 目的:相同功能的方法使用同一名字,便于调用 ...

  3. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...

  4. 廖雪峰Java2面向对象编程-3继承和多态-1继承

    1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...

  5. 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础

    1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...

  6. 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类

    1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...

  7. 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean

    1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...

  8. 廖雪峰Java2面向对象编程-6Java核心类-3包装类型

    Java的数据类型: 基本类型:int boolean float 引用类型:所有class类型 为一个基本类型int赋值为null,会提示"incompatible types" ...

  9. 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder

    字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...

  10. 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码

    Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...

随机推荐

  1. 2017.5.11 Yarn

    Yarn在hadoop中的位置 Yarn的优点 YARN把JobTracker分为ResouceManager和ApplicationMaster,ResouceManager专管整个集群的资源管理和 ...

  2. 2017.4.5 Strom

    Strom是分布式实时计算系统,它对于实时计算的意义类似于hadoop对于批处理的意义.与Storm关系密切的语言:核心代码用clojure书写,实用程序用python开发,使用java开发拓扑. S ...

  3. Python 模块管理1

    Python 模块管理   导入新的模块 创建一个 calculate.py 文件 print('ok') def add(x,y): return x + y def sub(x,y): retur ...

  4. (2)MySQL的增删改查基本操作

    数据库增删改查的基本操作(数据文件在data目录下) 数据库的专业术语 1.文件夹:数据库 2.文件:数据表 指令的注意事项 1.用use的时候指令结尾不需要跟一个分号 ‘:’ 2.如果用show或其 ...

  5. python------模块定义、导入、优化 ------->xml模块

    1. xml模块 引用参考原文链接:https://www.cnblogs.com/python-gm/p/8032465.html      谢谢 xml是实现不同语言或程序之间进行数据交换的协议, ...

  6. whmcs之全民idc

    http://manage.cn.resellerclub.com/servlet/LogoutPassServlet 原教程例子:http://sharebar.org/1594.html (该教程 ...

  7. 给新创建的用户 赋予所有的权利 *.* 查看权限 删除用户 ---------DCL用户权限管理篇

    第一步:进入数据库以后,先用 show databases; 再use mysql;    再 show tables;    再 select user,host from mysql.user; ...

  8. LeetCode - Find K Closest Elements

    Given a sorted array, two integers k and x, find the k closest elements to x in the array. The resul ...

  9. maven(二)

    1.1     Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2     Maven安装部署配置 1.3     Maven的仓库 ...

  10. Spring通知方法错误

    错误提示,主要最后一句话    ,花了2个小时 org.springframework.beans.factory.BeanCreationException: Error creating bean ...