Java基础构造方法

简介: Java基础构造方法

一:构造方法的概念


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());
  }
}
相关文章
|
3月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
95 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
39 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
7月前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
226 2
|
2月前
|
Java
在Java中定义一个不做事且没有参数的构造方法的作用
Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
|
3月前
|
设计模式 Java 测试技术
Java零基础-构造方法详解
【10月更文挑战第5天】Java零基础教学篇,手把手实践教学!
39 1
|
4月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
|
3月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
89 1
|
4月前
|
Java API
java调用构造方法
java调用构造方法
49 3
|
3月前
|
Java
java构造方法的两种传值调用对实参的影响
java构造方法的两种传值调用对实参的影响
29 0
|
3月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
51 0