Java是一种广泛使用的面向对象编程语言,其核心设计原则之一就是"万物皆对象"。面向对象编程(Object-Oriented Programming, OOP)是相对于面向过程编程的一种编程范式,它强调将数据和操作数据的函数封装在一起,形成独立的对象。
在Java中,对象是类的实例,类是对具有共同特征和行为的事物的抽象。对象包含两大部分:属性(或称为字段、成员变量),用于描述对象的状态;以及方法(或称为成员函数),定义了对象能够执行的操作。属性和方法的组合形成了对象的内部结构,而对外界来说,对象的行为表现为方法的调用。
面向对象编程的主要优点包括:
1. 封装:隐藏对象的内部实现细节,只暴露出必要的接口供外部调用,提高了代码的安全性和可维护性。
2. 继承:一个类可以继承另一个类的属性和方法,减少了代码的重复,增强了代码的复用性。
3. 多态:同一种行为在不同对象上有不同的表现形式,提供了灵活的扩展能力。
Java中定义类的语法是`class ClassName { ... }`,实例变量是类中的变量,它们在对象创建时初始化。局部变量则是在方法内部声明的,它们的生命周期仅限于所在的方法,且需要先赋值后使用。类方法包括普通方法和构造方法,构造方法用于初始化新创建的对象,其名称与类名相同,且没有返回值。
创建对象的语句如`Student s = new Student();`,这里的`s`是对象引用,存储的是对象在内存中的地址。对象的实际内容存储在堆内存中,引用变量则存在于栈内存中。可以有多个构造方法,只要它们的参数列表不同(数量或类型),就是不同的重载构造方法。
重载是面向对象编程中的一个重要特性,允许在一个类中定义多个同名方法,只要它们的参数列表不同即可。重载方法在编译时通过匹配最佳匹配的函数签名来决定调用哪个方法,与运行时类型无关。
练习示例:
```java
public class Person {
private String name;
// 无参构造方法
public Person() {
this.name = "John Doe";
}
// 有参构造方法
public Person(String name) {
this.name = name;
}
public void setName(String newName) {
this.name = newName;
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("Jane");
System.out.println(p1.getName()); // 输出: John Doe
System.out.println(p2.getName()); // 输出: Jane
changeName(p1);
System.out.println(p1.getName()); // 输出: LUCY
}
// 静态方法,传入对象引用
public static void changeName(Person p) {
p.setName("LUCY");
}
}
```
在这个例子中,我们定义了一个`Person`类,包含两个构造方法,一个无参,一个带参。`main`方法创建了两个`Person`对象,并通过调用`setName`方法改变了对象的属性。`changeName`静态方法接收`Person`对象的引用,改变了对象的`name`属性,展示了对象引用传递的特性。