一:构造方法的概念
1.构造方法又被称为构造函数/构造器/Constructor
2.构造方法语法结构:
[修饰符列表] 构造方法名(形式参数列表){
构造方法体;
}
3.回顾普通方法的语法结构:
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体
}
4.对于构造方法来说,“返回值类型”不需要指定,并且也不能写void,只要写上void,那么方法就成为普通方法了。
5.构造方法有什么用,构造方法的方法名必须和类名保持一致。
6.构造方法的作用?
- 构造方法存在的意义,通过构造方法的调用,可以创建对象。
7.构造方法应该怎么调用?
- 普通方法是这样调用的:方法修饰符中有static的时候:类名.方法名(实参列表),方法修饰符列表中没有static的时候:引用.方法名(实参列表)||new 构造方法名(实参列表)
8.构造方法调用执行之后,有返回值吗?
- 每一个构造方法实际上执行结束之后都有返回值,但是这个“return 值;”这样的语句不需要写。构造方法结束的时候java程序自动返回值,并且返回值是构造方法所在类的类型。由于构造方法的返回值类型就是类本身,所以返回值类型不需要编写
9.当一个类中没有定义任何的构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器
10.当一个类显示的将构造方法定义出来了,那么系统则不再认为这个类提供缺省构造器。建议开发中手写的当前类提供无参数构造方法。因为无参数构造方法最常用了。
11.构造方法支持重载机制。在一个类当中编写多个构造方法,这个构造方法显然已经构成方法重载机制。
示例代码
class User {
//默认的无参构造方法
public User(){
System.out.println("User's Default Constructor Invoke!");
}
//有参数的构造方法
public User(int a){
System.out.println("带有int类型参数的有参构造方法!");
}
//有参数的构造方法
public User(String b){
System.out.println("带有String类型参数的有参构造方法!");
}
//有参数的构造方法
public User(int a,String b){
System.out.println("带有int类型和String类型参数的有参构造方法!");
}
}
public class Constructortest01 {
public static void main(String[] args) {
//创建User对象
//调用User类的构造方法来完成对象的创建
//以下程序创建了4个对象,只要构造函数调用就会创建对象,并且一定是在“堆内存”中开辟空间
User u1 = new User();
User u2 = new User(20);
User u3 = new User("zhangsan");
User u4 = new User(20,"zhangsan");
//调用带有static的方法:类名
Constructortest01.dosome();
dosome();
//调用没有static的方法:引用
//doOther方法在Constructortest01类当中,所以需要创建Constructortest01对象
//创建Constructortest01对象,调用无参构造方法
Constructortest01 c = new Constructortest01();//一个类中没有任何构造方法的话,系统默认提供一个无参构造器
c.doOther();
}
public static void dosome(){
System.out.println("dosome");
}
public void doOther(){
System.out.println("doOther");
}
}
二:构造方法作用
- 1.创建对象
- 2.创建对象的同时,初始化实例变量的内存空间。【给实例变量赋值】
成员变量之实例变量,属于对象级别的变量,这种变量必须现有变量才能有实例变量,实例变量没有手动赋值的时候,系统默认赋值,那么这个系统默认赋值是在什么时候完成的呢?是在类加载的时候吗?
不是,因为类加载的时候只加载了代码片段,还没来得及创建对象,所以此时实例变量并没有初始化,实际上,实例变量的内存空间是在构造方法执行过程当中完成开辟的。完成初始化的。系统在默认赋值的时候,也是在构造方法执行过程当中完成的赋值。
示例代码01
class Account {
//账号
private String actno;
//余额
private double balance;
//无参构造器
public Account(){
//初始化实例变量的内存空间
//actno = null;
//balance = 0.0;
}
public Account(String a){
actno = a;
}
public Account(String a,double c){
actno = a;
balance = c;
}
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
public class Constructortest02 {
public static void main(String[] args) {
//另外,在一个类当中元素过多,想快速查看,在当前类中使用ctrl+o快捷键,然后输入要查找的元素名称,该名称不一定输入全名称
Account act1 = new Account();
System.out.println("账户的 号是:" + act1.getActno());
System.out.println("账户的余额是:" + act1.getBalance());
System.out.println("=====================================");
Account act2 = new Account("382155");
System.out.println("账户的账号是:" + act2.getActno());
System.out.println("账户的余额是:" + act2.getBalance());
System.out.println("=====================================");
Account act3 = new Account("382155",50000.0);
System.out.println("账户的账号是:" + act3.getActno());
System.out.println("账户的余额是:" + act3.getBalance());
}
}
示例代码02
class Customer {
private int no;
private String name;
private String birth;
//无参数构造器
public Customer(){
}
//有参数的构造器
public Customer(int a,String b,String c){
no = a;
name = b;
birth = c;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
}
public class ConstructorTest03 {
public static void main(String[] args) {
Customer c1 = new Customer();
System.out.println("该顾客的编号为:" + c1.getNo());
System.out.println("该顾客的编号为:" + c1.getName());
System.out.println("该顾客的编号为:" + c1.getBirth());
Customer c2 = new Customer(8888888,"法外狂徒张三","1988-09-19");
System.out.println("该顾客的编号为:" + c2.getNo());
System.out.println("该顾客的编号为:" + c2.getName());
System.out.println("该顾客的编号为:" + c2.getBirth());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94336.html