建设电影网站数据库脚本,找单位做网站需要注意什么,想自己做网站怎么做,wordpress用户集成博主简介#xff1a;努力学习的预备程序媛一枚~博主主页#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言
write in the front: 如何理解封装#xff1f; 试想#xff1a;我们使用微波炉的时候#xff0c;只用设置好时间#xff0c;按下“开始”… 博主简介努力学习的预备程序媛一枚~博主主页 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言
write in the front: 如何理解封装 试想我们使用微波炉的时候只用设置好时间按下“开始”即可运作。作为一个产品的使用者我们希望生产者能把最简单的接口暴露给我们而至于微波炉按下开关后内部是具体如何运作的这些细节不用我们操心。“高内聚低耦合”。节省使用者的学习成本和时间成本程序设计也是如此。同时由于封装了内部细节提供了对外的接口作为使用者的我们无法直接随意对内部进行操作保证了内部数据的安全. 封装是程序设计的第一原则,Java设计中有两种封装的体现 方法(函数:为了减少重复代码和分解复杂操作计算机引入了函数子程序的概念Java中把这称为方法Method).【Java】保姆级讲解|从0到1学会方法及方法重载 入门包懂).类
接下来我们具体感受一下Java中的封装主要是讲封装在类上的体现 目录前言Part1引入Part2封装举例Part3如何封装3.1private实现封装3.2gettersetter方法3.3总结封装步骤3.4实际封装应用案例3.5补充IDEA快速根据private生成getter()setterPart4stetter和构造器相结合Part5封装的意义/作用/好处Part66.1反思、深入6.2补充函数体现封装6.3总结Part1引入
我们用面向对象语言编程时会涉及到以下两个视角 类的实现者实现类内部细节—微波炉内部设计者 类的调用者调用已有的类—微波炉的使用者 封装的本质是不向类的调用者透露过多类的实现内容只提供特定的接口让类的调用者去使用类
我们在学习Java的时候经常会用到jdk-API文档通过文档来查询某个类怎么使用 此时我们的视角是类的调用者我们的目的是使用这个类而不关注这个类的具体实现。这正是封装的体现。Java开发者实现了一些类把这些类的具体实现内容类的源码封装只向外提供一些(接口方便类的调用者去直接使用再不用看源码的情况下能快速使用这个类。
Part2封装举例
class Person{public String myName;public int age;public String sex;
}
public class TestDemo {public static void main(String[] args) {Person person1new Person();person1.name19;}
} 假设类的实现者需要通过修改类的实现内容来升级功能将name修改为myName
class Person{private String myName yaoyao//修改public int age;public String sex;
}
public class TestDemo {public static void main(String[] args) {Person person1new Person();person1.myName2000;//修改}
}
结果/问题出现 由于类的实现者修改了类的实现导致类的调用者不得也修改自己的代码-----高耦合、类的调用者使用类的成本增高–程序复杂度过高不便于维护(必须先学习源码才可以使用同时直接公开属性可能会由于类的调用者给属性赋值不合理的数据导致属性错误/不合理–数据不安全 解决—封装 那么如何才能解决类的实现者在后期维护、修改的过程中最大限度的不影响类的使用者呢降低程序的复杂度以及保护属性数据的安全呢----封装。
Part3如何封装
3.1private实现封装
java中利用privatepublic两个关键字搭配来实现封装 private:成员变量、成员方法被private修饰时类的调用者无法访问使用只有在类内部可以访问使用。即这些被封装起来的属性/行为对于类的调用者来说是不可见的–无法直接访问调用。private:成员变量、成员方法被public修饰时类的调用者可以直接访问使用。
eg:
class Person{private String myName yaoyao//修改private int age19;private String sexfemal;public void show(){System.out.println(myNameagesex);}
}
public class TestDemo {public static void main(String[] args) {Person person1new Person();person1.show();}
}这样形式是一个封装将myName\age\sex封装起来了无法通过对象直接访问只可以通过一个公开的方法-show()来显示只读不写问题:属性被private修饰之后调用者无法直接访问到属性这样确实提高了可维护性、降低了耦合性,但是如何获取/修改被private修饰的属性呢
3.2gettersetter方法
class Person{private String myName;public void setMyName(String name){//对外提供访问属性方法this.myName name;}public String getMyName(){//对外提供获取属性方法return this.myName;}
}
public class TestDemo {public static void main(String[] args) {Person person1 new Person();person1.setMyName(yaoyao);System.out.println(person1.getMyName());}
}setter():设置公开setter方法设置当前属性值getter():设置公开getter方法获取当前属性值.
Tips: 你可能会想如果类的实现者修改了对外公开的属性/方法这样不是同样会增加类的调用者的学习使用成本嘛 答 一般类的设计都要求类提供的 public 方法/属性能比较稳定–不频繁发生大的修改. 尤其是对于一些基础库中的类. 每次接口的变动都要仔细考虑兼容性问题 3.3总结封装步骤
1. private修饰相应属性–属性私有化 2. 制作相对应公开的setter/getter方法
public void setXXX(参数列表{//验证传参是否合理...//合理即可赋值属性 形参
}public void getXXX(){//权限判断return XXX;
}3.4实际封装应用案例
public class Student(){private String name;//名字public static setName(String name){//对数据进行验证合理性if(name.length() 2 name.length() 10){this.name name;}else{System.out.println(设置名字长度超过范围未设置成功);}}public static getName(){return this.name;}
}
class Demo{public static void main (String[] args){Student student new Student();//若传入这样不合理数据则无法成功修改属性student.setName(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh);}
}3.5补充IDEA快速根据private生成getter()setter
鼠标右键选择generate(重构/altinsert 选择 即可生成
Part4stetter和构造器相结合
【写法】:将setter写在构造器内部【作用】:保护属性数据安全
public class Student(){private String name;//名字public static setName(String name){//对数据进行验证合理性if(name.length() 2 name.length() 10){this.name name;}else{System.out.println(设置名字长度超过范围未设置成功);}}public static getName(){return this.name;}//构造器(本质初始化数据public Student(String name){setName(name);//直接在构造器内调用set方法}
}
class Demo{public static void main (String[] args){Student student new Student(HHHHHHHHHHHHHHHhhhhhhhhhhhhhhhh);}Part5封装的意义/作用/好处
安全性用private隐藏内部细节(外部不能随意访问对传入数据进行验证保证安全合理。避免因为外部的无意修改破坏内部数据—提高代码安全性复用性这里是指使用类把属性、成员方法封装起来的封装。即一旦类的实现者实现了一个类下一次遇到同样的问题不必再次写一遍而是直接调用类实现者写好的代码即可—提高代码复用性。高内聚隐藏类内部的实现细节不允许外部干涉便于后期维护------降低程序复杂度。低耦合暴露少量接口供外部使用且尽量方便。提高类使用者的学习成本、使用成本。便于协助、扩展。
Part6
6.1反思、深入
的确我们谈到封装可能最先想到的是类并且封装在类上体现的学问、细节确实很多。封装是一种思想Java的函数和类本身是这种思想的明显体现。我的意思是如果类中的属性都是public我们仍然认为类是一种封装。但是如果只是单单的这样浅层次的封装肯定会带来很多问题如上文已经讲到的安全性、使用成本…)
于是我们需要更深层次的封装—上面Part所讲的其实本质就是在类的基础上再次封装或许可以叫作套娃。
可以这样理解类是一个书包封装了各种各样的文具、书数据、对数据的操作。—类的外层封装在书包中放个铅笔盒专门用来放这个铅笔盒我们叫作—封装在类中体现。本文大篇幅讲解的其实是此封装public和private干嘛 public修饰类表示这个书包别人可以拿到别人可以打开这个书包拉链publicprivate修饰方法/属性封装类内部细节private修饰属性就相当于把数据封在铅笔盒中了就算你拿到了书包并且打开并不代表你可以打开铅笔盒获取铅笔但是public修饰getter()说明打开铅笔盒的操作是可以使用的。
6.2补充函数体现封装
虽然类体现封装的确占大头但是函数就是Java中的方法也体现了封装既然此文是讲封装怎么能少的了我们的函数老爷呢 程序的构成 程序由数据和指令构成。大程序可以分为小程序小程序可以再次细分—子程序分而治之。 所有我们看到有些地方把函数也称为子程序。程序是数据指令的集合。所以函数也是封装的体现
6.3总结
通过上面可以看到其实程序本身就是封装类、函数是封装中的封装…
总之请记住 封装是程序设计的第一原则, 类方法是封装的不唯二体现。通过封装我们才能站在更高层次思考问题。