廖雪峰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岁\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构造方法的更多相关文章
- 廖雪峰Java2面向对象编程-2数据封装-1方法
1.数据封装 一个class可以包含多个field.直接把field用public暴露给外部可能破坏了封装,例如传入不合理的数值(年龄填入1000).如下 public class Person { ...
- 廖雪峰Java2面向对象编程-2数据封装-1方法重载
方法重载 方法重载Overload是指:多个方法的方法名相同,但各自的参数不同 参数的个数不同 参数的类型不同 参数位置不同 方法返回值类型通常都是相同的 目的:相同功能的方法使用同一名字,便于调用 ...
- 廖雪峰Java2面向对象编程-6Java核心类-5枚举类
直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...
- 廖雪峰Java2面向对象编程-3继承和多态-1继承
1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...
- 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础
1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...
- 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类
1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...
- 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean
1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...
- 廖雪峰Java2面向对象编程-6Java核心类-3包装类型
Java的数据类型: 基本类型:int boolean float 引用类型:所有class类型 为一个基本类型int赋值为null,会提示"incompatible types" ...
- 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder
字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...
- 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码
Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...
随机推荐
- 计算x
如果x的x次幂结果为10(参见[图1.png]),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数, ...
- Map 按Key排序 和 按Value排序
https://www.cnblogs.com/binz/p/6671917.html 一.根据value排序 通用方法 public class MapUtil { public static &l ...
- Architecture options to run a workflow engine
This week a customer called and asked (translated into my own words and shortened): “We do composite ...
- MySQL创建表,更新表,删除表,重命名表
创建表 mysql> create table 表名( -> 列名 数据类型 是否为空 auto_increment, -> 列名 数据类型 是否为空... -> ... -& ...
- 学习concurrency programming进展
看了一段时间的actor model,goroutine之类的东东,最近在github上写了个简单的框架, 注:未做大量测试,仅供学习用,勿用于生产用途 链接: https://github.com/ ...
- MySQL中如何实现 select top n
mysql 没有 top n 语法,mysql 用 limit 来实现相关功能,而且功能更加强大. 语法: SELECT * FROM table LIMIT [offset,] rows | row ...
- django用mysql数据库出现的问题解决
blog添加不了文章!! 做了个程序,将数据库迁移到服务器之后,发现一个奇怪的错误.Field 'id' doesn't have a default value.查看了一下,程序是没问题的,但是这是 ...
- KNN手写实践:Python基于数据集整体计算以及排序
1. 距离计算,不要通过遍历每个样本来计算和指定样本距离,而是通过对于指定样本进行广播(复制)成为一个shape和全局一致后,再进行整体计算,这里的广播 / 复制采用的是tile函数来实现的: 2. ...
- MongoDB从3.0.6升级到MongoDB3.4.9
最初进入公司的时候,有些爬虫数据需要存储在mongo数据库里面,当时看到最新的数据库版本是3.0.6,现在公司开展了新的项目需要使用到Mongo,使用到了Mongo的一些表关联查询的方法,但是只有在最 ...
- JS replace()用法实现replaceAll
由于js没有提供replaceAll,则使用正则表达式实现全局替换. javascript中replace() 方法如果直接用str.replace("-","!&quo ...