Java基础构造方法

导读:本篇文章讲解 Java基础构造方法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一:构造方法的概念

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!