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

目录
相关文章
|
5天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
10 0
|
4天前
|
存储 缓存 监控
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
16 0
|
4天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
12 1
|
5天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
13 1
|
6天前
|
Java 调度
Calendar类在Java中的应用
Calendar类在Java中的应用
|
10天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
4天前
|
存储 运维 前端开发
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
15 0
|
4天前
|
安全 Java 数据处理
Java面试题:什么是Java中的Optional类及其使用场景?
Java面试题:什么是Java中的Optional类及其使用场景?
8 0
|
4天前
|
前端开发 Java 编译器
Java面试题:描述Java类的加载过程,包括加载、链接、初始化等阶段。
Java面试题:描述Java类的加载过程,包括加载、链接、初始化等阶段。
8 0
|
4天前
|
存储 缓存 算法
Java面试题:给出代码优化的常见策略,如减少对象创建、使用缓存等。
Java面试题:给出代码优化的常见策略,如减少对象创建、使用缓存等。
6 0