当前位置: 首页 > news >正文

JAVA之类,构造函数和构造代码块

类:

        在我们的日常生活中,对于事物的描述无非就是描述事物的属性和行为。如:人的身高,体重,年龄等称为属性,人会说话,会跑步,会做饭等等称为行为。

        而对于Java中的类,无非也是如此,包含了属性和行为。

类的定义:

  • 属性:对应类中的成员变量
  • 行为:对应类中的成员函数

例如:

public class User {
    public User() {
    }
    public User(String username, int age) {
        this.username = username;
        this.age = age;
    }
    private String username;
    private int age;
    public String say(String str){
        return  str;
    }
    public void sleep(){

    }
}

分析:

        首先创建了一个User类,其中用户名(username),年龄(age)是User类的成员变量。说话(say),睡觉(sleep)是User类的行为,而其余两个则是User类的无参构造器和有参构造器。

这里我们提到了一个成员变量,那么这个成员变量跟我们曾几何时学习的局部变量有什么关系呢?

成员变量和局部变量的关系:

成员变量:

  • 成员变量直接定义在类中。
  • 成员变量在这个类中有效。
  • 成员变量随着对象的建立而存在,消失而消失,存在于对象所在的堆内存中。
局部变量:
  • 局部变量定义在方法中,参数上,语句中。
  • 局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
  • 局部变量存在与栈内存中,随着所属区域的运行而存在,结束而释放。

构造函数定义:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。

特点:

  • 该函数的名称和所在类的名称相同。
  • 不需要定义返回值类型。
  • 该函数没有具体的返回值。
注: 所有的对象创建时,都需要初始化才能使用

注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。

一个类中,可以有多个构造函数,因为它们的函数名称是相同的,所以只能通过参数列表进行区分。所以,一个类中如果出现多个构造函数,它们的存在是以重载体现的。 


上面具体的介绍了一下构造函数的定义,特点等等。但是同样还有很多疑问,如他和一般函数有那些区别呢和构造代码块有什么区别呢等等问题。


构造函数和一般函数的区别:

  • 构造函数是在对象创建时,被调用,用户对象的初始化。而且对象的初始化动作只执行一次。
  • 一般函数,是对象创建完成后,需要调用才执行,可以被调用多次。
  • 构造函数和一般函数的定义格式不同。
构造代码块和构造函数的区别:

  • 构造代码块是给所有的对象进行初始化,也就说,所有的对象都会调用一个代码块。只要建立对象,就会调用这个代码块。
  • 构造函数是给与之对应的对象进行初始化,它具有针对性。
问: 构造代码块和构造函数的执行顺序是什么?

以一个简单的案例展示一个它们的执行顺序:

User类:

public class User {
    private String username;
    private int age;
    {
        System.out.println("构造代码块");
    }

    public User() {
        System.out.println("无参构造方法");
    }
    public User(String username, int age) {
        this.username = username;
        this.age = age;
        System.out.println("有参构造方法");
    }
}

测试类:

    public static void main(String[] args) {
        User u = new User();
        User user = new User("张三",18);
    }

执行结果:

构造代码块
无参构造方法
构造代码块
有参构造方法

结果分析:通过案例的验证,我们确定了 构造代码块在构造方法之前执行构造代码块在每次创建对象时都会执行构造方法之被调用一次,而且是针对性的


总结:书读百遍其义自见。只有基础扎实了,才能勇攀高峰。加油!!!加油!!!加油!!!


相关文章:

  • JAVA面试题之冒泡排序,插入排序及选择排序
  • Linux安装JDK步骤
  • Linux之ssh,scp命令的使用
  • Linux之ssh免密登录
  • Hadoop-2.8.0安装教程---单机/伪分布式配置
  • Java之序列化与反序列化
  • Hadoop之常用shell命令整理
  • Itext笔记之pdf页眉页脚
  • JAVA操作HDFS案例
  • zookeeper-3.4.10安装教程---分布式配置
  • storm-1.1.0安装教程---分布式配置
  • Hadoop之HDFS分布式文件系统读写流程详解
  • Zookeeper之常用API详解
  • Docker之Docker介绍及安装配置
  • Docker之Docker镜像管理
  • Apache Spark Streaming 使用实例
  • CSS居中完全指南——构建CSS居中决策树
  • FineReport中如何实现自动滚屏效果
  • js
  • js ES6 求数组的交集,并集,还有差集
  • linux安装openssl、swoole等扩展的具体步骤
  • MQ框架的比较
  • Mysql5.6主从复制
  • opencv python Meanshift 和 Camshift
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue全家桶实现一个Web App
  • 大数据与云计算学习:数据分析(二)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 力扣(LeetCode)965
  • 前端临床手札——文件上传
  • 容器服务kubernetes弹性伸缩高级用法
  • 原生 js 实现移动端 Touch 滑动反弹
  • 原生JS动态加载JS、CSS文件及代码脚本
  • #、%和$符号在OGNL表达式中经常出现
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (利用IDEA+Maven)定制属于自己的jar包
  • (论文阅读30/100)Convolutional Pose Machines
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)C#调用WebService 基础
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net CF下精确的计时器
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 中的轻量级线程安全
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET应用架构设计:原则、模式与实践 目录预览