Java是一门面向对象语言,一个Java程序就是一系列对象(Object)的集合,对象通过方法调用来彼此协作完成特定的功能。
初识面向对象
面向对象是一种非常符合人类思维的编程方法,因为现实世界就是由对象和对象之间的交互来构成的,所以我们其实很容易将现实世界映射到软件开发中。
一辆汽车、一篇博客、一个人,对应到软件系统中都是一个对象;而对象具有自己的状态和行为。
以汽车为例:
- 一辆汽车可以拥有油耗、颜色、轴距、速度等状态属性
- 一辆汽车可以拥有启动、行驶、加减速、刹车等方法
类
类描述一类对象的状态和行为的模板。可以把类想象成一个汽车设计图,根据这个汽车设计图生产出来的每一辆汽车就是类的一个实例,这些实例就称之为对象。
public class Car {
int color; // 成员变量
int speed; // 成员变量
// 成员方法
void startup() {
System.out.println("启动!");
}
// 成员方法
void run(int speed) {
System.out.println("我的速度是" + speed);
}
}
再比如说我们要做一个博客应用,那么每一篇博客都有类似的状态和行为,那么我们可以定义一个Post
类作为这些博客的模板。
public class Post {
String title; // 成员变量
String content; // 成员变量
// 成员方法
void print() {
System.out.println(title);
System.out.println(content);
}
}
public
是一个修饰符,表示外部可以访问这个类。
Post
的状态和行为就分别体现为内部定义的成员变量和成员方法上。
成员变量
一个对象的状态是通过成员变量的值决定的。
比如每一辆汽车都有自己的颜色和速度,因此我们在Car
类中定义了两个成员变量,通常我们也称之为属性:
int color;
int speed;
成员变量都有数据类型,color
和speed
都是int
类型,即一个整数。
类似地,每一篇博客都有它自己的标题和内容,因此我们在Post
类中定义了两个成员变量:
String title;
String content;
title
和content
都是String
类型的属性,即通过一个字符串来表示。
成员方法
方法定义了类的行为,一个类可以有很多方法,在方法中可以编写逻辑,操纵数据,执行特定动作。有时也称方法为函数。
一个相对独立的计算过程(即对象的某种行为),通过一个方法来完成,在需要的时候即可复用这样的过程,这样可以使得程序更细清晰易懂。
比如Car
有一个命名为startup()
的方法,表示汽车启动:
void startup() {
System.out.println(“启动!”);
}
这个方法向控制台打印一行简单的文字。
Post
类提供了一个打印博客内容的方法:
void print() {
System.out.println(title);
System.out.println(content);
}
print()
方法将一个Post
的title
和content
逐行打印出来。
startup()
和print()
方法是一个没有返回值和参数的方法。没有返回值的情况,使用void
表示。
创建和使用对象
以HelloWorld为例,定义好Post
类之后,可以在main
方法中来创建和使用Post
对象。
public class HelloWorld {
public static void main(String[] args) {
Post post = new Post(); // 创建博客对象
post.title = "博客"; // 访问对象属性
post.content = "第一篇博客"; // 访问对象属性
post.print(); // 调用对象方法
}
}
需要给声明对象的类型为Post
,并进行命名,代码中命名为post
(post
就是一个标识符);然后需要使用new
关键字创建Post
对象。
这里创建的post
变量是函数内的局部变量,也可以命名为其它任何合法的标识符,比如:
Post myPost = new Post();
变量一般都是以小写开头,使用驼峰命名。
局部变量与成员变量不同,它不属于某个对象,是一个临时变量,当方法执行结束,变量就不再起作用了。一个方法中声明的变量都属于局部变量。
现在已经有一个Post
对象了,可以访问其属性和方法, 使用.
连接对象名和属性/方法名:
post.title = "博客"
对post
对象的title
属性进行赋值。post.print()
这一行代码调用post
对象的print()
函数。
运行程序可以看到下面的输出:
博客
第一篇博客
包(package)
在开发过程中,类的数量会越来越多,可以通过包(Package)来组织类。包的命名一般以一个组织的域名的反写开头。