目录活动地址:CSDN21天学习挑战赛
- Java——方法
- 方法
- 构造方法
- 什么是构造方法
- 默认构造方法
- 构造方法重载
学习方法之前,我们需要思考几个问题:
- 什么是方法,它有什么用?
方法(英语单词:method)是可以完成某个特定功能的并且可以被重复利用的代码片段。在c语言中被成为”函数“。
- 对与一个Java程序来说,如果没有方法,会存在什么问题?
在完成一些相同功能只是参数不同的需求时,我们需要去重复编写代码,这是十分繁琐的一项工作,代码的复用率十分低,也就导致我们的工作效率大 打折扣。
- 怎样去定义一个方法
[修饰符列表] 返回值类型 方法名 (形式参数列表){ 方法体; }
注意:
- 中括号[]的内容不是必须的,是可以选的
- 方法体由Java语句构成
- 返回值类型可以是Java中所有合法的数据类型
构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例化变量的初始化。
Java构造方法的特点:
-
构造方法名必须与类名相同。
-
构造方法没有任何返回值,包括void。
-
构造方法只能与new运算符结合使用。
构造方法有什么作用?
构造方法的作用是创建对象以及对对象的属性初始化。
构造方法示例代码如下:
//Rectangle.java文件 package com.shouyerenst; // 矩形类 public class Rectangle { // 矩形宽度 int width; // 矩形高度 int height; // 矩形面积 int area; // 构造方法 public Rectangle(int w, int h) { width = w; height = h; area = getArea(w, h); } }默认构造方法
当一个类没有提供任何构造方法,系统会默认提供一个无参构造方法,这个构造方法被成为缺省构造器。
//User.java文件 package com.a51work6; public class User { // 用户名 private String username; // 用户密码 private String password; }
从上述User类代码,只有两个成员变量,看不到任何的构造方法,但是还是可以调用无参数的构造方法创建User对象,见如下代码。
//HelloWorld.java文件 ... User user = new User();
Java虚拟机为没有构造方法的类,提供一个无参数的默认构造方法,默认构造方法其方法体内无任何语句,默认构造方法相当于如下代码:
//默认构造方法 public User() { }
默认构造方法的方法体内无任何语句,也就不能够初始化成员变量了,那么这些成员变量就会使用默认值,成员变量默认值是与数据类型有关。
注意,一但程序员自己定义了构造方法,默认的无参构造将丢失,所以我们创建有参构造方法的时候,也需要手动创建无参构造器,防止缺省构造器丢失。
构造方法重载在一个类中可以有多个构造方法,它们具体有相同的名字(与类名相同),参数列表不同,所以它们之间一定是重载关系。
下面将用两个程序说明他们之间的关系以及区别
Student.Java
package com.shouyerenst.OOP; public class Student { //属性(描述状态),在Java程序中以”成员变量“的方式存在 //学号 int no; //这些成员变量又称为实例变量 //姓名 String name; //年龄 int age; //性别 boolean sex; //住址 String addr; //无参构造方法 public Student() { } //对学号属性初始化,其他属性系统赋默认值 public Student(int no) { this.no = no; } //对学号和姓名属性初始化,其他属性系统赋默认值 public Student(int no, String name) { this.no = no; this.name = name; } //对学号、姓名和年龄属性初始化,其他属性系统赋默认值 public Student(int no, String name, int age) { this.no = no; this.name = name; this.age = age; } //对学号、姓名、性别和年龄属性初始化,其他属性系统赋默认值 public Student(int no, String name, int age, boolean sex) { this.no = no; this.name = name; this.age = age; this.sex = sex; } //对所有属性初始化 public Student(int no, String name, int age, boolean sex, String addr) { this.no = no; this.name = name; this.age = age; this.sex = sex; this.addr = addr; } }
StudentTest.java
package com.shouyerenst.OOP; public class StudentTest { public static void main(String[] args) { //s1是局部变量,也叫做引用 Student s1 = new Student(); System.out.println(s1.no); System.out.println(s1.name); System.out.println(s1.age); System.out.println(s1.sex); System.out.println(s1.addr); System.out.println("----------------------"); Student s2 = new Student(10001); System.out.println(s2.no); System.out.println(s2.name); System.out.println(s2.age); System.out.println(s2.sex); System.out.println(s2.addr); System.out.println("----------------------"); Student s3 = new Student(10002,"李华"); System.out.println(s3.no); System.out.println(s3.name); System.out.println(s3.age); System.out.println(s3.sex); System.out.println(s3.addr); System.out.println("----------------------"); Student s4 = new Student(10003,"王雪",19); System.out.println(s4.no); System.out.println(s4.name); System.out.println(s4.age); System.out.println(s4.sex); System.out.println(s4.addr); System.out.println("----------------------"); Student s5 = new Student(100004,"叶凡",21,true); System.out.println(s5.no); System.out.println(s5.name); System.out.println(s5.age); System.out.println(s5.sex); System.out.println(s5.addr); System.out.println("----------------------"); } }
运行结果
0 null 0 false null ---------------------- 10001 null 0 false null ---------------------- 10002 李华 0 false null ---------------------- 10003 王雪 19 false null ---------------------- 100004 叶凡 21 true null ----------------------