JAVASE:面向对象
JavaSE 面向对象编程核心概念总结
一、设计对象并使用
核心思想:将现实世界的事物抽象为类,通过类创建对象,调用对象的属性和方法。
示例:设计一个Student
类
// 定义类
public class Student {// 属性String name;int age;// 方法public void study() {System.out.println(name + "正在学习");}
}// 创建并使用对象
Student s = new Student();
s.name = "张三";
s.study(); // 输出:张三正在学习
二、封装(Encapsulation)
核心思想:将数据(属性)和操作(方法)绑定在一起,隐藏内部实现细节,仅对外提供公共访问接口。
实现方式:
- 使用
private
修饰属性,限制直接访问。 - 提供
public
的getter/setter
方法访问和修改属性。
示例:
public class Student {private String name; // 私有属性// getter方法public String getName() {return name;}// setter方法public void setName(String name) {this.name = name; // this关键字区分成员变量和局部变量}
}
三、this
关键字
作用:
- 引用当前对象:区分成员变量和局部变量(同名时)。
- 调用构造方法:在构造方法中调用其他构造方法(必须位于第一行)。
示例:
public class Student {private String name;// 构造方法public Student(String name) {this.name = name; // this引用当前对象的属性}// 重载构造方法public Student() {this("默认名称"); // 调用另一个构造方法}
}
四、构造方法(Constructor)
特点:
- 方法名与类名相同。
- 没有返回类型(连
void
都没有)。 - 用于初始化对象的状态。
分类:
- 无参构造:默认提供,若自定义构造方法则消失。
- 有参构造:通过参数初始化属性。
示例:
public class Student {private String name;private int age;// 无参构造public Student() {}// 有参构造public Student(String name, int age) {this.name = name;this.age = age;}
}
五、标准JavaBean(POJO)
定义:符合特定规范的Java类,必须包含:
- 私有属性。
- 无参构造方法。
- 公共的
getter/setter
方法。 - 可选:
toString()
、equals()
、hashCode()
方法。
示例:
public class User {// 私有属性private String username;private int age;// 无参构造public User() {}// 有参构造public User(String username, int age) {this.username = username;this.age = age;}// getter/setterpublic String getUsername() { return username; }public void setUsername(String username) { this.username = username; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }// 重写toString@Overridepublic String toString() {return "User{username='" + username + "', age=" + age + "}";}
}
六、对象内存图(简化版)
示例代码:
Student s1 = new Student("张三", 20);
Student s2 = s1;
s2.setName("李四");
System.out.println(s1.getName()); // 输出:李四
内存分布:
- 栈内存:存储局部变量(如
s1
、s2
),指向堆内存中的对象。 - 堆内存:存储对象实例(包括属性值)。
- 方法区:存储类的信息(如方法字节码)。
关键点:
s1
和s2
指向同一个对象,修改s2
会影响s1
。
七、成员变量 vs 局部变量
对比项 | 成员变量 | 局部变量 |
---|---|---|
定义位置 | 类中,方法外 | 方法内或代码块内 |
存储位置 | 堆内存(对象中) | 栈内存(方法栈帧中) |
生命周期 | 随对象创建而存在,随对象销毁而消失 | 随方法调用而存在,方法结束后消失 |
默认值 | 有默认值(如0 、null ) | 无默认值,必须先赋值后使用 |
访问修饰符 | 可使用private 、public 等 | 不可使用 |
八、常见面试问题
-
封装的意义是什么?
- 隐藏实现细节,保护数据安全,提高代码可维护性。
-
this
关键字的作用?- 引用当前对象,调用构造方法。
-
构造方法的特点?
- 方法名与类名相同,无返回类型,用于初始化对象。
-
成员变量和局部变量的区别?
- 见上表。
-
JavaBean的规范是什么?
- 私有属性、无参构造、
getter/setter
、可选重写toString
等。
- 私有属性、无参构造、
九、最佳实践
- 封装优先:所有属性都应使用
private
修饰,通过getter/setter
访问。 - 构造方法重载:提供无参和有参构造,方便对象创建。
- IDE工具:使用IDE自动生成
getter/setter
、构造方法和toString
。 - 内存意识:避免对象引用的意外修改(如通过
clone()
或不可变类)。