一、前言
本文内容摘自《深入理解Java核心技术:写给Java工程师的干货笔记(基础篇)》一书,2022年出版,作者 张洪亮(@Hollis),阿里巴巴技术专家,著有《Java工程师成神之路》系列文章,《Java工程师成神之路》电子书已开源,可在阿里云开发者社区免费下载。书籍内容比电子书内容要丰富,内容有修改,有需要的读者可以购买正版书籍。
【如何成神:先搬砖,再砌砖,后造砖!】
本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!
《Java工程师成神之路》下载地址为:
https://developer.aliyun.com/ebook/395?spm=a2c6h.20345107.ebook-index.24.4c927863j10ats
二、第2章 面向对象的核心概念【构造函数、变量】
1、构造函数
构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符在创建对象的语句中一起使用。
【构造函数举例(非书中例子)】
核心代码:
/**
* 构造函数样例
*/
public class ConstructorApp {
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private int age;
/**
* 手机号
*/
private String phoneNumber;
/**
* 无参构造函数,手动添加
*/
public ConstructorApp() {
}
/**
* 带参构造函数:1个参数(String)
* @param name 姓名
*/
public ConstructorApp(String name) {
this.name = name;
}
/**
* 带参构造函数:2个参数(String, int)
* @param name 姓名
* @param age 年龄
*/
public ConstructorApp(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 带参构造函数:2个参数(String, String)
* @param name 姓名
* @param phoneNumber 手机号
*/
public ConstructorApp(String name, String phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
public static void main(String[] args) {
//实例化对象:无参数
ConstructorApp app1 = new ConstructorApp();
System.out.println("**********分割线1**********");
System.out.println(app1);
System.out.println("**********分割线2**********");
//实例化对象:1个参数(String)
ConstructorApp app2 = new ConstructorApp("老王很棒");
System.out.println(app2.name);
System.out.println("**********分割线3**********");
//实例化对象:2个参数(String, int)
ConstructorApp app3 = new ConstructorApp("张三", 18);
System.out.println(app3.name + " " + app3.age);
System.out.println("**********分割线4**********");
//实例化对象:2个参数(String, String)
ConstructorApp app4 = new ConstructorApp("李四", "1008611");
System.out.println(app4.name + " " + app4.phoneNumber);
}
}
运行结果:
**********分割线1**********
cn.zhuangyt.javabase.object_oriented_core.constructor.ConstructorApp@85ede7b
**********分割线2**********
老王很棒
**********分割线3**********
张三 18
**********分割线4**********
李四 1008611
Process finished with exit code 0
一个类可以有多个构造函数,可根据参数个数的不同或参数类型的不同来区分,即构造函数的重载。
构造器没有返回类型,不会被继承,且可以有范围修饰符。
构造器的函数名称必须和它所属的类的名称相同, 它承担着初始化对象数据成员的任务。
当编写一个可实例化的类时,如果没有专门编写构造函数,在默认情况下,一个Java类中会自动生成一个默认无参构造函数。默认构造函数一般会把成员变量的值初始化为默认值,如 int ->0,Integer -> null。
如果手动在类中定义了有参构造函数,那么这个默认的无参构造函数就不会自动添加了,而是需要手动创建。如图所示:
2、变量
Java 中共有三种变量,分别是类变量
、成员变量
和局部变量
,它们分别存放在 JVM的方法区、堆内存和栈内存中。
/**
* 变量
*/
public class Variables {
/**
* 类变量:a
*/
private static int a;
/**
* 成员变量:b
*/
private int b;
/**
* 局部变量:c、d
* @param c
*/
public void test(int c) {
int d;
}
}
- 变量a:类变量,保存在方法区中。
- 变量b:成员变量,和对象一起保存在堆内存中(不考虑栈上分配的情况)。
- 变量c和d:局部变量,保存在栈内存中。