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

目录
相关文章
|
23天前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
211 0
|
2月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
212 101
|
2月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
268 100
|
3月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
365 120
|
29天前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
79 4
|
1月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
132 5
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
115 1
|
1月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
178 1
|
1月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
126 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
129 1