面向对象基础
1. 类和对象
(1) 示例:
public class Student {String name = "张三";int age = 23;public void study() {System.out.println("学习 Java");}public void eat() {System.out.println("吃饭");}
}
public class Test {public static void main(String[] args) {Student stu = new Student(); // 创建对象stu.study(); // 使用对象的成员方法stu.eat(); // 使用对象的成员方法}
}
(2) 自动对齐快捷键
打开需要格式化的 Java 文件后,按下快捷键:
- Windows/Linux:
Ctrl + Alt + L
(3) private 关键字
作用:private 可以修饰成员(成员变量和成员方法),作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问。
使用:针对private修饰的成员变量,如果需要被其他类使用,应提供相应的操作。
(1)提供 get 变量名() 方法,用于获取成员变量的值,方法用public修饰;
(2)提供 set 变量名(参数)方法,用于设置成员变量的值,方法用public修饰。
示例:
public class GirlFriend {private String name;private int age;private String gender;public void setName(String n) {name = n;}public String getName() {return name;}
}
Q1:为什么方法前没有 static
修饰?
- 定义:
static
修饰的成员(变量或方法)属于类本身,而非类的实例(对象)。 setName
和getName
操作的是对象的非静态成员变量name
(每个对象的name
是独有的),必须通过对象实例调用,因此不能用static
修饰。
Q2:setter 与 getter 方法的设计逻辑
setter 方法(如
setName
):
作用是设置成员变量的值,通常接收参数并赋值,无需返回结果,因此用void
,且无static
(依赖对象实例)。getter 方法(如
getName
):
作用是获取成员变量的值,需要将值返回给调用者,因此必须指定返回值类型(与成员变量类型一致),且无static
(依赖对象实例)。
Q3:为什么使用 name = n?
name
是类中定义的成员变量(属于对象的属性),作用域是整个类。n
是方法setName
的参数变量,作用域仅限于当前方法内部。
这句代码的意思是:把外部传入的参数n
的值,保存到当前对象的name
成员变量中。
(4) this 关键字
- 用来解决局部变量与成员变量同名的问题,明确区分两者。
public class Student {String name;public void setName(String name) {this.name = name; // 使用 this 关键字来区分成员变量和局部变量}
}
2. 构造方法
(1) 定义:构造方法用于初始化对象的成员变量。构造方法的名称必须与类名相同,且没有返回值类型。
(2) 注意事项:
① 构造方法的创建:如果没有定义构造方法,系统将给出一个默认的无参数构造方法;如果定义了构造方法,系统将不再提供默认的构造方法。
② 构造方法的重载:如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法。
public class Student {String name;int age;public Student() { // 无参数构造方法this.name = "默认";this.age = 18;}public Student(String name, int age) { // 带参数构造方法this.name = name;this.age = age;}
}
③ 推荐的使用方式:无论是否使用,都手工书写无参数构造方法。
3. JavaBean 的规范
(1) 类的访问权限:public 修饰
(2) 成员变量:私有(private)封装
(3) 访问方法:提供公共的 getter 和 setter
(4) 构造方法:必须包含无参数构造
4. 成员变量和局部变量
(1) 成员变量:类中方法外的变量。
(2) 局部变量:类中方法中的变量。
(3) 成员变量和局部变量的区别: