Java: 面向对象
·
一、类与对象的基本概念
- 类:抽象的模板,定义对象的属性和行为(如
Cat类) - 对象:类的具体实例,通过
new关键字创建(如new Cat())
二、类的成员组成
1. 属性(成员变量)
-
对象属性(非静态):属于对象,每个对象独立拥有
public int age; // 每个对象有自己的age -
类属性(静态,
static修饰):属于类,所有对象共享public static int weight; // 所有对象共享同一个weight
2. 方法
(1)对象方法(非静态方法)
- 无
static修饰,属于对象 - 可直接调用对象方法和类方法
public void run() { System.out.println("跑步"); eat(); // 调用其他对象方法 jump(); // 调用类方法 } public void eat() { System.out.println("吃饭"); }
(2)类方法(静态方法)
- 用
static修饰,属于类 - 不能直接调用对象方法(需先创建对象)
public static void jump() { System.out.println("跳跃"); // fly(); // 错误:不能直接调用对象方法 // 正确方式:创建对象后调用 Cat cat = new Cat(); cat.eat(); }
(3)方法调用规则
| 方法类型 | 可调用的方法 |
|---|---|
| 对象方法 | 对象方法、类方法 |
| 类方法 | 仅类方法(需创建对象才能调用对象方法) |
3. 方法重载
- 定义:方法名相同,参数列表不同(数量、类型、顺序)
- 作用:同一功能的不同实现,方便调用
// 重载示例:加法运算 public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; }
4. 构造方法
- 特点:与类名同名,无返回值,用于初始化对象
- 规则:可重载(通过参数列表区分),若未定义,编译器自动生成无参构造
public class Cat { private String name; // 无参构造 public Cat() {} // 有参构造(重载) public Cat(String name) { this.name = name; // this表示当前对象 } }
5. 代码块
-
静态代码块:类加载时执行(仅一次),用于初始化静态成员
static { System.out.println("静态代码块执行"); } -
构造代码块:创建对象时执行(在构造方法前),提取构造方法公共逻辑
{ System.out.println("构造代码块执行"); }
三、对象初始化顺序
1. 单一类(无继承)
静态内容(静态属性/静态代码块)→ 非静态内容(对象属性/构造代码块)→ 构造方法
(注:同类内容按定义顺序执行)
2. 继承关系中
父类静态内容 → 子类静态内容 → 父类非静态内容 → 父类构造方法 → 子类非静态内容 → 子类构造方法
示例验证:
class Parent {
static { System.out.println("父类静态代码块"); }
{ System.out.println("父类构造代码块"); }
public Parent() { System.out.println("父类构造方法"); }
}
class Child extends Parent {
static { System.out.println("子类静态代码块"); }
{ System.out.println("子类构造代码块"); }
public Child() { System.out.println("子类构造方法"); }
}
// 输出顺序:父静 → 子静 → 父非静 → 父构造 → 子非静 → 子构造
四、核心关键字
1. static
- 修饰内容:属性、方法、代码块
- 核心特点:
- 属于类,不依赖对象
- 可通过类名直接访问(
类名.静态成员) - 静态方法中无
this关键字,不能直接访问非静态成员
2. this
- 作用:引用当前对象
- 用法:
public class Dog { private String name; // 访问当前对象属性 public void setName(String name) { this.name = name; // this.name指对象属性,name指参数 } // 调用当前对象方法 public void eat() { this.run(); // 调用本类的run()方法 } // 调用本类其他构造方法(必须在第一行) public Dog(String name, int age) { this(name); // 调用单参数构造方法 } public Dog(String name) { this.name = name; } }
更多推荐
所有评论(0)