草庐IT

封装的概述

敷衍、怎么演614 2023-09-26 原文

一、封装

(一)封装的概述

1、封装:隐藏事物的实现细节,对外提供公开的访问方式

2、好处:

(1)隐藏事物的实现细节

(2)提高了代码的复用性

(3)提高了安全性

3、封装的原则

(1)隐藏事物的属性

(2)隐藏事物的实现细节

(3)对外提供公开的访问方式

(二)private关键字

1、private,含义:私有的;权限修饰符:规定了被修饰的代码在哪里能被访问,在哪里不能被访

2、可以修饰的内容

(1)修饰成员变量

(2)修饰成员方法

(3)修饰构造方法

(4)修饰内部类

3、修饰之后的效果只能在本类中进行访问,本类之外无法访问

4、private关键字注意 private只是封装思想的一种体现形式,封装还可以使用其他修饰符来完成

(三)Get和Set

1、当成员变量私有化之后,外界无法访问,所以需要对外界提供一个公开的访问方式,来获取成

员变量值和设置成员变量的值

2、访问:通过方法来实现

(1)方法外界可以访问

(2)方法和成员变量同属于一个类型,方法能访问自己类型中的私有成员变量

(3)外界访问方法,方法访问私有成员变量,从而达成间接访问

3、一般情况下,都是set进行赋值,get进行获取值

4、一般情况下,书写类的属性都要用private修饰,个别情况根据需求来修改,并且一般情况下每

一个成员变量都有一套set、get方法

(四)this关键字

1、变量的访问原则是:就近原则

2、(1)作用:表示当前类型当前对象的引用

(2)哪个对象来调用this关键字所在的方法,this就指代哪个对象

(3)在set方法中,this该关键字在见名知意的前提下,用于区分哪个是对象的成员变量,剩下的

一个按照就近原则,就是局部变量。所以在set方法中,使用【this.成员变量的变量名】,一定是

成员变量, 没有使用name的变量,就按照就近原则去寻找

(五)构造方法

1、概述:又叫做构造器或者构造函数,Constructor

2、作用:用于给成员变量赋值!在创建对象的过程中,会自动调用构造方法,等对象创建完毕的

时候, 对象中的成员变量就已经通过构造方法赋值成功了

3、定义格式

修饰符 方法名称(参数列表) { 方法体; }

4、定义说明

(1)构造方法没有返回值,连void也没有

(2)方法名称:和所在类型保持一致

(3)构造方法可以有return语句,但是没有什么必要,只是表示方法结束

5、其它说明

(1)构造方法不能手动调用,在创建对象的时候由JVM自动调用

(2)因为一个对象只能被创建一次,所以构造方法针对同一个对象,只能被调用一次

(3)构造方法可以重载

(4)当一个类没有手动提供任何构造方法时,在编译时系统会自动为我们添加一个空参构造

(5)当我们手动添加了一个任何构造的时候,系统就不会在为我们添加任何构造方法

(6)如果构造方法没有修饰符,也是构造方法,只不过是默认权限而已,方法中的内容无关紧要

(六)构造和set区别

1、构造方法可以为多个成员变量赋值,set只能对一个进行赋值

2、构造方法由JVM自动调用,set需要手动调用

3、构造方法针对同一个对象只能调用一次,set方法针对同一个对象可以调用多次

4、构造方法用于给变量赋值,set可以给变量赋值或者修改值

5、构造可以使代码更加简洁,set方法灵活性更高

(七)初始化顺序

1、创建对象的时候,成员变量经历了三个过程

(1)默认初始化

(2)构造方法初始化

(3)显示初始化

2、三者优先级顺序:构造初始化 < 显示初始化 < 默认初始化

二、制作标准类

概述:JavaBean是Java语言编写类的一种标准格式规范,符合JavaBean的类,要求必须是具体和

公共的,并且具有无参构造,提供用来操作成员变量的set、get方法,【有参构造是根据具体的实

际情况进行设计的】

(一)格式 

public class ClassName { //成员变量 //构造方法 //无参构造【必须】 //有参构造【建议】 //成员方法 //set方法 //get方法 }

三、API

1、API:应用程序编程接口

2、接口:用于规定方法名称的规则的集合。定义方法名称、修饰符、返回值类型、参数列表、方

法功能等等

3、实际:应用程序编程接口,也包含了Java中的接口、类、枚举等等

4、学习中,更多侧重于基本的使用,以及一些底层原理,这些内容不需要我们自己去定义,只需

要我们调用

四、Math

1、概述:用于执行基本数学运算的方法

2、两个常量:

(1)E:自然对数的底数:2.718

(2)PI:圆周率,3.1415926

3、构造方法:无

4、常用方法

(1)abs(int a):求绝对值

(2)cbrt(double a):开立方

(3)sqrt(double a):开平方

(4)ceil(double a):向上取整

(5)floor(double a):向下取整

(6)max(int a, int b):求最大值

(7)min(int a, int b):求最小值

(8)random():返回【[0.0,1.0)】之间的随机数

(9)pow(double a, double b):求a的b次方 }

(10)round(double a):四舍五入

五、Arrays

1、此类包含用来操作数组(比如排序和搜索)的各种方法

2、常用方法

(1)binarySearch(int[] a, int key):传入指定数组和要查找的元素,返回元素的索引,如果没有则

返回-1 注意:使用该方法之前必须要进行排序

(2)sort(int[] a):对参数数组进行排序

(3)toString(int[] a):打印数组内容

(4)copyOf(int[] original, int newLength):拷贝数组,返回新数组;传入一个数组,和一个新数

组的长度;如果新长度比原数组长度小就是截取;如果比原数组长度长就是采用默认值填充

(5)equals(int[] a, int[] a2):如果两个指定的 int 型数组彼此相等,则返回 true 。

(6)fill(int[] a, int val):用指定元素替换数组中所有的元素

六、静态

(一)概述

静态:如果所有对象,都具有一个共同的属性值,那么在这个属性上加上一个static,就会让该变

量从原本的对象空间内,改为存储在【方法区的静态区】,从每一个对象都有一份变为所有对象共

享一份

(二)静态变量的特点

1、static,关键字;含义:静态;被他修饰的部分就是静态的

2、静态:不会随着对象的变化而变化

3、加载时机:随着类的加载而加载

4、静态优先于对象存在

5、静态变量被所有当前类型的对象共享

6、代码层面

(1)可以通过对象访问,格式:对象名.静态变量名

(2)可以通过静态访问,格式:类名.静态变量名

(3)静态变量可以通过对象或者类名的方式访问,在不创建对象的时候,也可以进行访问

(三)静态方法

1、概述:就是在方法的声明上加上static

2、静态方法不能访问非静态变量

原因:静态成员随着类的加载而加载优先于对象存在,当静态方法被创建的时候,对象很有可能还

没被创建,非静态变量又是随着对象的创建而创建在堆内存中,所以不能访问

3、静态方法不能访问非静态方法

4、静态方法中不能使用this

原因:this指代当前类型当前对象的引用,当静态方法被创建的时候,对象很有可能还没被创建

5、总结:静态不能访问非静态

6、静态方法的调用

(1)对象名.静态方法名

(2)类名.静态方法名【推荐】

(四)静态变量和非静态变量

1、概念上,所属不同

(1)非静态变量属于对象

(2)静态变量属于类

2、内存空间不同,存储位置不同

(1)非静态变量随着对象存储在堆内存中

(2)静态变量随着类创建在方法区的静态区中

3、内存时间不同,生命周期不同

(1)非静态变量随着对象的创建而创建,随着的对象的消亡而消亡

(2)静态变量随着类的加载而加载,随着类的消亡而消亡

4、访问方式不同

(1)所有的非静态成员都需要通过对象来访问

(2)所有静态方法不仅可以通过对象来访问,也可以通过类名来访问

七、修饰符

1、分类:

(1)访问控制修饰符:public、private、default(默认的)、protected

(2)非访问控制修饰符:final、abstract、static、synchronized

2、权限修饰符,是java中的一些关键字,用于决定代码在哪里可以被访问,在哪里不能访问

3、描述

修饰符本类同一个包中的类子类其他类
public可以可以可以可以
protected可以可以可以×
默认的default可以可以××
private可以×××

八、主方法的解释

1、主方法:public static void main(String[] args) {}

2、public,关键字;权限修饰符;含义:公开的,最高权限 主方法由JVM调用,语言和语言之间

的相互调用,需要使用最高权限

3、static,关键字,含义:静态

主方法由JVM自动调用,设置为静态可以不同创建对象来调用,并且在调用main方法的时候也来

不及创建对象,所以只能用静态的。JVM是C语言编写的,C语言是面向过程的,没有对象,只能

使用静态

4、void,关键字,含义:无返回值类型

主方法由JVM自动调用,JVM是C语言写的,C是面向过程的,并且就算有返回值返回,返回给虚拟机也没有任何意义

5、main,不是关键字;含义:主要的

在JVM中,需要执行某个类的时候,只执行main方法,在JVM的代码中,已经将要访问的方法,

作为程序的入口写死了,我们在起名字的时候,不要写main

有关封装的概述的更多相关文章

  1. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  2. ruby-on-rails - 如何在 Ruby 中封装包含的模块方法? - 2

    我希望能够在包含该模块的类无法访问的模块中拥有方法。给定以下示例:classFooincludeBardefdo_stuffcommon_method_nameendendmoduleBardefdo_stuffcommon_method_nameendprivatedefcommon_method_name#blahblahendend我希望Foo.new.do_stuff爆炸,因为它试图访问模块试图对其隐藏的方法。不过,在上面的代码中,Foo.new.do_stuff可以正常工作:(有没有办法在Ruby中实现我想做的事情?更新-真正的代码classPlace"Place"}has_

  3. ruby - 如何在 Ruby Gem 中封装 Ruby C 扩展? - 2

    我找不到很多这方面的文档。如何打包gem,以便在安装gem时编译C扩展?特别是我想这样做:在Linux和MacOSX上,我想在安装gem时编译C扩展在Windows上,我想简单地安装一个预编译的.so对此的任何帮助,特别是示例源代码,都将非常有用:) 最佳答案 LuisLavena创造了rake-compiler只是为了这个目的。Homepage/GitHubGitHubWiki但是,您确定需要C扩展吗?关于C扩展的事情是,每个Ruby实现都有自己的C扩展API(而非基于C的API,如XRuby、JRuby、Ruby.NET、Iro

  4. ruby - Ruby 的 "Open Classes"会破坏封装吗? - 2

    在Ruby中,程序员可以更改预定义的类。所以一个非常糟糕的程序员可能会做这样的事情:classStringdef==(other)returntrueendend显然,几乎没有人会这么蠢,但是对预定义类进行更细微的更改可能会导致已经运行的代码出现问题的想法在我看来违反了封装原则。四个问题:首先,这是否实际上违反了面向对象的封装原则?其次,作为一名程序员,有没有一种方法可以保证我正在使用类的未修改版本的代码?第三,我应该在我的代码中“打开”类吗?原因?最后,在大规模生产编码环境中如何处理这类事情?换句话说,编程行业的人真的用其他人的代码来做这件事吗?将使用?或者即使他们不这样做,你如何确

  5. Ruby 语言备忘单/海报/引用/概述? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我是一个喜欢视觉的人,想知道是否有关于Ruby的不错的大概览。你知道,就像一张引用海报,带有对象层次结构,最常用的方法等等,都是彩色的,布局清晰明了...对于像我这样的初学者来说,这会很棒......有没有你使用或偶然发现的类似东西?

  6. javascript - 如何封装mocha `expect()`代码? - 2

    我正在尝试测试是否存在一些我希望在所有测试中都需要的api响应属性(status和data属性)。这是一个通用测试,它断言supertest中的所需属性expect()方法:it('shouldcreateawidget',done=>{letstatus=200;request(test_url).post('/api/widgets').set('Authorization',`Bearer${token}`).send({sku:my_widget_data.sku,name:my_widget_data.name,description:''}).expect(res=>{as

  7. javascript - Angular Component 的 CSS 封装是如何工作的? - 2

    我想明白如果我创建两个样式表样式1.heading{color:green;}样式2.heading{color:blue;}现在如果这两个样式分别写在两个不同的View中,渲染的时候在布局上作为PartialView,那么在这种情况下可能会发生冲突一个可以覆盖另一个的样式。但是使用angular(见第16页),这两种不同组件的样式怎么封装在同一个页面上渲染呢?为什么CSS没有被覆盖?例如import{Component}from'@angular/core';@Component({selector:'app-user-item',template:'abc',styleUrls:[

  8. javascript - Visual Studio 2015 Javascript 概述方式太多 - 2

    VisualStudio2015接缝勾勒出所有多行javascript代码。我有一个像这样的简单代码:$(document).ready(function(){varx={test1:1,test2:2};if(1==1){//thisisatest}});当我按下Ctrl+k,Ctrl+O时,VisualStudio2015会这样概括它:是否可以关闭函数内的大纲?我只想要功能级别的大纲。 最佳答案 不,你做不到,但有优秀的WebEssentials可以在javascript中勾勒出区域!你在像这样的评论之后创建一个区域//#reg

  9. Go 封装http请求包Get、Post - 2

    之前已经封装过leveldb包.今天再把项目中经常会用到的一个技术封装成包,记录下来,仅供需要的小伙伴学习参考go如何封装包给别人和自己使用。有需要的小伙伴也可以在自己的项目中直接使用此包。这里小编以github为例(go的很多第三方包都在github上),其他平台大同小异。1.创建仓库去github上创建仓库,仓库命名为gorequest2.本地创建项目命名为gorequest。注意:因为go从1.11版本之后开始使用gomod管理包的版本。所以这里要想用gomod下载你封装的包,要生成go.mod文件gomodinit路径(路径要和你第一步创建的仓库路径保持一致)mkdirgoreques

  10. javascript - 封装在 Javascript 中 - 2

    我是Javascript的新手,我的SO个人资料可以证明这一点。我刚刚阅读了一些教程,遇到了一些我在应用Javascript时对面向对象和封装不完全理解的东西。教程指出Javascript对象可以这样声明:varmyCustomObject=newObject();你可以像这样给它实例变量:myCustomObject.myVariable="somevalue";myCustomObject.myOtherVariable="deadbeef";最后,它指出您可以创建一个模板函数来创建新对象,如下所示:functionCustomObject(myVariable,myOtherVa

随机推荐