【Java SE】对象的构造及初始化

简介: 【Java SE】对象的构造及初始化

1、利用构造方法初始化

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

1. 
2. public class Student {
3.     String name;
4. // 无参构造方法(没有参数的构造方法)
5. public Student() {
6. this("张三");
7.     }
8. // 有参构造方法
9. public Student(String name) {
10. this.name = name;
11.     }
12. // 输出name和age
13. public void print() {
14.         System.out.println("姓名:" + name);
15.     }
16. public static void main(String[] args) {
17. Student stu = new Student();
18.         stu.print();
19.     }
20. }

注意:

构造方法:名字与类名相同,没有返回值类型,设置为void也不行
一般情况下使用public修饰
在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次

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

构造方法的特性:

1. 名字必须与类名相同
2. 没有返回值类型,设置为void也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)如上面的代码的无参和有参构造方法就构成了重载。

如果在类中自己没有定义任何构造方法,编译器会默认生成一个不带参数的构造方法。

但是如果自己定义了构造方法,则系统不会再生成,需要自己构造完善。

(当我们构造了带参数的构造方法的时候一定要去构造一个不带参数的构造方法,否则会出错)

另外在构造方法中,可以通过this调用其他构造方法来简化代码

也就是在博主的这篇文章中说的this()访问构造方法:【Java SE】this引用注意事项

1. 
2. public class Student {
3.     String name;
4. // 无参构造方法(没有参数的构造方法)
5. public Student() {
6. this("张三");
7.     }
8. // 有参构造方法
9. public Student(String name) {
10. this.name = name;
11.     }
12. // 输出name和age
13. public void print() {
14.         System.out.println("姓名:" + name);
15.     }
16. public static void main(String[] args) {
17. Student stu = new Student();
18.         stu.print();
19.     }
20. }

这里注意:
1、this(...)必须是构造方法中第一条语句
2、不能形成循环(也就是说不能在构造方法之间来回循环调用)

绝大多数情况下使用public来修饰,特殊场景下会被private修饰

2、利用默认初始化

我们知道局部变量在使用时必须要初始化,不进行初始化就会报错,而成员变量可以不用呢?

原因在于对象空间被申请好之后,对象中包含的成员已经设置好了初始值,比如:

3、就地初始化

就地初始化就是在定义成员变量的时候直接进行初始化操作:

1. 
2. public class Student {
3.     String name="张三";
4. 
5. // 输出name和age
6. public void print() {
7.         System.out.println("姓名:" + name);
8.     }
9. public static void main(String[] args) {
10. Student stu = new Student();
11.         stu.print();
12.     }
13. }

注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造方法中(这里这个程序是系统默认的构造方法)


相关文章
|
3天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
14 3
|
3天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
3天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
3天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
12 3
|
3天前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
12 1
|
1天前
|
Java
Java一分钟:线程协作:wait(), notify(), notifyAll()
【5月更文挑战第11天】本文介绍了Java多线程编程中的`wait()`, `notify()`, `notifyAll()`方法,它们用于线程间通信和同步。这些方法在`synchronized`代码块中使用,控制线程执行和资源访问。文章讨论了常见问题,如死锁、未捕获异常、同步使用错误及通知错误,并提供了生产者-消费者模型的示例代码,强调理解并正确使用这些方法对实现线程协作的重要性。
9 3
|
1天前
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
12 2
|
1天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
10 3
|
1天前
|
安全 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第11天】在Java并发编程中,线程安全和性能优化是两个重要的主题。本文将深入探讨这两个方面,包括线程安全的基本概念,如何实现线程安全,以及如何在保证线程安全的同时进行性能优化。我们将通过实例和代码片段来说明这些概念和技术。
2 0