封装

  • 该露的露,该藏的藏

    • 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
  • 封装(数据的隐藏):通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

  • 记住这句话就够了:属性私有,通过get/set来操作

学生类:
// 类,它的核心就是封装,private:私有的
public class Student {
// 属性私有
// 名字
private String name;
// 学号
private int id;
// 性别
private char sex;
// 年龄
private int age; // 提供一些可以操作这些属性的方法
// 通过get、set方法 // get 获得这个数据
public String getName(){
return this.name;
} public int getId(){
return this.id;
} public char getSex(){
return this.sex;
} public int getAge(){
return this.age;
} // set 给这个数据设置值
public void setName(String name){
this.name = name;
} public void setId(int id){
this.id = id;
} public void setSex(char sex){
this.sex = sex;
} public void setAge(int age){
if(age >=120 || age <= 0){
this.age = age;
} }
调用:
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("王二小"); System.out.println(s1.getName());
}
  • 封装的意义

    1. 提高程序的安全性,保护数据。
    2. 隐藏代码的实现细节。
    3. 接口的统一管理。
    4. 系统可维护性的提升。

实体类

  • 实体类是一种特殊形式的类。
  • 这个类中的成员变量必须私有,并且要对外提供相应的get/set方法,类中必须有一个公共的无参构造器。一般情况也会提供一个有参构造器。

作用:

  1. 实体类的对象本身可以用于存储数据。
  2. 实体类的对象只负责数据的存取,对于数据的业务处理应该交给另一个对象来处理实现。这是软件设计中很流行的一种设计思想:分层思想。

    案例
/**
* Student:实体类
*/
public class Student {
private String name;
private int age;
private double score;
private double height; // 无参构造
public Student() {
}
// 有参构造
public Student(String name, int age, double score, double height) {
this.name = name;
this.age = age;
this.score = score;
this.height = height;
} 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 double getScore() {
return score;
} public void setScore(double score) {
this.score = score;
} public double getHeight() {
return height;
} public void setHeight(double height) {
this.height = height;
}
} // 业务处理类
public class StudentOperator {
private Student s; public StudentOperator() {
} // 有参构造
public StudentOperator(Student s){
this.s = s;
}
public void printPass(){
if(s.getScore() >= 60){
System.out.println(s.getName() + ",他及格了!");
}
else{
System.out.println(s.getName() + ",他没及格!");
}
}
} main方法:
public static void main(String[] args) {
Student s1 = new Student("王志博", 21, 99.9, 1.75);
StudentOperator so = new StudentOperator(s1); so.printPass();
} 输出结果:
王志博,他及格了!

String的概述

  • String代表字符串,可以用来创建对象封装字符串数据,并对其进行处理。

  • String创建对象封装字符串的方式:

    1. java程序中的所有字符串文字(例如“abc”)都为此类的对象。
    2. 调用String类的构造器初始化字符串对象。

String name = "";
String name1 = new String(); 这两种方式创建的对象效果是一样的,但是更推荐第一种。

String提供的常用方法



案例

public class StringDemo01 {
public static void main(String[] args) {
// 目标快速熟悉String提供的处理字符串的方法
String name = "i love java so good"; // 1. 获取字符串长度
System.out.println("字符串长度:"+ name.length()); // 2. 提取字符串中某个索引位置处的字符
System.out.println(name.charAt(2)); // 3. 字符串的遍历
for(int i = 0; i < name.length(); i++){
System.out.println(name.charAt(i));
} // 4.把字符串转换成字符数组
char[] cr = name.toCharArray();
for (int i = 0; i < cr.length; i++) {
System.out.println(cr[i]);
} //5. 判断字符串内容是否一致,内容一样就返回true(重点)
String s1 = new String("qazwsx");
String s2 = new String("qazwsx");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2)); // 6. 忽略大小写比较字符串内容(验证码比较)
String t1 = "aStg";
String t2 = "astg";
System.out.println(t1.equals(t2));
System.out.println(t1.equalsIgnoreCase(t2)); // 7. 截取字符串内容
System.out.println(name.substring(0,5)); // 8. 从当前位置一直截取到末尾
System.out.println(name.substring(5)); // 9. 把字符串中的某个内容替换成新内容,并返回新的字符串
String info = "这个游戏简直TM就是垃圾,SB,去你大爷!";
System.out.println(info.replace("TM","**").
replace("SB","**").
replace("去你大爷", "****")); // 10. 判断字符串中是否包含关键字
System.out.println(name.contains("love")); // 11. 判断字符串是否以什么内容开头
System.out.println(name.startsWith("i")); // 12. 判断字符串是否以什么内容结尾
System.out.println(name.endsWith("you")); // 13. 把字符串按照制定内容切割成多个字符串(重要)
String seg = "王一博,刘晓明,陈伟健,王宝强";
String[] names = seg.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
} // 14. 把字符串转成大写
System.out.println(name.toUpperCase()); // 15. 把字符串转成小写
System.out.println(name.toLowerCase()); // 16. 去除字符串两端的空格
String str = " 我是一个字符串 ";
System.out.println(str.trim());
}
}

09Java基础之封装的更多相关文章

  1. 二十四. Python基础(24)--封装

    二十四. Python基础(24)--封装 ● 知识结构   ● 类属性和__slots__属性 class Student(object):     grade = 3 # 也可以写在__slots ...

  2. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

  3. JavaSE基础之封装

    JavaSE基础之封装 一.Java中的封装 1.字面意思: 包装: 2.专业含义: 面向对象的三大特征之一: 指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所 ...

  4. 九、Java基础---------面向对象封装、继承、多态

    封装 1.1 基本概念  封装(encapsulation)是面向对象三大特征之一,它是指将对象的状态信心隐藏在对象的内部,不允许外部直接进行访问,而是通过该类提供的方法来实现对内部信息的操作和访问. ...

  5. C++基础——类封装简单示例

    一.前言 在IC前端设计/验证领域,只会HDL远远不够.目前大多数项目使用已开发好的系统架构和IP Core,因此设计部分的工作量慢慢向系统集成和验证方向转移.而在集成和验证过程中,往往以各种脚本和面 ...

  6. Python基础之封装

    一.什么是封装 在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其 含义是其他程序无法调用. 要了解封装,离不开“私有化”,就是将类或者 ...

  7. C++ Any 任意基础类型封装

    下面是本人使用C++封装的一个针对任意基础类型以及用户自定义类型指针的通用类型.目的是为方便常用类型使用统一化及便利化.该类型的使用就与平时使用基础类型基本没什么差别.具体可参看以下代码及测试代码. ...

  8. python开发面向对象基础:封装

    一,封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内 ...

  9. video基础介绍&封装react-video基础组件,ES6

    好几个月没有写博客了,人都赖了,今天抽了一点时间把最近项目react中video整理了一下(感觉这个以后用的活比较多) 1.前三部部分详细归纳了video的基础知识,属性和功能: 2.第四部分是封装了 ...

  10. Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态

    一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

随机推荐

  1. Java基础之“Double类型,保留两位小数,避免因小数过长导致乱码问题”

    保留两位小数 方案一 Double totalSaleAmount = 4.174558045899999E7; DecimalFormat df = new DecimalFormat(" ...

  2. Flutter视频压缩技术:如何在应用中优化视频文件的质量和大小?

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  3. Nacos源码—9.Nacos升级gRPC分析四

    大纲 10.gRPC客户端初始化分析 11.gRPC客户端的心跳机制(健康检查) 12.gRPC服务端如何处理客户端的建立连接请求 13.gRPC服务端如何映射各种请求与对应的Handler处理类 1 ...

  4. 用AI做了个动态下发微信群二维码应用

    微信群的二维码每周都要更新一次,比较麻烦.于是搞了个简单的上传/下发的 Web 应用. 下面是优化前后流程,虽然看似步骤少了一步,但大大节省了时间. 主要功能 常见类型图片上传,支持删除,提供外链访问 ...

  5. Pycomcad快速绘制参数化多段线的一种方法

    任务: 绘制出不同长度的相同型式的多段线,如上图所示,仅仅是300mm和500mm的区别,3个弯折处都一样,都是圆弧段,对于常规二次开发思路,是通过数学计算,计算出圆弧的圆心的位置,用固定的半径,绘制 ...

  6. [Redis] Redis (7) 连接与会话管理

    序:文由 因今日排查问题,发现微服务因 ERR max number of clients reached (已达到客户端的最大数量) redis异常,而导致服务在健康检测时未通过,进而导致高频宕机. ...

  7. Spring Boot中使用注解实现简单工厂模式

    前言 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂模式(Simple Factory Pattern),但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出接 ...

  8. IDEA 调试Java代码的两个技巧

      本文介绍两个使用IDEA 调试Java代码的两个技巧: 修改变量值 使用RuntimeException终止代码执行 修改变量值   在Java代码调试过程中,我们可以修改变量值,使其达到走指定分 ...

  9. 如何用看板系统打造中小企业的AI时代敏捷工作流?

    一.敏捷与看板:AI浪潮下企业协同的"底层重构" 在AI工具和数字平台井喷式发展的今天,敏捷已不再是IT行业专属概念,而成为企业组织效率提升的共识.看板系统作为敏捷核心机制之一,正 ...

  10. Centos7.x根分区扩容

    背景说明 我们在部署好的系统中,随着数据的不断增加, 发现根分区频繁出现满载问题,这种情况下,我们需要对根分区进行扩容. 方案说明 • 使用空闲磁盘扩容到根分区 • 使用空闲的分区扩容到根分区 • 使 ...