编程自学指南:java程序设计开发,Java “new” 关键字创建对象详解课件
一、课程信息
学习目标
- 理解 “new” 关键字在创建对象中的作用和原理。
- 掌握使用 “new” 关键字创建不同类型对象的方法。
- 了解构造方法在对象创建过程中的重要性。
- 能够运用 “new” 关键字解决实际编程中的对象创建问题。
二、课程导入
生活实例引入
- 以购买手机为例,每一部手机可以看作是一个对象,而手机的设计蓝图就像是 Java 中的类。当我们去商店购买手机时,就相当于使用 “new” 关键字根据设计蓝图创建了一个具体的手机对象。
- 提问学生生活中还有哪些类似创建具体事物的例子,引导他们思考对象创建的概念。
三、“new” 关键字基础概念
什么是 “new” 关键字
- 在 Java 中,“new” 关键字是用于创建对象的核心工具。它的主要作用是在内存中为对象分配空间,并调用相应的构造方法来初始化对象。
“new” 关键字的基本语法
类名 对象名 = new 类名();
// 定义一个简单的类
class Person {
String name;
int age;
}
// 使用 new 关键字创建 Person 对象
Person person = new Person();
- 解释:这里 “Person” 是类名,“person” 是对象名,“new Person ()” 表示创建一个 Person 类的对象。
四、构造方法
构造方法的定义和作用
- 构造方法是一种特殊的方法,它的名称必须与类名相同,并且没有返回类型(连 “void” 都不写)。构造方法的主要作用是在创建对象时对对象进行初始化。
无参构造方法
- 当类中没有显式定义构造方法时,Java 会自动提供一个无参构造方法。
class Dog {
String breed;
int age;
// 自动生成的无参构造方法
// public Dog() {}
}
// 使用无参构造方法创建对象
Dog dog = new Dog();
- 解释:虽然代码中没有写无参构造方法,但 Java 会默认提供一个,使得我们可以使用 “new Dog ()” 来创建对象。
有参构造方法
- 我们也可以自己定义构造方法,并且可以带有参数,这样在创建对象时就可以传入相应的值进行初始化。
class Cat {
String name;
int age;
// 有参构造方法
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
}
// 使用有参构造方法创建对象
Cat cat = new Cat("Tom", 2);
- 解释:“this” 关键字用于区分成员变量和局部变量,这里的 “this.name” 指的是类的成员变量,而 “name” 是构造方法的参数。
构造方法的重载
- 构造方法也可以进行重载,即一个类可以有多个构造方法,它们的参数列表不同。
class Book {
String title;
String author;
double price;
// 无参构造方法
public Book() {
title = "Unknown";
author = "Unknown";
price = 0.0;
}
// 有一个参数的构造方法
public Book(String title) {
this.title = title;
author = "Unknown";
price = 0.0;
}
// 有三个参数的构造方法
public Book(String title, String author, double price) {
this.title = title;
this.author = author;
this.price = price;
}
}
// 使用不同的构造方法创建对象
Book book1 = new Book();
Book book2 = new Book("Java Programming");
Book book3 = new Book("Effective Java", "Joshua Bloch", 59.99);
- 解释:根据传入的参数不同,Java 会自动调用相应的构造方法来创建对象。
五、“new” 关键字创建对象的过程
内存层面的理解
- 类加载:当使用 “new” 关键字创建对象时,Java 虚拟机(JVM)会首先检查该类是否已经被加载到内存中。如果没有加载,JVM 会通过类加载器将该类的字节码文件加载到内存中。
- 分配内存:在类加载完成后,JVM 会在堆内存中为对象分配足够的空间,用于存储对象的成员变量。
- 初始化成员变量:对象的成员变量会被赋予默认值,例如,数值类型为 0,布尔类型为 false,引用类型为 null。
- 调用构造方法:JVM 会调用相应的构造方法,对对象的成员变量进行初始化,使其具有合适的初始值。
- 返回对象引用:构造方法执行完毕后,JVM 会返回一个指向该对象的引用,我们可以使用这个引用对对象进行操作。
示例代码分析
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
// 创建 Student 对象
Student student = new Student("Alice", 20);
六、实际案例应用
案例一:银行账户管理系统
// 定义银行账户类
class BankAccount {
String accountNumber;
double balance;
// 有参构造方法
public BankAccount(String accountNumber, double initialBalance) {
this.accountNumber = accountNumber;
this.balance = initialBalance;
}
// 存款方法
public void deposit(double amount) {
balance += amount;
System.out.println("存款 " + amount + " 元,当前余额:" + balance + " 元");
}
// 取款方法
public void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
System.out.println("取款 " + amount + " 元,当前余额:" + balance + " 元");
} else {
System.out.println("余额不足,无法取款。");
}
}
}
// 主类,用于测试
public class BankSystem {
public static void main(String[] args) {
// 创建银行账户对象
BankAccount account = new BankAccount("123456789", 1000.0);
// 进行存款和取款操作
account.deposit(500.0);
account.withdraw(200.0);
}
}
- 详细解释代码中 “new” 关键字的使用,以及构造方法在初始化账户信息中的作用。让学生理解如何通过 “new” 关键字创建对象并进行相应的操作。
案例二:图形绘制系统
// 定义圆形类
class Circle {
double radius;
final double PI = 3.14159;
// 有参构造方法
public Circle(double radius) {
this.radius = radius;
}
// 计算面积的方法
public double calculateArea() {
return PI * radius * radius;
}
}
// 主类,用于测试
public class DrawingSystem {
public static void main(String[] args) {
// 创建圆形对象
Circle circle = new Circle(5.0);
// 计算并输出圆形的面积
double area = circle.calculateArea();
System.out.println("半径为 " + circle.radius + " 的圆形面积为:" + area);
}
}
- 同样,详细解释代码中对象的创建过程,以及构造方法如何接收半径参数并初始化对象。
七、课堂练习
练习一
- 定义一个 “Rectangle” 类,包含长和宽两个属性,以及一个有参构造方法用于初始化长和宽。同时,提供一个计算矩形面积的方法。在主类中使用 “new” 关键字创建一个矩形对象,并调用计算面积的方法输出结果。
练习二
- 定义一个 “Employee” 类,包含员工姓名、工号和月薪三个属性。提供无参构造方法和有参构造方法,无参构造方法将员工姓名设为 “Unknown”,工号设为 “000”,月薪设为 0.0;有参构造方法用于传入具体的姓名、工号和月薪进行初始化。在主类中分别使用无参构造方法和有参构造方法创建员工对象,并输出他们的信息。
八、课程总结
知识回顾
- 回顾 “new” 关键字的作用和基本语法。
- 强调构造方法在对象创建和初始化过程中的重要性。
- 总结使用 “new” 关键字创建对象的步骤和内存层面的理解。
常见问题解答
口诀总结
- “new 关键字真奇妙,创建对象不可少。构造方法来初始化,对象使用没烦恼。”
九、课后作业
作业一
- 定义一个 “Vehicle” 类,包含品牌、型号和价格三个属性。提供无参构造方法和有参构造方法,以及相应的 getter 和 setter 方法。在主类中创建多个不同的 “Vehicle” 对象,并输出它们的信息。
作业二
- 思考如果一个类中既有有参构造方法又没有显式定义无参构造方法,会出现什么问题?如何解决?