博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础8 构造函数和构造代码块
阅读量:4870 次
发布时间:2019-06-11

本文共 5525 字,大约阅读时间需要 18 分钟。

一、构造函数

1 构造函数的作用

给对应的对象进行初始化.

2 构造函数的格式

修饰符 函数名(形式参数){  //函数名就是类名        函数体      }

举例说明:

class Perosn{    private int id;    private String name;    private int age;        public Perosn(){ //无参构造器        cry();    }    public Perosn(int id, String name, int age) { //有参构造器        this.id = id;        this.name = name;        this.age = age;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }            public void cry(){        System.out.println("哇哇哇....");    }    }

3 构造函数要注意的细节

 1.构造函数是没有返回值类型

 2.构造函数必须与类名一致
 3.构造函数并不是由我们手动调用的,而是在创建对应的对象时,jvm就好自动调用到相应的构造函数
 4.如果类没有显示的写一个构造函数时,那么java编译器会自动为该类添加一个无参的构造函数.
  javap 反编译工具使用的格式
         javap -c -l -p 类名
 5.如果类显示的写了一个构造函数时,那么java编译器则 不会在为该类添加一个无参的构造函数
 6.构造函数是可以在一个类中以函数重载的形式存在多个的

4 构造函数和普通函数的区别

1.返回值类型的区别:

     1.构造函数没有返回值类型的
     2.普通函数是有返回值类型,即使没有返回值,返回值类型也要写void
2.函数名的区别
     1.构造函数的函数名必须与类名一致
     2.普通函数的函数名只需要符号标识符的命名规范即可
3.调用方式的区别
    1. 普通函数是有我们创建对象来调用的,一个对象可以调用多次普通的函数(手动调用)
    2.构造函数是创建对象时,有jvm自动调用的
4.作用上的区别:
     1.构造函数的作用:用于初始化一个对象
     2.普通函数是描述一类事物的公共行为的

/*   1.描述一个员工类.员工具备的属性:id/name/age     具备的行为:工作   2.要求:一旦创建一个员工对象的时候,那么该员工对象就要对应的属性值*/class Employee{    int id;    String name;    int age;    //含参构造器    public Employee(int ids,String names,int ages){        id=ids;        name=names;        age=ages;    }    //无参构造器    public Employee(){        }    public void work(){        System.out.println(name+"好好工作,努力挣钱,赢取秋香");    }} class Demo3 {    public static void main(String[] args) {        //对应实例化对象,调用对应的构造器.        //无参对象        Employee e=new Employee();        //实例化一个含参的对象        Employee e=new Employee(1,"华安",24);        e.work();        System.out.println("编号:"+e.id+"\t"+"姓名:"+e.name+"\t"+"年龄:"+e.age);    }}

 二、构造代码块

 1 构造代码块作用

给所有的对象进行统一的初始化。 (将所有构造方法中公共的信息进行抽取。);(给对象进行初始化。对象一建立就运行并且优先于构造函数。)

1.构造代码块的作用: 给对象进行统一的初始化2.构造函数的作用: 给对应的对象初始化.
class Perosn{    private int id;    private String name;    private int age;    //构造代码块    {        cry();// 每个Person对象创建出来都会执行这里的代码    }        public Perosn(){ //无参构造器        cry();    }    public Perosn(int id, String name, int age) { //有参构造器(函数)        this.id = id;        this.name = name;        this.age = age;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }            public void cry(){        System.out.println("哇哇哇....");    }    }

2 构造代码块的格式

构造代码块的格式:      {        构造代码块...      } 静态代码块的格式:       static{
          代码...           }

举例:

class Student{    String name;    static String country="中国";        /*//有参构造器    public Student(String name){        this.name=name;        }    */        //代码块    {        System.out.println("这是构造代码块");    }        //静态代码块    static{        System.out.println("这是静态代码块");    }        //构造函数    public Student(){        System.out.println("这是无参构造器");        }}class Demo5{        public static void main(String[] args) {            Student s=new Student();            Student s1=new Student();    }}

结果图:

注意: 静态代码块,代码块,构造器的运行顺序:静态代码块最先执行,并且只执行一次;其次到构造代码块,最后到构造函数(器)。代码块和构造函数对象的创建次数决定调用次数,代码块是先于构造器(函数)执行。

构造代码块:对于初始化功能来讲,一旦一个类创建一个对象,将先执行直接初始化和构造代码块,最后才执行构造器

代码块的类别:

        1.构造代码块
        2.静态代码块
        3.局部代码块:大括号位于方法之内.作用:缩短了局部变量的生命周期,节省了一点点内存

class Demo4 {    //无参构造器    public Demo4(){        System.out.println("好好学习,迎娶白富美");            }   //普通方法(函数)     public void m(){        System.out.println("迎娶校花");            }    //构造代码块    {    System.out.println("好好学习,天天向上,迎娶校花");        }        public static void main(String[] args) {        Baby b=new Baby();    }}
//结果:   构造代码块先执行, 再执行构造函数

3 构造代码块与构造函数区别

构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。

4 构造代码块要注意的事项

    1.java编译器在编译一个java源文件的时候,会把成员变量提到一个类的最前端

    2.成员变量初始化工作其实都在构造函数中执行的
    3.一旦java编译器编译之后,那么构造代码块的代码就会被移动到构造函数中执行,是在构造函数之前执行的,构造函数中的代码最后执行的
    4.成员变量的初始化与构造代码块的代码是按照当前代码的顺序执行的

/*    需求:统计一个类被使用多少次创建对象,该类对外显示被创建的次数*/class Emp{    static int flag=0;//计数器    String name;    //构造代码块    {    flag++;//1    }    //含参的构造器    public Emp(String names){        name=names;    }    //无参构造器    public Emp(){    }}class  Demo5{    public static void main(String[] args)     {        Emp e=new Emp("土豆");        Emp e1=new Emp("土豆");        Emp e2=new Emp("土豆");        System.out.println(e.flag);    }}

 

 

 

原创作者:

作者主页:

原文出自:

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 

 
 
G
M
T
 
检测语言世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苗语英语荷兰语菲律宾语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语   世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苗语英语荷兰语菲律宾语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语          
 
 
 
文本转语音功能仅限200个字符
 
  : : : 关闭

转载于:https://www.cnblogs.com/dshore123/p/8717718.html

你可能感兴趣的文章
Vue基础汇总
查看>>
[小技巧] gcc 编译选项-###
查看>>
0513课堂01 数组,数学函数,时间函数
查看>>
grunt对象之api
查看>>
《驻足思考》笔记
查看>>
全网最详细的Windows系统里PLSQL Developer 64bit的下载与安装过程(图文详解)
查看>>
Spark MLlib回归算法LinearRegression
查看>>
Hadoop MapReduce概念学习系列之mr的Shuffle(二十二)
查看>>
away3D案例3
查看>>
好的git教程
查看>>
Delphi XE增强的RTTI妙用--动态创建包中的窗口类
查看>>
unisynedit 在Delphi 2010下的编译问题
查看>>
mssql 动态行转列。
查看>>
工作杂记
查看>>
老话题,权限设计及实现!
查看>>
POJ 2393 贪心 简单题
查看>>
3. Quartz2D 绘制矩形、圆形、弧形
查看>>
latex 学习笔记
查看>>
SQL 数据库 学习 005 学习必备的一些操作 --- 如何新建数据库 如何附加和分离数据库(如何备份还原数据库) 如何删除数据库...
查看>>
[php排错] Forbidden You don't have permission to access / on this server.
查看>>