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的相关知识,一起学习,一起进步,如对上文有意见或者有错误,还请大佬们斧正,觉得有帮助的童鞋们,创作不易,蟹蟹三连!

目录
相关文章
|
1天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
22天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
19天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
41 17
|
11天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
15天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
55 4
|
25天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
45 17
|
16天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
34 2
|
20天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
24天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
24天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
下一篇
无影云桌面