学习报告-

张开发
2026/4/20 10:50:06 15 分钟阅读

分享文章

学习报告-
一、Java封装核心知识点1.1 封装的定义封装把对象的属性和行为包装在类中对外部隐藏实现细节只对外提供公共访问方式。一句话总结隐藏实现暴露方法保护数据。1.2 封装的核心思想私有化成员变量用private修饰禁止外部直接访问提供公共的访问方法getXxx()取值、setXxx()赋值在公共方法中可以添加数据校验保证数据的合法性和安全性。1.3 封装的实现步骤实现封装只需3步代码可直接复制运行成员变量使用private修饰为每个私有变量提供对应的get/set方法通过get/set方法操作属性不直接访问私有变量。完整示例Student类public class Student { // 1. 私有成员变量private修饰外部无法直接访问 private String name; private int age; // 2. 为每个私有变量提供get/set方法公共访问方式 // get方法获取name的值 public String getName() { return name; } // set方法给name赋值 public void setName(String name) { this.name name; } // get方法获取age的值 public int getAge() { return age; } // set方法给age赋值添加数据校验核心亮点 public void setAge(int age) { // 数据校验年龄必须在0-150之间否则提示并拒绝赋值 if(age 0 || age 150) { System.out.println(年龄不合理无法赋值); return; // 终止方法不执行后续赋值操作 } this.age age; } }使用示例测试封装效果public class TestStudent { public static void main(String[] args) { // 创建Student对象 Student stu new Student(); // 用set方法赋值正确赋值 stu.setAge(20); stu.setName(张三); // 用get方法取值 System.out.println(姓名 stu.getName()); System.out.println(年龄 stu.getAge()); // 测试数据校验非法赋值被拦截 stu.setAge(200); // 输出年龄不合理无法赋值 System.out.println(非法赋值后的年龄 stu.getAge()); // 仍为20 } }运行结果姓名张三 年龄20 年龄不合理无法赋值 非法赋值后的年龄201.4 封装的好处提高数据安全性防止外部随意修改私有成员变量通过校验保证数据合法隐藏实现细节外部只需调用get/set方法无需关心内部逻辑便于维护修改内部逻辑如调整校验规则时不影响外部调用代码可实现数据校验在set方法中添加条件过滤非法数据。1.5 private关键字封装的关键private是Java中最小访问权限修饰符被private修饰的成员变量/方法只能在本类中访问子类、同包其他类、不同包类都无法直接访问private修饰的成员是实现封装的核心通过private隐藏属性再通过公共方法暴露访问路径。1.6 this关键字封装中常用在封装的set方法中经常会遇到「局部变量与成员变量重名」的问题此时就需要用this关键字解决核心作用区分成员变量和局部变量重名this.变量名表示当前对象的成员变量不加this则遵循就近原则。经典示例set方法中使用thispublic void setName(String name) { // this.name成员变量Student类的name // name局部变量setName方法的参数 this.name name; }1.7 封装常考面试题/简答题问什么是Java封装 答把对象的属性和行为包装在类中隐藏实现细节只对外提供公共访问方式get/set方法核心是保护数据。问封装的好处有哪些 答提高数据安全性、隐藏实现细节、便于维护、可进行数据校验。问如何实现Java封装 答用private修饰成员变量为每个私有变量提供get/set方法通过方法操作属性。问private关键字的作用 答限制访问权限被修饰的成员只能在本类中访问是实现封装的关键。二、get方法与set方法格式调用区别get和set方法是封装的核心访问方式格式固定必须背会考试/写代码高频使用假设私有成员变量为private int age;以此为例讲解格式。2.1 核心格式必须背1set方法赋值作用给私有成员变量赋值/存值格式public void setXxx(参数类型 参数名) { this.成员变量 参数名; }关键特征有参数无返回值void示例// 给age赋值的set方法 public void setAge(int age) { // 可添加数据校验可选非必须但推荐 if(age 0 || age 150) { System.out.println(年龄不合理); return; } this.age age; }2get方法取值作用从私有成员变量中取值/拿值格式public 返回值类型 getXxx() { return 成员变量; }关键特征无参数有返回值返回值类型与成员变量一致示例// 获取age值的get方法 public int getAge() { return age; }调用格式对象名.方法名()赋值用set取值用get示例Student stu new Student(); // set方法赋值参数是要赋的值 stu.setAge(20); stu.setName(张三); // get方法取值接收返回值或直接打印 int studentAge stu.getAge(); // 接收返回值 System.out.println(stu.getName()); // 直接打印2.3 boolean类型的特殊规则高频考点如果私有成员变量是boolean类型true/falseget方法的命名有特殊规则不叫getXxx()而是叫isXxx()set方法命名不变仍为setXxx()。示例boolean类型变量public class Student { // boolean类型私有变量 private boolean male; // 是否为男性 // set方法命名不变 public void setMale(boolean male) { this.male male; } // get方法特殊命名用is开头 public boolean isMale() { return male; } }调用示例Student stu new Student(); stu.setMale(true); // 赋值 System.out.println(stu.isMale()); // 取值输出true三、就近原则与this关键字详解就近原则和this关键字是解决「局部变量与成员变量重名」的核心也是考试高频考点两者结合记忆更高效。3.1 就近原则定义示例什么是就近原则当局部变量方法内定义的变量、方法参数和成员变量类中定义的变量重名时Java会优先使用「离得更近」的局部变量这就是就近原则。经典示例public class Student { // 成员变量类中定义 int age 20; // 成员方法 public void show() { // 局部变量方法内定义与成员变量重名 int age 10; // 就近原则优先使用局部变量age10 System.out.println(age); } public static void main(String[] args) { Student stu new Student(); stu.show(); // 输出10 } }说明局部变量age在方法内离打印语句更近所以优先使用局部变量的10而非成员变量的20。3.2 this关键字的本质与核心作用this是什么this是Java中的关键字代表「当前对象」—— 谁调用当前方法this就代表谁。例stu调用show()方法this就代表stu对象stu2调用show()方法this就代表stu2对象。this的核心作用解决「就近原则带来的重名问题」当局部变量与成员变量重名时用this.成员变量强制访问成员变量避免被局部变量覆盖。经典对比public class Student { // 成员变量 private int age; // 方法参数局部变量与成员变量重名 public void setAge(int age) { // 错误写法age局部变量给自己赋值成员变量age未改变 age age; // 正确写法this.age成员变量 age局部变量 this.age age; } }说明age age;左边是局部变量右边也是局部变量相当于“自己给自己赋值”成员变量age始终是默认值0毫无意义this.age age;左边是成员变量this.age右边是局部变量方法参数真正实现“给成员变量赋值”。3.3 就近原则与this的对比必考写法代表的变量遵循的规则age局部变量方法内/参数就近原则this.age成员变量类中定义强制访问成员变量不受就近原则影响3.4 this的其他用法除了区分重名变量this还有两个常用用法1调用本类的其他构造方法格式this(参数)用于构造方法之间的调用注意两个关键点this(...)必须写在构造方法的第一行只能在「构造方法」中调用「本类的其他构造方法」不能在成员方法中调用。示例public class Student { private int age; // 无参构造 public Student() { // 调用本类的有参构造this(10)给age赋值为10 this(10); System.out.println(无参构造执行); } // 有参构造 public Student(int age) { this.age age; System.out.println(有参构造执行age age); } public static void main(String[] args) { Student stu new Student(); // 调用无参构造 } }运行结果有参构造执行age10 无参构造执行2调用本类的成员方法格式this.成员方法名()可省略thisJava会默认补充但加上this更规范便于区分。示例public class Student { public void show() { System.out.println(show方法执行); } public void test() { // 调用本类的show方法两种写法均可 this.show(); // 推荐规范清晰 // show(); // 省略thisJava默认补充 } }3.5 核心知识点总结就近原则局部变量与成员变量重名时优先使用局部变量this关键字代表当前对象核心用来访问成员变量解决重名、调用本类构造方法、调用本类成员方法。四、构造方法4.1构造方法概述构造方法构造器、构造函数创建对象时自动调用、用于初始化对象成员变量的特殊方法。4.2 作用创建对象new关键字本质就是调用构造方法。初始化属性对象一创建就完成赋值避免手动set遗漏。4.3 格式语法[修饰符] 类名(参数列表) { // 初始化代码 }示例public class Student { // 成员变量 private String name; private int age; // 无参构造方法 public Student() { System.out.println(无参构造执行); } // 有参构造方法 public Student(String name, int age) { this.name name; this.age age; } }4.4 核心特点必须记住方法名与类名完全一致大小写相同无返回值类型连void都不能写不能 return 具体值可空return;new对象时自动调用不能手动调用支持重载参数列表不同默认构造不写则系统自动提供无参空构造写任意构造后默认构造消失4.5 分类1. 无参构造方法无参数、方法体可空系统默认提供public Student() {}2. 有参构造方法带参数用于直接初始化属性常用单参、全参public Student(String name) { this.name name; } public Student(String name, int age) { this.name name; this.age age; }4.6 关键字this构造中常用this.变量访问本类成员变量区分局部变量与成员变量this(参数)调用本类其他构造方法必须写在第一行示例public Student() { // 调用全参构造 this(无名氏, 18); } public Student(String name, int age) { this.name name; this.age age; }4.7 重载构造方法重载同一个类中方法名相同都是类名参数列表不同个数、类型、顺序不同与返回值、修饰符无关示例public Student() {} public Student(String name) {} public Student(int age) {} public Student(String name, int age) {}4.8 注意事项黑马重点强调不写构造 →系统默认无参构造写任意构造 →默认无参构造消失若要同时使用无参 有参 →必须手动写无参构造构造方法不能被static/final/abstract修饰构造方法可私有private用于单例模式、工具类禁止外部创建对象4.9 完整代码class Student { private String name; private int age; // 无参构造 public Student() { System.out.println(无参构造); } // 全参构造 public Student(String name, int age) { this.name name; this.age age; } // Getter/Setter public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } // 显示信息 public void show() { System.out.println(name , age); } } public class StudentDemo { public static void main(String[] args) { // 调用无参 Student s1 new Student(); s1.show(); // null, 0 // 调用全参 Student s2 new Student(张三, 20); s2.show(); // 张三, 20 } }4.10 一句话总结构造方法 创建对象 初始化属性同名、无返回、new自动调可重载、可用this不写默认有写了默认无五标准javabean类5.1 什么是 JavaBeanJavaBean 就是符合规范的实体类用来封装数据。简单理解专门用来创建对象、存数据的标准类。5.2 JavaBean 的4 条标准规范类名见名知意且用大驼峰成员变量私有化private 修饰提供无参构造方法提供每一个成员变量对应的 getXxx () /setXxx ()满足这 4 条就是标准 JavaBean。5.3 细节说明成员变量 private外界不能直接访问保证数据安全只能通过get/set操作必须有无参构造自己写了有参构造无参构造必须手动写否则默认无参消失get/set 方法命名规则set变量名()给变量赋值get变量名()获取变量的值布尔类型特殊isXxx()5.4 标准 JavaBean 代码示例public class Student { // 1. 成员变量私有 private String name; private int age; // 2. 无参构造 public Student() { } // 3. 有参构造可选但开发常用 public Student(String name, int age) { this.name name; this.age age; } // 4. get和set方法 public void setName(String name) { this.name name; } public String getName() { return name; } public void setAge(int age) { this.age age; } public int getAge() { return age; } }5.5 使用 JavaBeanpublic class Test { public static void main(String[] args) { // 空参创建 Student s new Student(); s.setName(张三); s.setAge(23); System.out.println(s.getName()); System.out.println(s.getAge()); // 有参创建 Student s2 new Student(李四, 24); } }5.6 重点JavaBean只用来封装数据不写业务逻辑以后框架、项目里的实体类全是这种写法IDEA 可以一键生成Alt Insert→ 构造器、getter、setter六对象内存图6.1 Java 内存划分本节重点视频里讲的是5 块内存本地方法栈寄存器栈方法区堆重点关注两块栈堆方法区栈内存Stack存放局部变量方法里的变量、方法参数方法进栈执行方法结束弹栈变量消失堆内存Heap存放new 出来的对象对象里有成员变量有地址值6.2 单个对象的内存图流程以代码为例Student s new Student(); s.name 张三; s.age 23; s.show();执行流程main方法进入栈new Student()在堆中开辟空间生成地址值栈中的变量s保存的是堆内存地址引用通过s.变量赋值其实是通过地址找到堆里的成员变量调用s.show()show方法进栈执行执行完毕弹栈一句话栈存引用地址堆存对象数据6.3 两个对象的内存图Student s1 new Student(); Student s2 new Student();两次new→堆里两个独立对象栈里s1、s2分别指向不同地址修改s1的值不会影响s26.4 两个引用指向同一个对象引用传递Student s1 new Student(); Student s2 s1;堆里只有一个对象s1和s2保存同一个地址值通过s2修改属性s1访问时也会变这就是引用传递6.5 成员变量和局部变量在内存中的区别表格区别成员变量局部变量定义位置类中、方法外方法内或方法声明中内存位置堆内存栈内存生命周期随对象创建而存在对象被回收而消失方法调用存在方法结束消失初始化值有默认初始化值无默认值必须手动赋值作用域整个类中可用只在当前方法内有效重点强调成员变量有默认值int 0、double 0.0、boolean false、引用 null局部变量没有默认值不赋值不能用6.6 垃圾回收简单说明堆中的对象当没有任何引用指向它时就变成垃圾由GC垃圾回收器自动回收不需要手动处理6.7 本节核心结论对象存在堆内存中对象的引用变量存在栈内存中多个引用可以指向同一个对象成员变量在堆局部变量在栈对象通过地址值被使用七补充内容标准数据类型和引用数据类型7.1 两种数据类型分类基本数据类型4 类 8 种整数byte、short、int、long浮点float、double字符char布尔boolean引用数据类型除了基本类型以外其他都是例如String、数组、自定义对象Student、Teacher…7.2 核心区别变量里存的是什么基本数据类型变量中直接存储数据值引用数据类型变量中存储的是地址值通过地址指向堆里的真实对象7.3 赋值与传递的区别重点1. 基本数据类型赋值int a 10; int b a;把a 的值复制一份给 ba 和 b 相互独立修改 b 不会影响 a2. 引用数据类型赋值Student s1 new Student(); Student s2 s1;把s1 里的地址值复制给 s2s1 和 s2 指向同一个对象通过 s2 修改对象内容s1 访问时也会变7.4 方法参数传递1. 基本类型作为参数传递的是值副本方法内部修改不会影响原来的变量2. 引用类型作为参数传递的是地址值方法内部通过地址修改对象内容会影响外面的对象一句话总结基本类型传值引用类型传地址。7.5 内存区别基本类型变量数据存在栈内存引用类型变量变量名引用在栈真实对象数据在堆栈里只存地址7.6 重点基本类型变量里存的是真实数据引用类型变量里存的是地址基本类型赋值互不影响引用类型赋值共用同一个对象方法传参规则同上八补充内容this的内存原理8.1 this 是什么this是一个引用存储的是当前对象的地址哪个对象调用方法this 就代表哪个对象this 可以理解为“我自己”、“当前对象”8.2 this 的作用区分成员变量和局部变量重名问题在本类构造方法中调用其他构造方法this(...)表示当前对象可作为返回值、参数传递8.3 this 的内存原理重点方法在执行时会默认传入 thisthis 存在于栈中保存的是堆里当前对象的地址值谁调用这个方法this 就指向谁所以this.xxx访问的就是调用者对象的成员变量8.4 为什么要用 this重名问题当局部变量和成员变量同名时直接写变量名 → 访问局部变量就近原则加this.→ 访问成员变量示例public class Student { private String name; public void setName(String name) { // 等号右边 name 是局部变量 // 等号左边 this.name 是成员变量 this.name name; } }8.5 this 调用构造方法格式this(参数);作用调用本类其他构造方法必须写在构造方法第一行不能互相递归调用会死循环示例public Student() { this(无名氏); } public Student(String name) { this.name name; }8.6 this 在内存中的表现创建对象Student s new Student();调用方法s.setName(张三);进入方法栈this 保存 s 的地址this.name就等价于s.name多个对象调用同一个方法时每个对象调用时this 就指向自己所以方法能正确区分是哪个对象的数据8.7 核心总结this 代表当前调用方法的对象this 存储的是地址值在栈中解决变量重名this.成员变量调用本类构造this(...)必须在第一行谁调用我我就代表谁九补充内容成员和局部9.1 定义位置不同成员变量类中、方法外面局部变量方法内部或 方法声明上形参9.2 初始化值不同成员变量有默认值不赋值也能直接用整数0浮点0.0布尔false引用类型null局部变量没有默认值必须先赋值再使用9.3 内存位置不同成员变量随着对象在堆内存局部变量随着方法在栈内存9.4 生命周期不同成员变量对象创建时出生对象被垃圾回收时消失局部变量方法调用时出生方法执行完毕就消失9.5 作用域不同成员变量整个类中都可以使用局部变量只在当前方法内有效出了方法就不能用9.6 命名冲突问题成员变量和局部变量可以同名访问时遵循就近原则优先使用局部变量想访问成员变量必须加this.示例public class Student { // 成员变量 int age 20; public void show() { // 局部变量 int age 10; System.out.println(age); // 就近10 System.out.println(this.age); // 成员20 } }9.7 表格总结表格区别成员变量局部变量定义位置类中、方法外方法内或方法参数初始化值有默认值无默认值必须赋值内存位置堆内存栈内存生命周期随对象随方法作用域整个类当前方法重名处理用 this 区分不能重名9.8 总结成员变量跟着对象走堆里有默认值局部变量跟着方法走栈里没默认值同名就近找成员要加 this

更多文章