Java的封装

30 篇文章 1 订阅

一、关于类图的设定

1、简述类图的画法

Dog
+name : String
+health : int
+show() : void
类名
+(public)属性名:类型
-(private)属性名:类型
+方法名( ):返回值类型

2、画类图的几个工具介绍

  • Visio

  Visio是office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。

  • Rose

  Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。

  • PowerDesigner

  PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。

二、构造方法

1、构造方法的介绍

构造方法是一种特殊的方法,它是一个与类同名且无返回值类型的方法。
构造方法的功能主要是完成对象的初始化。
对象的创建就是通过构造方法来完成,当类实例化一个对象时会自动调用构造方法。

2、语法说明:

访问修饰符 构造方法名 (数据类型 参数1,数据类型 参数2,… ) {
   //初始化代码
}

3、注意事项

在没有给类提供任何构造方法时,系统会提供一个默认无参构造方法。
一旦提供了自定义构造方法,系统将不再提供这个无参构造方法。如果要使用它,则必须手动添加

4、示例

public class Penguin {
String name = "无名氏"; 			// 昵称
int health = 100; 				// 健康值
int love = 0; 					// 亲密度
String sex = "Q仔";				// 性别
final String SEX_MALE = "雄";
final String SEX_FEMALE = "雌";
	/**
	 * 构造无参方法
	 */
   public Penguin() {
      name = "楠楠";
      love = 20;
      sex = SEX_MALE;
  }
}

三、方法重载

1、方法重载的主要说明

  在同一个类中方法名相同,通过参数个数和类型的不同来区分不同的方法,方法的重载跟返回值类型和修饰符无关

2、举例说明

类的代码

/**
 * @authorDesc 收获源于是每一分的努力
 * @author Jule_zhou
 * @date 2022-07-26 21:29:35
 * @version
 * @description
 */
public class StudentsInf {
    public void show(){
        System.out.println(45);
    }
    public void show(int a){
        System.out.println(a);
    }
    public void show(double s){
        System.out.println(s);
    }
    public int show(int a,double s){
        System.out.println(a);
        System.out.println(s);
        return 0;
    }
    public int show(double s,int a){
        System.out.println(a + s);
        return 0;
    }
}

测试类的使用

/**
 * @authorDesc 收获源于是每一分的努力
 * @author Jule_zhou
 * @date 2022-07-26 21:37:55
 * @version
 * @description
 */
public class TestStudent {
    public static void main(String[] args) {
        StudentsInf studentsInf =new StudentsInf();
        studentsInf.show();
        studentsInf.show(45);
        studentsInf.show(45.0);
        studentsInf.show(45,45.0);
        studentsInf.show(45.0,45);
    }
}

代码对照:
在这里插入图片描述

3、实际运用

public class Calc {

   public int getResult(int num1, int num2) {
        return num1 + num2;
    }

   public double getResult(double num1, double num2,     double num3) {
        return num1 + num2 + num3;
   }
}

四、构造方法

1、构造方法语法说明

在创建对象时,完成不同属性的动态赋值
构造方法的方法名与类名一致,该方法无返回值

public class 类名{
	成员变量1;
	成员变量2;
	// 无参构造
	public 类名() {
	}
	// 有参构造 
	public 类名(形参1,形参2) {
	}
}
public class Penguin {
	// 成员变量的声明
	String name;
	int health;
	int love;
	String sex;
	// 无参构造方法
	public Penguin() {
	}
	// 有参构造方法1
	public Penguin(String name, String sex) {
		this.name = name;
		this.sex = sex;
	}
	// 有参构造方法2
	public Penguin(String name, int health, int love, String sex) {
		this.name = name;
		this.health = health;
		this.love = love;
		this.sex = sex;
	}
}

2、关于构造方法的重载说明

在这里插入图片描述

五、static修饰符

1、对于static的使用说明

  • static可以用来修饰属性方法代码块
  • static修饰的变量属于这个类所有,即由这个类创建的所有对象共用同一个static变量。
  • 通常把static修饰的属性和方法称为类属性类方法,不使用static修饰的属性和方法属于单个对象,通常称为实例属性实例方法

2、对于static的详解

  • 被static修饰的属性方法代码块将具有较高执行的优先级,在类的变量声明时会优先执行static修饰的属性、方法和代码块。
  • 在同属static修饰时,依照代码的先后进行执行。
  • static修饰的内容,独属于这个类

3、对于static修饰的内容,独属于这个类的讲解

类的代码

/**
 * @authorDesc 收获源于是每一分的努力
 * @author Jule_zhou
 * @date 2022-07-26 22:05:50
 * @version
 * @description
 */
public class Trys {
    // 用static修饰的
    static String name ;
    
    // 未用static修饰的
    String text ;
}

测试类代码

/**
 * @authorDesc 收获源于是每一分的努力
 * @author Jule_zhou
 * @date 2022-07-23 15:17:31
 * @version
 * @description Account测试类
 */
public class TestTrys {
    public static void main(String[] args) {
        Trys trys1 = new Trys();
        Trys trys2 = new Trys();

        trys1.name = "小明";
        System.out.println("trys1:" + trys1.name);
        trys2.name = "小红";
        System.out.println("*******分割线*******");
        System.out.println("trys1:" + trys1.name);
        System.out.println("trys2:" + trys2.name);

        System.out.println("***************分割线***************");
        trys1.text = "结果1";
        System.out.println("trys1:" + trys1.text);
        System.out.println("*******分割线*******");
        trys2.text = "结果2";
        System.out.println("trys1:" + trys1.text);
        System.out.println("trys2:" + trys2.text);

    }
}

测试类执行结果

trys1:小明
*******分割线*******
trys1:小红
trys2:小红
***************分割线***************
trys1:结果1
*******分割线*******
trys1:结果1
trys2:结果2

Process finished with exit code 0

  此时可以发现,经过static修饰过的内容,无论是trys1还是trys2,只要做出改变,另外的对象也会发生改变,因为static修饰过的内容独属于类本身,不会因创建的对象改变而发生改变,如果发生生改变,所有的对象引用的类都会发生改变。

4、代码示例

package com.bdqn.ready;

/**
 * @authorDesc 收获源于是每一分的努力
 * @author Jule_zhou
 * @date 2022-07-26 22:32:15
 * @version
 * @description
 */
public class Trys {
    static int i = 20;
    static int m = 30;
    int j;
    int k = 25;
    
    static{
        i = 10;
        System.out.println("i的初始值是:" + i);
        //System.out.println("test static 1");
    }
    /*static{
        i = 30;
        System.out.println("i的初始值是:" + i);
        //System.out.println("test static 2");
    }*/
    public Trys(){
        j = 20;
        System.out.println("j的初始值是:" + j);
        //System.out.println("对象创建时i的值是:" + i);
        //getNum();
    }
    public static void getNum(){
        System.out.println("得到的i的值:" + i);
        //get();
    }
    /*public void get(){
        //static int i = 0;
    }*/
    public static void main(String[] args) {
        System.out.println(Trys.i);
        Trys trys = new Trys();
        /*Trys trys2 = new Trys();*/


        /*System.out.println(trys.i);
        trys.i -= 5;
        System.out.println(trys2.i);

        System.out.println("**************************");
        System.out.println(trys.k);
        trys.k -= 5;
        System.out.println(trys2.k);*/
        System.out.println("i的值为:" + Trys.i);
        Trys.getNum();
        System.out.println("m的值是:" + trys.m);
        System.out.println("k的值是:" + trys.k);
    }
}

5、static修饰符总结

  • 在加载类的过程中,完成静态变量的内存分配,再执行静态块,两者是在创建对象之前执行的。
  • 类属性和类方法可以通过类名和对象名访问,实例属性和实例方法只能通过对象名访问。
  • 类方法只能访问类属性和其他类方法,不能使用this和super关键字。
  • 实例方法中不可以定义static变量

6、static修饰和非static修饰的区别

static、非private修饰非static、private修饰
属性类属性、类变量实例属性、实例变量
方法类方法实例方法
调用方式类名.属性
类名.方法()
对象.属性
对象.方法()
对象.属性
对象.方法()
归属单个对象

六、封装

1、封装简介

  将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 。
在这里插入图片描述

2、封装的优点

  • 便于使用者正确使用系统,防止错误修改属性
  • 有助于系统之间的松耦合,提高系统独立性
  • 提高软件的可重用性
  • 降低了构建大型系统的风险

3、封装的具体步骤

Created with Raphaël 2.3.0 1、修改可见属性>>>>设为private 2、创建公有的getter/setter方法>>>>用于属性的读写 3、在getter/setter方法中加入属性控制语句>>>>对属性值的合法性进行判断

在这里插入图片描述

4、权限修饰符的作用范围说明

封装时会用到多个权限修饰符来修饰成员变量和方法

  作用域
修饰符  
同一个类中同一个包中子类中任何地方
private可以不可以不可以不可以
默认修饰符可以可以不可以不可以
protected可以可以可以不可以
public可以可以可以可以

5、封装示例

public class Dog {
    private String name = "旺财"; 			// 昵称
    private int health = 100; 				// 健康值
    private int love = 0;  					// 亲密度
    private String strain = "拉布拉多犬"; 	// 品种
    public int getHealth() {
        return health;
    }
    public void setHealth (int health) {
        if (health > 100 || health < 0) {
            this.health = 40;
            System.out.println("健康值应该在0和100之间,默认值是40");
        } else
            this.health  =  health;
    }
    // 其它getter/setter方法
}

6、在IDEA中的快捷使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终效果:

package com.bdqn.ready;
/**
 * @authorDesc 收获源于是每一分的努力
 * @author Jule_zhou
 * @date 2022-07-26 23:09:42
 * @version
 * @description
 */
public class Trys {
    private int i;
    private int m;
    private int j;
    private int k;

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public int getM() {
        return m;
    }

    public void setM(int m) {
        this.m = m;
    }

    public int getJ() {
        return j;
    }

    public void setJ(int j) {
        this.j = j;
    }

    public int getK() {
        return k;
    }

    public void setK(int k) {
        this.k = k;
    }
}

七、知识梳理

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jule_zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值