封装

封装概述

封装,是面向对象思想的特征之一。面向对象共有三个特征:封装,继承,多态。

|------封装表现:

1.方法是最基本的封装体

2.类也是一个封装体.

封装的好处:

1、提高了代码的复用性。

2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。

3、提高了安全性。

私有private

描述人:Person
属性:年龄。
行为:说话:说出自己的年龄。
class Person {int age;String name;public void show() {System.out.println("age=" + age + ",name" + name);}
}
public class PersonDemo {public static void main(String[] args) {// 创建Person对象Person p = new Person();p.age = -20; // 给Person对象赋值p.name = "人妖";p.show(); // 调用Person的show方法
    }
}

将Person的属性和行为私有起来,这样就无法直接访问。
class Person {private int age;private String name;public void show() {System.out.println("age=" + age + ",name" + name);}
}

年龄被私有,错误的值无法赋值,正确的值也赋值不了,隐藏后,还需要提供访问方式。只要对外提供可以访问的方法,让其他程序访问这些方法。同时在方法中可以对数据进行验证。一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

class Person {// 私有成员变量private int age;private String name;// 对外提供设置成员变量的方法public void setAge(int a) {// 由于是设置成员变量的值,这里可以加入数据的验证if (a < 0 || a > 130) {System.out.println(a + "不符合年龄的数据范围");return;}age = a; }// 对外提供访问成员变量的方法public void getAge() {return age;}
}

总结:

类中不需要对外提供的内容都私有化,包括属性和方法。

以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。

注意:私有仅仅是封装的体现形式而已。

this关键字:

1.成员变量和局部变量同名的问题

当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?可以在成员变量名前面加上this.来区别成员变量和局部变量

class Person {
private int age;
private String name;
public void speak() {
this.name = "小强";
this.age = 18;
System.out.println("name=" + this.name + ",age=" + this.age);
}
}
class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
p.speak();
}
}

对象的内存解释:

class Person {private int age;public int getAge() {return this.age;}public void setAge(int age) {this.age = age;}
}
public class PersonDemo {public static void main(String[] args) {Person p = new Person();p.setAge(30);System.out.println("大家好,今年我" + p.getAge() + "岁");}
}

流程说明:

1、 先执行main方法(压栈),执行其中的 Person p = new Person();

2、 在堆内存中开辟空间,并为其分配内存地址,紧接着成员变量默认初始化(age = 0);将内存地址0x1234赋值给栈内中的Person p 变量

3、 继续执行p.setAge(30)语句,这时会调用setAge(int age)方法,将30赋值为setAge方法中的“age”变量;执行this.age = age语句,将age变量值30 赋值给成员变量this.age为30;

4、 setAge()方法执行完毕后(弹栈),回到main()方法,执行输出语句System.out.println(),控制台打印p对象中的age年龄值。

注意:

this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。

上述代码中的 p.setAge(30)语句中,setAge(int age)方法中的this代表的就是p对象。

this的应用:

class Person {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void speak() {System.out.println("name=" + this.name + ",age=" + this.age);}// 判断是否为同龄人public boolean equalsAge(Person p) {// 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较// 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替/** if(this.age == p.age) { return true; } return false;*/return this.age == p.age;}
}

转载于:https://www.cnblogs.com/q-1234/p/9712857.html

java的封装和this关键字知识整理相关推荐

  1. *Java软件开发面试知识整理*

    Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...

  2. 关于Java的JIT(即时编译器)知识整理

    文章目录 前言 一.JIT(即时编译器) 1.1 解释执行和编译执行的区别 1.2 Java代码编译过程 1.3 JIT是什么 二.HotSpot是什么 2.1 说JIT比解释快,其实说的是" ...

  3. keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...

    Keil软件"C语言"与"汇编"混编 相关知识整理 用Keil在C中嵌入汇编1 在Keil中嵌入汇编2 介绍直接嵌入汇编代码的方法4 采用汇编可能会有的好处5 ...

  4. Java私有方法运用场景_java6-3 封装和private关键字

    1.  private: 是一个权限修饰符 可以修饰成员变量和成员方法 被其修饰的成员只能在本类中被访问 定义一个学生类: 成员变量:name,age 成员方法:show()方法 2.我们在使用这个案 ...

  5. 局部变量和成员变量;Java的封装性;private关键字和this关键字

    局部变量和成员变量的区别: 定义的位置不一样[重点] 局部变量在方法内: 成员变量在方法外,类以内: 作用范围不一样[重点] 成员变量在整个类都可以用 默认值不一样[重点] 成员变量在没有赋值的情况下 ...

  6. 【Java Se】封装与常用关键字

    我们已经讲过一期类与对象了,如果你还没有看,恰好你对类与对象又不是很懂,建议你先去看一下再过来! 传送门-> Java的类与对象--你真的懂了吗?. 上一期我们主要讲了类与对象的一些关系以及组成 ...

  7. 【干货】java核心知识整理,阶段一:java基础之面向对象上

    面向对象概述 面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系.在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种 ...

  8. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  9. java中volatile_java中volatile关键字的含义

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

最新文章

  1. Python零散知识点记录
  2. linux php-fpm启动失败,linux运行php-fpm遇到问题
  3. Flash中的“插入关键帧”和“插入空白关键帧”的区别
  4. 如何查找SAP UI5控件ID
  5. 软件工程--第三章--需求分析
  6. C++11并发编程:多线程std::thread
  7. Java中如何实现代理机制(JDK、CGLIB)
  8. function里面可以写function吗_和田玉不戴的时候,可以长时间泡在水里面吗?
  9. linux setarch 命令,6.22. Util-linux-2.23.1
  10. vsftp限制ip地址访问
  11. 跨域通信——多窗口通信
  12. 心电图分析软件_动态心电图品牌排行榜
  13. 遗传算法讲解与实现(python)
  14. 2021电工杯B题股票预测思路分析程序示例及参考文献
  15. 虚拟机装xp 架设服务器,VMware安装虚拟机系统ghost xp sp3步骤图解
  16. 数学模型——人口增长模型(基于python)
  17. 修改整个app的字体
  18. 微博 用户画像_微博的用户画像是怎样构建的?
  19. 好看的php登录界面,php注册和登录界面的实现案例(推荐)
  20. 【python爬虫实战】【天天基金网】还在用余额宝存钱?5分钟教你学会筛选优质货币基金

热门文章

  1. NXP Pico i.MX7D上安装Android Things系统疑难杂症汇总
  2. Mysql主从复制集群类型和搭建方法
  3. Docker安装并配置阿里云镜像加速
  4. 未能卸载该设备.启动计算机,未能卸载该设备。启动计算机时可能需要该设备...
  5. android 两个imageview重叠,android-在现有ListVIew中添加更多项目时,ImageView重叠
  6. java兔子问题 递归_兔子问题 —— 递归的应用
  7. 使用Spring Boot Actuator 监控程序运行状态
  8. java实现数据库主键的更新_Java获取数据库自增主键表中插入数据的ID
  9. 中移4G模块-ML302-OpenCpu开发-MCP23017输入/输出
  10. pytorch自定义loss损失函数