ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java 面向对象基础:类、对象、封装与构造方法全解析

Java 面向对象基础:类、对象、封装与构造方法全解析 前言这篇笔记覆盖类与对象、封装、方法、构造方法、this 关键字五个核心点每个知识点都配代码和我的理解。期待和你的一起进步一、面向对象思想1.1 什么是面向对象面向对象OOP是一种以对象为中心的编程思想。它不是 Java 独有的而是一种看待问题的方式先找东西再看东西能干什么最后让东西之间互相配合。1.2 面向过程 vs 面向对象对比项面向过程面向对象核心步骤对象关注点先做什么再做什么有哪些东西它们能做什么代码组织函数 函数调用类 对象 方法典型语言CJava、C、Python举个例子洗衣服面向过程放水 → 放衣服 → 放洗衣液 → 洗 → 脱水 → 晾面向对象人对象→ 洗衣机对象→ 衣服对象人把衣服放进洗衣机洗衣机负责洗1.3 我的理解面向对象不是不写步骤了而是把步骤封装到对象里。你调用洗衣机.洗(衣服)至于里面怎么转、怎么排水你不用管。核心一句话面向对象 找对象 用对象 让对象协作。二、类和对象的关系2.1 类是什么类Class是对象的模板是对一类事物的抽象描述。比如学生是一个类它描述了学生有姓名、年龄、学号属性学生能学习、考试方法。2.2 对象是什么对象Object是类的具体实例。张三是学生这个类的一个具体对象他有具体的姓名、年龄、学号。2.3 类和对象的关系对比项类对象是什么模板、图纸具体实例、房子数量一个类可以有无数个对象每个对象都独立内存类本身不占对象内存每个对象在堆里独立分配比喻汽车图纸一辆具体的汽车2.4 我的理解类就像月饼模具对象就是用模具压出来的一块块月饼。模具只有一个但月饼可以做很多块每块月饼的馅料属性值可以不同。核心一句话类是抽象对象是具体类是模板对象是实例。三、类的定义3.1 定义格式java[访问修饰符] class 类名 { // 属性成员变量 // 方法成员方法 // 构造方法 }3.2 代码示例javapublic class Student { // 属性成员变量 String name; int age; String studentId; // 方法 public void study() { System.out.println(name 正在学习); } public void exam() { System.out.println(name 正在考试); } }3.3 命名规范类名大驼峰Student、UserService、HelloWorld属性名/方法名小驼峰studentName、getUserName常量全大写 下划线MAX_VALUE3.4 我的理解定义类就是画图纸。图纸上写清楚这个东西有什么属性能干什么方法。图纸本身不能直接用必须造出实物对象才能用。四、对象的创建和使用4.1 创建对象java类名 对象名 new 类名();javaStudent stu new Student();4.2 内存结构text栈内存 堆内存 ------ ---------------- | stu | ---- | Student 对象 | ------ | name null | | age 0 | | studentId null| ----------------stu是引用变量存在栈里new Student()创建的对象实体存在堆里stu保存的是对象在堆里的地址4.3 使用对象javaStudent stu new Student(); // 访问属性 stu.name 张三; stu.age 18; stu.studentId 2026001; // 调用方法 stu.study(); // 输出张三 正在学习 stu.exam(); // 输出张三 正在考试4.4 我的理解new就是在堆里造一个实物然后把它的门牌号地址交给栈里的变量。变量不是对象本身而是对象的钥匙。核心一句话对象在堆里引用在栈里引用指向对象。五、属性的封装5.1 为什么要封装如果属性直接暴露javaStudent stu new Student(); stu.age -100; // 不合法但没人拦得住封装就是把属性藏起来只通过方法访问可以在方法里加校验。5.2 封装步骤属性用private修饰提供public的getter/setter方法在setter里加校验逻辑5.3 代码示例javapublic class Student { private String name; private int age; // getter public String getName() { return name; } // setter带校验 public void setAge(int age) { if (age 0 || age 150) { System.out.println(年龄不合法); return; } this.age age; } public int getAge() { return age; } }5.4 我的理解封装就像银行保险柜钱属性不能随便拿必须通过柜员方法按规矩操作。柜员可以拒绝不合法的请求保证安全。核心一句话封装 private 属性 public 方法 校验逻辑。六、方法的声明与调用6.1 方法定义格式java[访问修饰符] 返回值类型 方法名(参数列表) { // 方法体 return 返回值; }6.2 代码示例javapublic class Calculator { // 无参无返回值 public void sayHello() { System.out.println(Hello); } // 有参有返回值 public int add(int a, int b) { return a b; } // 有参无返回值 public void printSum(int a, int b) { System.out.println(a b); } }6.3 调用方式javaCalculator calc new Calculator(); calc.sayHello(); // Hello int result calc.add(3, 5); // result 8 calc.printSum(3, 5); // 输出 86.4 形参 vs 实参javapublic int add(int a, int b) { // a、b 是形参 return a b; } calc.add(3, 5); // 3、5 是实参形参定义方法时声明的变量实参调用方法时实际传入的值6.5 我的理解方法就是对象的技能。对象有什么技能就定义什么方法。调用方法就是让对象用这个技能。七、方法重载Overload7.1 什么是重载同一个类中方法名相同参数列表不同就是方法重载。7.2 参数列表不同的三种情况参数个数不同参数类型不同参数顺序不同7.3 代码示例javapublic class Calculator { public int add(int a, int b) { return a b; } public int add(int a, int b, int c) { // 个数不同 return a b c; } public double add(double a, double b) { // 类型不同 return a b; } public int add(int a, String b) { // 顺序不同 return a Integer.parseInt(b); } }7.4 注意仅返回值类型不同不能构成重载javapublic int add(int a, int b) { return a b; } public double add(int a, int b) { return a b; } // 编译报错7.5 我的理解重载就是同一个技能不同用法。比如加法可以加两个 int也可以加三个 int也可以加两个 double。名字都叫add但参数不同编译器会自动选对应的版本。核心一句话重载看参数不看返回值。八、构造方法Constructor8.1 什么是构造方法构造方法是创建对象时自动调用的特殊方法用于初始化对象。8.2 特点方法名与类名相同没有返回值类型连 void 都不写创建对象时自动调用如果不写Java 会默认送一个无参构造8.3 代码示例javapublic class Student { String name; int age; // 无参构造 public Student() { System.out.println(无参构造被调用); } // 有参构造 public Student(String name, int age) { this.name name; this.age age; } }javaStudent s1 new Student(); // 调用无参构造 Student s2 new Student(张三, 18); // 调用有参构造8.4 我的理解构造方法就是对象的出生仪式。对象一出生就自动执行构造方法里的代码把属性初始化好。核心一句话构造方法 与类同名 无返回值 创建对象时自动调用。九、构造方法重载9.1 什么是构造方法重载同一个类中构造方法名相同都等于类名参数列表不同就是构造方法重载。9.2 代码示例javapublic class Student { String name; int age; String studentId; public Student() { } public Student(String name) { this.name name; } public Student(String name, int age) { this.name name; this.age age; } public Student(String name, int age, String studentId) { this.name name; this.age age; this.studentId studentId; } }9.3 我的理解构造方法重载就是给对象提供多种出生方式可以空着出生可以只带名字出生可以带名字和年龄出生也可以全带。核心一句话构造方法重载 多种初始化方式按需选择。十、this 关键字10.1 this 是什么this代表当前对象即谁调用this 就是谁。10.2 三种用法用法一区分成员变量和局部变量javapublic Student(String name, int age) { this.name name; // this.name 是成员变量name 是参数 this.age age; }用法二调用本类的其他方法javapublic void study() { this.exam(); // 调用本类的 exam 方法 }用法三调用本类的其他构造方法javapublic Student() { this(张三, 18); // 调用有参构造必须放在第一行 } public Student(String name, int age) { this.name name; this.age age; }10.3 我的理解this就是我自己。在方法里如果局部变量和成员变量重名不加this就分不清谁是谁。加上this就是明确说这是我的属性。核心一句话this 代表当前对象用于区分同名变量、调用本类方法或构造方法。十一、核心口诀知识点口诀面向对象找对象 用对象 让对象协作类和对象类是模板对象是实例封装private 属性 public 方法 校验方法重载同名不同参返回值不算构造方法与类同名、无返回值、创建时自动调用this代表当前对象区分同名、调本类十二、常见易错点易错点说明构造方法写了返回值构造方法不能写返回值类型连 void 都不行重载只看返回值仅返回值不同不构成重载会编译报错this 调用构造方法没放第一行this(...)必须放在构造方法第一行封装后忘了 getter/setter属性 private 后必须提供 getter/setter 才能访问对象未初始化就使用Student s; s.study();会报 NullPointerException结语这篇覆盖了 Java 面向对象最基础的五个点类与对象、封装、方法、构造方法、this 关键字这些是后续学习继承、多态、接口、抽象类的基石
返回列表