zoukankan      html  css  js  c++  java
  • 构造函数

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


    构造函数的格式:

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

    构造函数要注意的细节:

    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!");
            */
        }    
    }
  • 相关阅读:
    java并发编程——Excutor
    java并发编程——BlockingQueue
    const int *p和int * const p的区别(常量指针与指向常量的指针)
    C语言 enum作为函数返回值及函数参数
    (void)0;
    浅析IAR环境下Flash loader工作原理 (转)
    xilinx zcu106 vcu demo
    flashloader速度提升
    typora--简洁的markdown编辑器
    vivado 2019.2 工程修改文件夹名称后引起的一系列问题
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/10549603.html
Copyright © 2011-2022 走看看