大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本! 【零基础 快速学Java】韩顺平 零基础30天学会Java 硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利!!
具有其他语言基础的盆友只需要把前几章的章节总结简单看一下 然后再去着重看需要学习的章节就可以了! 知识点分的非常清晰! 每章还有总结 这…真的是我理想中的学习资料呐!
学习笔记整理过后放到这里
一方面是让自己再二次记忆一下 一方面是希望可以帮到有这方面知识需要的朋友 给他们一个新的切入点来重新了解这一个知识
本专题包括以下几个主要知识点~
本次笔记主要记录 封装 的内容 别看封装思想很简单 但是如果这里的基础没有打好 之后的学习会很困难! 毕竟基础不牢 地动山摇嘛~
所以要多动手练一下 强化自己的面向对象思想! 再强调下 要敲一遍例子呐~
文章目录如下 跳转到感兴趣的内容看下吧~
案例尽量打开IDE动手敲一下吧! 韩老师给的例子真的很棒!
封装
【1】封装简介
先温习一下基本知识——
封装是个啥?
封装(encap sulation)就是把抽象出的数据 —— 属性
和对数据的操作 —— 方法
封装在一起
数据被保护在内部 程序的其他部分只有通过被授权的操作 方法
才能对数据进行操作
封装的理解和好处
这个很重要嗷~ 我们为啥要封装啊
理由如下~
1.封装可以隐藏实现某个功能的细节 拿来就能用!
比如某种方法是用来连接数据库的
但是我们不用在乎这玩儿是咋写的 直接调用(传入参数)即可!
2.封装可以对数据进行验证 保证安全合理 输入数据不符合常理?不行!
控制属性值的合理性也很重要!
【2】封装实现的步骤
属性私有化private
让外界不能直接修改属性
提供一个公共的(public)set方法
用于对属性判断并赋值
提供一个公共的(public)get方法
用于获取属性的值
之后通过案例进行加深理解!
【3】使用案例快速入门封装
接下来动手敲一下吧!!
再温习下 封装都有哪些功能和特性呢——
年龄、薪水是private的 无法直接改这些数据 设置setName getName函数
用于获取属性的值 对属性判断并赋值
达到目的 :
public class Encapsulation01 {
public static void main ( String [ ] args) {
Person person = new Person ( ) ;
person. setName ( "sfzlovehy" ) ;
person. setAge ( 10000 ) ;
person. setSalary ( 200000 ) ;
System . out. println ( person. info ( ) ) ;
}
}
class Person {
public String name;
private int age;
private double salary;
public String getName ( ) {
return name;
}
public void setName ( String name) {
if ( name. length ( ) >= 2 && name. length ( ) <= 6 ) {
this . name = name;
}
else {
System . out. println ( "名字字儿不太行 多于2个少于6个字符吧 看着舒服点 暂时叫它无名氏了哦" ) ;
this . name = "无名氏" ;
}
}
public int getAge ( ) {
return age;
}
public void setAge ( int age) {
if ( age >= 1 && age <= 120 ) {
this . age = age;
}
else {
System . out. println ( "输入的年龄需要在1-120之间哦!再输一次吧!给你个默认年龄18" ) ;
this . age = 18 ;
}
}
public double getSalary ( ) {
return salary;
}
public void setSalary ( double salary) {
this . salary = salary;
}
public String info ( ) {
return "信息为姓名:" + name + " 年龄:" + age + " 薪水" + salary;
}
}
[/code]
跑完了的结果如下——
可以自己拿过去跑一跑~
【4】封装与构造器
复习下前一章(第八小节那部分) 刚刚讲过的构造器
那么将用于初始化对象的构造器和setXXX
相结合
就可以简单快捷地将数据输入进去啦
省得一个个输入 (相当于使用无参构造器) 怪麻烦的~
public Person ( ) {
}
public Person ( String name, int age, double salary) {
this . setName ( name) ;
this . setAge ( age) ;
this . setSalary ( salary) ;
}
[/code]
测试一下
看~直接这样子输入多舒服
Person person1 = new Person ( "Bill6666" , 21 , 20000 ) ;
System . out. println ( "==Bill的信息==" ) ;
System . out. println ( "我们需要把set方法写在构造器中 不然会使用构造器将set方法给绕过去的" ) ;
System . out. println ( person1. info ( ) ) ;
[/code]
输出结果
正如上面代码中注释说的 如果不使用 this.setName(name)
而是使用 this.name = name
就无法校验数据了
【5】再来一道封装的练习题
再练一道 巩固一下~ 这道题真的是所有知识点都练到了! 你说啥 还没打开IDE?! 再来一遍
题目如下
分四步写这道题哈
相信偶 手敲一遍 收获大大滴!
1.Account类代码拆分理解
这道题一下子练习了四个点
快来吸收一下知识点吧~
00 数据的封装 让外界不能直接修改这些数据
01 使用构造器
02 getter 和 setter方法
分别起到两个作用——返回结果 和 校验数据是否符合要求
【1】姓名
【2】余额
【3】密码
03 最后别忘了写一个打印信息的函数
之后写下测试代码就好了 结果如下:
2.代码总览
public class Account {
private String name;
private double balance;
private String pwd;
public Account ( ) {
}
public Account ( String name, String pwd, double balance) {
this . setName ( name) ;
this . setPwd ( pwd) ;
this . setBalance ( balance) ;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
if ( name. length ( ) >= 2 && name. length ( ) <= 4 ) {
this . name = name;
}
else {
System . out. println ( "喂!朋友!姓名要求2/3/4位 你名字太长了 所以你还是叫无名氏吧!" ) ;
this . name = "无名氏" ;
}
}
public double getBalance ( ) {
return balance;
}
public void setBalance ( double balance) {
if ( balance > 20 ) {
this . balance = balance;
}
else {
System . out. println ( "你余额太少了 跟0也差不多 就算0吧 :)" ) ;
this . balance = 0 ;
}
}
public String getPwd ( ) {
return pwd;
}
public void setPwd ( String pwd) {
if ( pwd. length ( ) == 6 ) {
this . pwd = pwd;
}
else {
System . out. println ( "对8起 我们对密码长度有很严格的要求 必须是6位 给你个默认密码000000吧 不用谢" ) ;
this . pwd = "000000" ;
}
}
public void showInfo ( ) {
System . out. println ( "账号信息 姓名:" + name + " 密码" + pwd + " 余额" + balance) ;
}
}
[/code]
public class TestAccount {
public static void main ( String [ ] args) {
Account account = new Account ( ) ;
account. setName ( "Bill" ) ;
account. setPwd ( "666666" ) ;
account. setBalance ( 100000 ) ;
account. showInfo ( ) ;
}
}
[/code]
结果: 虽然输入符合要求 但是使用了费劲的无参构造器
public class TestAccount02 {
public static void main ( String [ ] args) {
Account account = new Account ( "pangying" , "16161616" , 6 ) ;
account. showInfo ( ) ;
}
}
[/code]
虽然使用了快捷的含参构造器 但是输入全不符合要求呢
【6】封装小结
封装学习到此为止 敲完代码 回头再看看 封装的好处
1.封装可以隐藏实现某个功能的细节 拿来就能用!
2.封装可以对数据进行验证 保证安全合理 输入数据不符合常理?不行!
是不是可以理解更多了呢? 之后继续努力吧 嘿嘿
来源:https://blog.csdn.net/qq_45704942/article/details/117932680 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!