跟着姜少学Java基础编程之十二:面向对象-构造方法
来源:互联网 发布:js 数字比大小 编辑:程序博客网 时间:2024/05/21 12:50
本篇主要介绍Java语言中的面向对象中的构造方法。
12 构造方法
构造方法是在使用new关键字创建对象时调用的方法,负责对象属性值的初始化工作。
12.1 构造方法的特性
1、构造方法的方法名与类名相同(包括字母大小写)
2、构造方法没有返回值(void类型也不能写)
3、构造方法如果开发者不提供,则编译器会默认提供一个无参的构造方法。若开发者提供了构造方法,则编译器不再提供无参的构造方法。
12.2 无参构造方法
12.2.1 隐藏的无参构造方法
隐藏的无参构造方法,即开发者在类中不需要提供构造方法,编译器会自动给这个类提供一个无参的构造方法。
public class Point{ public int x; public int y; }
public static void main(String[] args) { //创建Point对象,调用了系统提供的隐藏的无参构造方法 Point point = new Point(); point.x = 3; point.y = 3; }
12.2.2 显式定义的无参构造方法
开发者在类中显式定义无参的构造方法后,系统不再提供隐藏的无参的构造方法。
public class Point{ public int x; public int y; //显式定义的无参构造方法Point() public Point(){ } }
public static void main(String[] args) { //创建Point对象,调用了开发者显式定义的无参构造方法 Point point = new Point(); point.x = 3; point.y = 3; }
注:隐藏的无参构造方法,只有在开发者未显式的的定义任何一个构造方法(不管有参还是无参)时,系统才会提供隐藏的无参构造方法。只要开发者定义了一个或者多个构造方法(不管有无参数),系统都不再提供隐藏的无参构造方法。
12.3 有参构造方法
有参的构造方法是为了创建对象时,使用指定的值将对象的属性值进行初始化而定义的构造方法。有参构造方法必须由开发者显式定义。
public class Point{ public int x; public int y; //有参构造方法 public Point(int x, int y){ this.x = x;//给对象的x属性赋值 this.y = y;//给对象的y属性赋值 } }
public static void main(String[] args) { Point point = new Point(3,4);//使用有参构造方法创建对象 System.out.println("x坐标为"+point.x +",y坐标为"+point.y);//输出x坐标为3,y坐标为4 }
上述代码中的有参构造方法,在给成员变量赋值时,使用了java中的关键字this,如this.x = x;此处如果写出x = x;则是将传入的参数x的值赋给了变量本身,而不是赋给成员变量x(因为此处形参与成员变量同名)。如果要把形参的值赋给同名的成员变量,需要使用this.成员变量名即可访问同名的成员变量。
12.4 构造方法的重载
一个类的构造方法有多个,这些构造方法的参数列表不同,就形成了构造方法的重载。
public class Point{ public int x; public int y; //无参构造方法 public Point(){ } //1个参数的有参构造方法 public Point(int x){ this(x,x);//调用Point(int x, int y) } //2个参数的有参构造方法 public Point(int x,int y){ this.x = x; this.y = y; } }
上述代码的Point类中,定义了三个构造方法,这三个构造方法的参数列表是不同的,属于方法的重载。
其中,只有一个参数的构造方法,使用this(x,x)调用了有两个参数的构造方法,这是关键字this的另一种用法。
有了构造方法的重载,开发者就可以按需实例化Point的对象,比如:
Point p1 = new Point();//点p1的坐标为(0,0) Point p2 = new Point(3);//点p2的坐标为(3,3) Point p3 = new Point(4,5);//点p3的坐标为(4,5)
下一篇将介绍Java中的面向对象中的方法的重载。
- 跟着姜少学Java基础编程之十二:面向对象-构造方法
- 跟着姜少学Java基础编程之十三:面向对象-成员方法
- 跟着姜少学Java基础编程之十一:面向对象-类与对象
- 跟着姜少学Java基础编程之十:方法
- java学习基础面向对象之构造方法 五-3
- Python编程基础之十二面向对象编程
- Java面向对象基础--构造方法
- Java面向对象基础--构造方法私有化
- java-面向对象编程-说说构造方法
- JAVA面向对象之构造方法
- Java面向对象之二-构造方法
- java 第六天 面向对象(基础篇之main方法、代码块、构造方法私有化)
- 跟着姜少学Java基础编程之二:类型转换
- 跟着姜少学Java基础编程之三:变量
- 跟着姜少学Java基础编程之四:运算符
- 跟着姜少学Java基础编程之五:Scanner、Random、String
- 跟着姜少学Java基础编程之八:循环结构
- 跟着姜少学Java基础编程之九:数组
- RabbitMQ入门教程(三):Hello World
- 回调函数实例
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field(数论,组合数学)
- 配置QSslConfiguration让客户端程序跳过本地SSL验证
- Eclipse Indigo Git
- 跟着姜少学Java基础编程之十二:面向对象-构造方法
- 关于springboot启动的问题.
- testing
- Tensorflow手写体识别mnist
- 系统架构Prototype
- 之前一直做功能测试,现在想往自动化测试发展
- PageRank算法--从原理到实现
- Android Studio 使用技巧
- 用ffmpeg 把mp4文件转为ts文件并生成m3u8列表