廖雪峰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 ...
随机推荐
- 【HDOJ4612】【双连通分量缩点+找树的直径】
http://acm.hdu.edu.cn/showproblem.php?pid=4612 Warm up Time Limit: 10000/5000 MS (Java/Others) Me ...
- jdreact转换为H5注意事项
1:先执行npm install 然后执行 npm run web-init 配置完后 在执行 npm run web-start(注意的是不要根据文档执行 yarn add -D @jdreact ...
- 日志分析-mime统计
提取日志中未落入标准字段的mime,分adx,adtype 统计mime的数量和包含js的数量占比 require 'date' require 'net/http' require 'uri' re ...
- oracle实用命令入门
登录oracle(需要在oracle用户下) 执行sqlplus,然后输入用户名和密码就可以了,如果是第一次使用oracle的话,可以直接使用sqlplus / as sysdba免密码以管理员的身份 ...
- 使用 pkg 打包分发 nodejs 应用
pkg 是一个很不错的跨平台 nodejs 应用打包工具,使用此工具,我们只需要给与用户提供一个简单的 可执行文件就可以了,同时代码也是二进制的,提高了代码的安全性 备注:测试demo 很简单,也比较 ...
- :first :first-child .first()和.get() .eq()
:first .first()只匹配一个元素,而 :first-child 将为每个父元素匹配一个子元素 .get()得到的是dom 元素 $('li').get()没有参数返回一个数组 .eq() ...
- 应用端连接MySQL数据库报Communications link failure
事情的起因: 某项目的开发同学突然Q我们组的某同学,要求我们调整MySQL的连接等待超时参数wait_timeout.要求我们从28800s调整到31536000s(也就是一年) 应用端测试环境的to ...
- MySQL 术语
MySQL 术语: MySQL 术语 含义 B-树 英文:Balance Tree:读音:B树(中间的横线,是分隔符的意思:注意:不读"B减树")
- SyntaxError: Non-ASCII character '\xe4' in file t.py on line 3, but no encoding declared
问题 报错代码 #!/usr/bin/python s = "你好" print s 执行报错: File "t.py", line 3 SyntaxError ...
- 开源自然语言处理工具包hanlp中CRF分词实现详解
CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题. [gerative-discriminative.png] CRF训练 这类耗时的任务,还 ...