Java SE:类与对象的认识
Java中的类与对象:构建程序世界的基石
在Java编程的世界里,类与对象是面向对象编程(OOP)的核心概念,它们就像构建大厦的砖瓦,支撑起整个程序的结构。理解类与对象,是掌握Java编程的关键一步。
类:对象的模板
类是对一类事物的抽象描述,它定义了这类事物所具有的属性和行为。比如说,我们可以定义一个“汽车”类,这个类就包含了汽车的属性,像颜色、品牌、型号等,还有汽车的行为,比如启动、加速、刹车等。
类的定义包含两个主要部分:成员变量(属性)和成员方法(行为)。成员变量用于描述对象的状态,成员方法用于描述对象的操作。例如,定义一个“Person”类:
public class Person {// 成员变量(属性)String name;int age;String gender;// 成员方法(行为)public void eat() {System.out.println(name + "在吃饭");}public void sleep() {System.out.println(name + "在睡觉");}
}
在这个“Person”类中,name、age、gender是成员变量,代表了人的姓名、年龄和性别这些属性;eat()和sleep()是成员方法,代表了人吃饭和睡觉这些行为。
对象:类的实例化
对象是类的具体实例,是根据类这个模板创建出来的具体事物。如果说类是“汽车设计图”,那么对象就是根据设计图制造出来的“具体汽车”。
在Java中,创建对象需要使用new关键字。例如,根据上面的“Person”类创建对象:
public class Main {public static void main(String[] args) {// 创建Person类的对象Person person1 = new Person();// 给对象的属性赋值person1.name = "张三";person1.age = 20;person1.gender = "男";// 调用对象的方法person1.eat();person1.sleep();Person person2 = new Person();person2.name = "李四";person2.age = 25;person2.gender = "女";person2.eat();person2.sleep();}
}
在这段代码中,person1和person2都是“Person”类的对象。我们通过“对象名.属性名”的方式给对象的属性赋值,通过“对象名.方法名()”的方式调用对象的方法。运行这段代码,会输出:
张三在吃饭
张三在睡觉
李四在吃饭
李四在睡觉
类与对象的关系
类和对象是相互依存的关系。类是对象的抽象,它规定了对象所具有的属性和行为;而对象是类的具体实现,一个类可以创建出多个不同的对象,这些对象都具有类中定义的属性和行为,但属性的值可能不同。
就像“Person”类可以创建出“张三”“李四”等多个不同的人对象,他们都有人的姓名、年龄等属性和吃饭、睡觉等行为,但具体的姓名、年龄等数值却各不相同。
补充知识:this关键字、构造函数与包
this关键字
在Java中,this
关键字是一个非常重要的引用,它代表当前对象本身。主要有以下几种常见用法:
- 区分成员变量和局部变量:当方法中的局部变量与类的成员变量同名时,使用
this
可以明确表示是访问成员变量。例如:
public class Person {String name;public void setName(String name) {this.name = name; // this.name表示成员变量,name表示局部变量}
}
- 调用类中的其他方法:可以在一个成员方法中使用
this
调用本类的其他成员方法,通常可以省略this
,但在某些情况下为了清晰表达会显式写出。例如:
public class Person {public void eat() {System.out.println("吃饭");}public void dinner() {this.eat(); // 调用本类的eat()方法}
}
- 调用类的构造函数:在构造函数中,可以使用
this(参数列表)
来调用本类的其他构造函数,且必须放在构造函数的第一行。
构造函数
构造函数是一种特殊的方法,它的名称与类名完全相同,且没有返回值类型(包括void也不能有)。构造函数的主要作用是在创建对象时初始化对象的属性。
- 默认构造函数:如果一个类中没有显式定义任何构造函数,Java编译器会自动为该类生成一个无参的默认构造函数。例如:
public class Person {// 没有显式定义构造函数,编译器会生成默认无参构造函数
}
- 自定义构造函数:我们可以根据需求自定义构造函数,实现对象属性的初始化。例如:
public class Person {String name;int age;// 无参构造函数public Person() {}// 有参构造函数,初始化name属性public Person(String name) {this.name = name;}// 有参构造函数,初始化name和age属性public Person(String name, int age) {this.name = name;this.age = age;}
}
当创建对象时,会根据传入的参数自动调用对应的构造函数:
Person person1 = new Person(); // 调用无参构造函数
Person person2 = new Person("张三"); // 调用单参构造函数
Person person3 = new Person("李四", 25); // 调用双参构造函数
包
包(Package)是Java中用于组织类和接口的一种机制,它的主要作用是避免类名冲突,同时便于对类进行分类管理。
-
包的声明:在Java源文件的第一行,使用
package
关键字声明该类所在的包,格式为package 包名;
。包名通常采用小写字母,一般按照公司域名的反写来命名,例如com.example.demo
。 -
导入包中的类:当需要使用其他包中的类时,需要使用
import
关键字导入该类。例如,要使用java.util
包中的ArrayList
类,可以这样导入:
import java.util.ArrayList;
如果需要导入一个包中的所有类,可以使用*
通配符,例如import java.util.*;
。
- 包的访问权限:类中的成员(成员变量和成员方法)的访问权限会受到包的影响。被
default
(默认,即不写访问修饰符)修饰的成员,只能被同一个包中的类访问。
总结
类与对象是Java面向对象编程的基础,类定义了对象的蓝图,对象是类的具体体现。而this关键字、构造函数和包则是在类与对象的基础上,为Java编程提供了更灵活、更规范的实现方式。通过类与对象的封装,以及这些补充知识的运用,我们可以将数据和操作数据的方法结合在一起,提高代码的复用性和可维护性。
在实际的Java编程中,我们会大量使用类与对象来构建程序,理解并熟练运用它们以及相关知识,是成为一名优秀Java程序员的必经之路。