构造函数

本文围绕Java展开,介绍了构造函数的作用是给对象初始化,探讨了未学构造方法时JVM调用情况及编译器添加的无参构造函数修饰符。还通过描述婴儿、员工类的需求,引出构造函数和构造代码块的使用,同时介绍了局部代码块和静态代码块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数的作用: 给对应的对象进行初始化。


构造函数的格式:

构造函数的格式:
    
    修饰符  函数名(形式参数列表){
        初始化的语句;
    }

构造函数要注意的细节:

1. 构造函数是没有返回值类型的。    
2. 构造函数的函数名必须 与类名一致。 
3. 构造函数并不是由我们手动调用的, 构造函数是在创建对应对象的时候由jvm主动调用的(每创建一个对象就会调用一次构造函数)。
4. 如果一个类没有显式的添加一个构造函数,那么java编译器会为该类添加一个无参的构造函数。
5. 如果一个类已经显式的添加一个构造函数,那么java编译器则不会再为该类添加一个无参的构造函数。
6. 构造函数是可以以函数重载的形式存在多个的。

疑问1 :我们现在知道创建对象的时候,jvm需要调用到对应的构造方法,那么以前我们没有学构造方法,那么
jvm还会调用到构造方法吗?而且构造方法存在吗?

存在构造方法的, 但是不是java虚拟机添加的,是java编译器添加的。


疑问2:java编译器添加的无参构造函数的修饰符是什么?

无参的构造函数的权限修饰符是与类名一致的。

 

需求: 使用一个java类描述一个婴儿。

问题: 在现实生活中有两种婴儿,一出生就有姓名与身份证编号(白户),
一种出生之后才有身份证编号与姓名(黑户)。

//婴儿类
class Baby{
    
    int id; //身份证编号

    String name; // 名字
    
    //无参的构造函数
    public Baby(){
        System.out.println("无参的构造函数调用了..");
    }
     

    //带参构造函数
    public Baby(int i , String n){
        id = i ;
        name = n;
        System.out.println("两个参数构造函数调用了..");
    }



    public void cry(){
        System.out.println("哇哇哇....");
    }
}


class Demo2 {

    public static void main(String[] args) 
    {
        /*
        Baby b1 = new Baby(); //黑户
        b1.id = 110;
        b1.name= "狗娃";
        System.out.println("身份证:"+ b1.id+" 姓名:"+ b1.name);
        */
        new Baby();
        new Baby();
        Baby b2 = new Baby(110,"狗剩");    //白户
        System.out.println("身份证:"+ b2.id+" 姓名:"+ b2.name);
    
    }
}

需求: 使用java类描述一个员工,员工具备的公共属性: id、 name、 age. 公共行为:上班

要求:一旦创建一个员工对象,那么该员工对象要马上具备相应的属性值。

class Emp{
    
    //事物的公共的属性

    int id;

    String name;

    int age;

    //构造函数
    public Emp(int i , String n ,int a){
        id =i;
        name = n;
        age = a;
    }


    //上班
    public void work(){
        System.out.println(name+" 好好上班!!");
    }
        
}


class Demo3 
{
    public static void main(String[] args) 
    {
        Emp e = new Emp(110,"狗娃",18);
        System.out.println("编号: "+ e.id+" 姓名:"+ e.name+" 年龄:"+ e.age);
    }
}

问题:重复代码。

构造函数的作用:给对应的对象进行初始化。

构造代码块:给所有的对象进行统一的初始化。

构造代码块格式:

构造代码块格式:
    {
        初始化语句;
    } 

代码块的类型:

构造代码块: 代码块位于成员位置上。

局部代码块 :代码块位于方法之内。

局部代码块的作用: 缩短局部变量的生命周期。


静态代码块:

//婴儿类
class Baby{
    
    int id; //成员变量

    String name;
    
    //构造代码块
    {
        //System.out.println("构造代码块被调用了.....");
        cry();
    }


    //无参的构造函数
    public Baby(){
        
    }

    //带参构造函数
    public Baby(int i,String n){
        id = i;
        name = n;
    }

    public void cry(){
        System.out.println("哇哇哇..");
    }
}


class Demo4 
{
    public static void main(String[] args) 
    {
        Baby b1 = new Baby(110,"狗娃");
        
        /*
        Baby b1 = new Baby(); //黑户
        Baby b2 = new Baby(110,"狗娃"); //白户
        //System.out.println("Hello World!");
        */
    }    
}

 

转载于:https://www.cnblogs.com/hbxZJ/p/10549603.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值