3.1.4 构造函数及构造代码块

news2024/9/27 23:31:45

文章目录

  • 1.概念
  • 2.形式
  • 3.练习
  • 4.关于构造函数的总结
  • 5.构造代码块与局部代码块
    • 5.1 形式
    • 5.2 构造代码块的特点
    • 5.3 局部代码块
    • 5.4 练习
    • 5.5 静态/构造/局部代码块的比较


1.概念

构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法

构造方法的主要功能就是完成对象创建或者初始化

当类创建对象(实例化)时,就会自动调用构造方法

构造方法与普通方法一样也可以重载.

2.形式

与类同名,且没有返回值类型,可以含参也可以不含参
在这里插入图片描述

3.练习

练习:构造方法创建对象/构造方法赋值

package partTwo;
/*本类用于测试构造方法*/
public class TestConstructor {
    public static void main(String[] args) {
        //4.创建Person类的对象进行测试
        /* 每次new(实例化)对象时,都会自动触发对应类的构造方法*/
        /* 每个类都会默认存在一个没有参数的构造方法
         *  但是,如果你提供了其他的构造函数,默认的无参构造会被覆盖
         * 所以,我们要手动的提供无参构造,这样才能不传参数,也能创建对象*/

        Person p = new Person();
        System.out.println(p.age);
        System.out.println(p.name);
        System.out.println(p.address);
        p.eat();

        //6.创建Person类的第二个对象
        /*每次创建对象时,都会执行构造方法;
         * 构造方法的作用就是用来创建对象的*/
        Person p2 = new Person();
        //7.触发含参构造
        Person p3 = new Person(88);
        //触发全参构造
        Person p4 = new  Person("张三",18,"柳树下");
        System.out.println(p4.name);
        System.out.println(p4.age);
        System.out.println(p4.address);
    }
}
//1.创造Person类,用来描述人这一事物
class Person{
    //2.属性--成员变量
    String name; //姓名
    int age;  //年龄
    String address; //住址


    /*构造方法的格式:没有返回值类型并且与类名同名的方法*/
    //5.创造本类的无参构造
    public Person(){
        System.out.println("我是Person无参构造");
    }

    //6.创建本类的含参构造
    public Person(int n){
        System.out.println("我是Person的含参构造"+n);
    }

    //8.创建本类的全参构造
    public Person(String name, int age, String address) {
        this.name = name;  //局部变量name的值赋值给this指定的成员变量name
        this.age = age;    //局部变量age的值赋值给this指定的成员变量age
        this.address = address;  //局部变量name的值赋值给address指定的成员变量address
        System.out.println("我是Person的全参构造");
    }



    //3.功能--方法
    public void eat(){
        System.out.println("干饭不积极,思想有问题");


    }
}

4.关于构造函数的总结

  1. 特点:方法名与类名相同,且没有返回值类型
  2. 执行时机:创建对象时立即执行
  3. 默认会创建无参构造,但是,如果自定义了含参构造,默认的无参构造会被覆盖,注意要手动添加
  4. 构造方法可以重载,根据其参数的不同分为无参构造,含参构造及全参构造

5.构造代码块与局部代码块

5.1 形式

{局部代码块}

5.2 构造代码块的特点

  1. 位置: 在类的内部,在方法的外部
  2. 作用: 用于抽取构造方法中的共性代码
  3. 执行时机: 每次调用构造方法前都会调用构造代码块
  4. 注意事项: 构造代码块优先于构造方法加载

5.3 局部代码块

  1. 位置: 在方法里面的代码块
  2. 作用: 通常用于控制变量的作用范围,出了花括号就失效
  3. 注意事项: 变量的作用范围越小越好,成员变量会存在线程安全的问题

5.4 练习

测试代码块的加载顺序

package partTwo;
/*
本类用于测试代码块
执行顺序:构造代码块>构造方法>对象创建成功>普通婆方法>局部代码块
1.当创建对象时,会触发构造函数
2,创建对象时,也会触发构造代码块,而且构造代码块优先于构造方法执行
3.我们通过创建好的对象来调用普通的方法
4.如果代用的普通方法里有局部代码块,对应的局部代码块才会执行
 */
import jdk.nashorn.internal.ir.CatchNode;

//本类用于测试代码块
public class TestBlock {
    public static void main(String[] args) {
        //创建小猫类对象
        Cat c1 = new Cat();
        Cat c2 = new Cat("缅因猫");
        Cat c3 = new Cat();
        c3.jump();
    }
}

//创建小猫类用来测试
class Cat{


    //2,定义属性
    String food;

    //创建代码块
    {
        /*构造代码块:
         * 位置:类里方法外
         * 执行时机:每次创建对象时,都会执行构造代码块,并且构造代码块优先于构造方法执行
         * 作用:用于提取所有构造方法的共性功能  */
        System.out.println("我是一个构造代码块");
        System.out.println("今天的你真好看");
        food = "小鱼干";
    }

    //3.1创建无参构造
    public Cat(){
        System.out.println("我是Cat的无参构造"+food);
    }

    public Cat(String s){
        System.out.println("我是小猫的含参构造"+s+food);
    }

    //4.创建普通方法
    public void jump(){
        System.out.println("小猫跳的老高了");
//创建局部代码块
        {
        /*
        局部代码块
        位置:方法里
        执行时机:代用本局部代码块所处的方法时才会执行
        作用:控制变量的使用范围,变量的作用范围要越小越好
         */
            System.out.println("我是一个局部代码块");
            int i = 100;
            System.out.println(i);
        }
        //System.out.println(i);局部变量i只能在局部代码块里用
    }
}

执行顺序为:构造代码块>构造方法>对象创建成功>普通婆方法>局部代码块

5.5 静态/构造/局部代码块的比较

  1. 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化
  2. 构造代码块:在创建对象时会自动调用,每次创建对象都会被调用,提取构造共性
  3. 局部代码块:方法里的代码块,限制局部变量的范围

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在android开发中使用Kotlin Flow(一)

Kotlin 的Flow可以对数据流进行建模,类似LiveData、RxJava的数据流。 Flow也是用观察者模式实现的。 观察者模式包括了可观察对象(Observable,生产者、发射者、源这些称呼都是指可观察对象,可以被观察)、观察对象&…

如何安装谷歌服务框架?(Google三件套下载教程)

谷歌服务框架,想必大家已经了解过了,都知道是个什么东西。这里我在赘述一下,谷歌服务框架是支持谷歌应用商店(Google Play)正常运行的服务框架,没有它,谷歌商店无法正常在安卓手机上运行&#x…

计算机图形学 第6章 三维变换与投影

目录 # 学习要求 前置知识 三维几何变换总的式子: 平移变换 比例变换 旋转变换:绕x轴旋转 反射变换 错切变换 三维复合变换 坐标系变换 正交投影矩阵 三视图 斜投影定义 透视投影 透视变换坐标系 ## 代码 透视投影分类 # 学习要求 …

怎么把图片做成gif动图?三步搞定gif在线制作

在日常办公、生活中经常会使用一些gif动态图片,生动有趣画面丰富。很好奇这些gif动图是怎么制作的吧!其实,制作gif表情包的方法很简单,给大家分享几个简单实用的gif制作(https://www.gif.cn/)方法&#xff…

ccflow 代码——流程讲义

爬虫组件分析目录概述需求:设计思路实现思路分析1.表单引擎模版表系统框架Jflow 对使用者的要求参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,…

CV——day71 零基础学YOLO:YOLOv2

YOLOv25. YOLOv25.1 YOLOv2升级概述5.2 YOLOv2网络架构5.3 基于聚类提取先验框5.4 偏移量计算方法5.5 坐标映射与还原5.6 感受野的作用5.7 特征融合改进5.7.1 多尺度检测5.8 YOLOv2 总结5. YOLOv2 5.1 YOLOv2升级概述 可以看出,v2的map相比v1改进了很多&#xff0c…

KafkaProducer线程安全吗?

这是我今天面试被问的一个问题&#xff0c;这会回来就来看看源码 先看KafkaProducer的构造函数 public KafkaProducer(Map<String, Object> configs) { this((ProducerConfig)(new ProducerConfig(configs)), (Serializer)null, (Serializer)null); } public KafkaPro…

[MRCTF2020]PixelShooter1题解

Android一词最早出现于法国作家利尔亚当&#xff08;Auguste Villiers de lIsle-Adam&#xff09;在1886年发表的科幻小数《未来的夏娃》&#xff08;Lve future&#xff09;中。他将外表像人的机器起名为Android。 本题是一个安卓逆向 1.下载到手机玩一玩 是一个32位文件下载…

2-JVM、JRE、JDK的作用及联系和区别

在Java环境配置和项目启动中&#xff0c;这三者的配置是项目启动的基础保证。 JVM(Java Virtual Machine)&#xff0c;Java虚拟机&#xff0c;就是一个虚拟的用于解析bytecode字节码的”虚拟计算机”。一般与OS操作系统打交道。是整个java实现跨平台的最核心的部分【使用Java编…

GlobalPointer:用统一的方式处理嵌套和非嵌套NER

本文将介绍一个称为GlobalPointer的设计&#xff0c;它利用全局归一化的思路来进行命名实体识别&#xff08;NER&#xff09;&#xff0c;可以无差别地识别嵌套实体和非嵌套实体&#xff0c;在非嵌套&#xff08;Flat NER&#xff09;的情形下它能取得媲美CRF的效果&#xff0c…

大数据专业前景怎么样?

大数据专业毕业生未来的岗位选择空间比较大&#xff0c;有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位&#xff0c;在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…

latex自己记录需要的

参考:LaTeX 公式篇 推荐网站&#xff1a;LaTeX公式编辑器&#xff0c;有模板 换行 $$ \begin{array}{c} 1\\ 2\\ 3\\ \end{array} $$123\begin{array}{c} 1\\ 2\\ 3\\ \end{array} 123​ 公式拆分 $$ \begin{split} 123 & 33 \\ &6 \end{split} $$123336\begin{split}…

找工作不用愁,送你一份Salesforce面试秘籍!

在之前的文章中&#xff0c;自由侠部落为学习者梳理了Salesforce架构师的面试秘籍&#xff0c;将其拆解为了3个方面——分享工作经验、展示技术知识以及证明领导能力&#xff0c;上篇文章已经展示了工作经验部分&#xff0c;接下来将继续分享面试秘籍&#xff0c;帮助求职者顺利…

linux内核之netlink通信

Linux内核(04)之netlink通信 Author&#xff1a;Onceday Date&#xff1a;2023年1月3日 漫漫长路&#xff0c;才刚刚开始… 参考文档&#xff1a; netlink 机制 binarydady 阿里云开发者社区linux中通用Netlink详解及使用剖析 binarydady 阿里云开发者社区RFC 3549 Linux N…

测试员最不愿遇到的18个测试问题,怎么解决?

测试员最不愿遇到的18个测试问题&#xff0c;怎么解决&#xff1f; 目录&#xff1a;导读 测试员最不愿遇到的18个测试问题&#xff0c;怎么解决&#xff1f; 一 测试充分度&#xff08;Test Sufficiency&#xff09; 二 测试有效性&#xff08;Test Effectiveness&#x…

人大金仓数据库-表的定义

表的定义 使用子查询来创建表 通过复制student表创建student_m表&#xff0c;只复制原表中的部分数据到新表 通过复制course表创建course01表&#xff0c;复制原表中的全部数据到新表 使用LIKE语法来创建表 非空约束会默认复制到新表中 create table t03(LIKE t02 INCLUDING…

设计循环队列

前言&#xff1a;队列中有一种特殊的存在——环形队列&#xff0c;其有一定的价值与意义&#xff0c;这篇文章主要由一道与其相关的例题来引出相关的知识内容。 注&#xff1a;下述解题过程是用C语言实现。 目录 一&#xff1a;题目简述 二&#xff1a;环形队列的简单介绍 …

什么是Docker?看这一篇干货文章就够了!

什么是Docker容器技术的起源容器技术 vs 虚拟机什么是容器什么是docker如何使用dockerdocker是如何工作的docker的底层实现总结作为程序员我们应怎样理解docker&#xff1f; 容器技术的起源 假设你们公司正在秘密研发下一个“今日头条”APP&#xff0c;我们姑且称为明日头条&…

ORB-SLAM3算法和代码学习——重定位Relocalization

0总述 重定位是ORB-SLAM系列保持跟踪稳定性的保障&#xff0c;从ORB-SLAM沿用至ORB-SLAM3。主要作用是在跟踪失败时&#xff0c;通过词袋向量搜索在关键帧数据库中寻找和当前帧相似的关键帧作为匹配帧&#xff0c;建立数据关联并计算当前帧的位姿&#xff0c;恢复相机的运动。…

正大国际期货:外盘短线交易九大生存准则:从亏损预期出发

一、生存是第一位 这并不是陈词滥调&#xff0c;投机是非常危险的活动。投机非并输赢那样简单&#xff0c;首要的任务是在顶峰和谷底之间的波动中生存&#xff0c;如果连生存都做不到&#xff0c;你根本就没有谈及赢的资格。 即使有了好的资金管理、正确的系统和行动的前提&a…