Java类和对象(下)

简介: 大家一定有所耳闻,在Java中一切皆对象,那么今天小编就和大家介绍何为类和对象?

5. 对象的构造及初始化


5.1 如何初始化对象

通过前面知识点的学习知道,在 Java 方法内部定义一个局部变量时,必须要初始化,否则会编译失败:

publicstaticvoidmain(String[] args) {
inta;
System.out.println(a);
}
// Error:(26, 28) java: 可能尚未初始化变量a
publicstaticvoidmain(String[] args) {
Dated=newDate();
d.printDate();
d.setDate(2021,6,9);
d.printDate();
}
// 代码可以正常通过编译

需要调用之前写的 SetDate 方法才可以将具体的日期设置到对象中。 通过上述例子发现两个问题:

1. 每次对象创建好后调用 SetDate 方法设置具体日期,比较麻烦,那对象该如何初始化?

2. 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?


5.2 构造方法


  5.2.1 概念

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次,举个例子:

publicDate(intyear, intmonth, intday){
this.year=year;
this.month=month;
this.day=day;
System.out.println("Date(int,int,int)方法被调用了");
}

注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。


  5.2.2 特性

1. 名字必须与类名相同

2. 没有返回值类型,设置为void也不行

3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)

4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)


举个例子:

classDateUtil {
publicintyear;
publicintmonth;
publicintday;
publicDateUtil() {
System.out.println("调用了该方法");
    }
publicDateUtil(intyear, intmonth, intday) {
this.year=year;
this.month=month;
this.day=day;
System.out.println("调用了3个参数的构造方法!");
    }
/*public void setDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}*/publicvoidshow() {
System.out.println("年:"+year+"月:"+month+"日:"+day);
    }
}
publicclassTest_2 {
publicstaticvoidmain(String[] args) {
DateUtildateUtil=newDateUtil(2022, 11, 11);
dateUtil.show();
    }
}

这里我们通过构造方法直接给成员变量初始化,而并没有调用setDate这个方法,这就是构造方法!


我们也可以通过this引用去调用构造方法:

classDateUtil {
publicintyear;
publicintmonth;
publicintday;
publicDateUtil() {
this(2022,11,11);
System.out.println("调用了该方法");
    }
publicDateUtil(intyear, intmonth, intday) {
this.year=year;
this.month=month;
this.day=day;
System.out.println("调用了3个参数的构造方法!");
    }
/*public void setDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}*/publicvoidshow() {
System.out.println("年:"+year+"月:"+month+"日:"+day);
    }
}
publicclassTest_2 {
publicstaticvoidmain(String[] args) {
DateUtildateUtil=newDateUtil();
dateUtil.show();
    }
}

这里可以发现,我们在主函数中的DateUtil()方法中并没有传参,而是通过构造方法,用this给成员变量初始化,这样输出也能达到预期的结果!

注:当通过this去调用构造方法时,this要放在第一行,否则代码编译不通过

ae8b6f26bc684fd5a0931a9e2ee42efc.png


5.3 默认初始化

如果在类里的成员变量没有赋值,编译器默认会赋一个初始值:

classDateUtil {
publicintyear;
publicbooleanmonth;
publicfloatday;
publicDateUtil() {
System.out.println("调用了该方法");
    }
publicDateUtil(intyear, booleanmonth, floatday) {
this.year=year;
this.month=month;
this.day=day;
System.out.println("调用了3个参数的构造方法!");
    }
/*public void setDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}*/publicvoidshow() {
System.out.println("年:"+year+"月:"+month+"日:"+day);
    }
}
publicclassTest_2 {
publicstaticvoidmain(String[] args) {
DateUtildateUtil=newDateUtil();
//dateUtil.show();System.out.println(dateUtil.year);
System.out.println(dateUtil.month);
System.out.println(dateUtil.day);
    }

运行如下:

86160a5ead294f48aa14d9ad83102255.png

这里有张表供大家参考:\

e7dad90572834e54856f140ba31f87bb.png


6.总结


到这儿今天的主题就和大家介绍完了,小编也是刚刚学习java的小白,后续还会给大家分享Java的相关知识,一起学习,一起进步,如对上文有意见或者有错误,还请大佬们斧正,觉得有帮助的童鞋们,创作不易,蟹蟹三连!

目录
相关文章
|
14天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
32 6
|
4天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
1天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
27 17
|
8天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
33 17
|
2天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
6天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
6天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
7天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
6天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
15 3
|
9天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
17 5