Java封装

1、面对对象设计的基本步骤

1、发现类
2、发现类的属性
3、发现类的方法

2、使用类图描述面向对象设计

程序设计是一个逐步调整、完善的过程,类图是面向对象设计的图纸,使用图纸进行设计方便沟通和修改。
在这里插入图片描述

3、绘制类图工具

1、Visio
Visio是office软件系列中负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。
2、Rose
Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。
3、Power Designer 是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并未研发生命周期管理提供强大的分析与设计技术。

4、构造方法

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

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

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

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

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;
  }
}

方法重载:
在同一个类中,方法名相同,通过参数个数和类型的不同来区分不同的方法,方法的重载跟返回值类型和修饰符无关。
方法重载的优点:
方法重载其实是对一般方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,只要记住一个方法即可。

实例构造方法重载:

package come.bdqn.Exercise;

public class Excise1 {
    /**
     * 名字属性
     */
    String name;
    /**
     * 年龄属性
     */
    int age;
    /**
     * 性别属性
     */
    char gender;
    //带两个参数的方法
    public void Excise1(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println(name + "\t" + age);
    }
    //带三个参数的方法,方法名相同个数不同
    public void Excise1(String name,int age,char gender){
        this.name = name;
        this.age = age;
        this.gender  = gender;
        System.out.println(name + "\t" + age + "\t" + gender);
    }
    //带三个参数的方法,方法名相同顺序不同
    public void Excise1(String name,char gender,int age){
        this.name = name;
        this.gender  = gender;
        this.age = age;
        System.out.println(name + "\t" + gender+ "\t" + age );
    }
}

在创建对象中的使用根据参数不同可以重复使用

package come.bdqn.Exercise;

public class TestMethod {
    public static void main(String[] args) {
        //创建对象
        Excise1 excise1 = new Excise1();
        //调用方法
        excise1.Excise1("张三",20);
        excise1.Excise1("李四",18,'男');
        excise1.Excise1("王五",'男',21);
    }
}

this关键字是对一个对象的默认引用,这里用以区分同名成员变量

5、static 修饰符

this关键字是对一个对象的默认引用,这里用以区分同名成员变量
static可以用来修饰属性、方法和代码块
static修饰的变量属于这个类所有,即由这个类创建的所有对象共用同一个static变量。
通常把static修饰的属性和方法称为类属性和类方法,不使用static修饰的属性和方法属于单个对象,通常称为实例属性和实例方法
实例:

package come.bdqn.Exercise;

/**
 * static
 */
public class Exercise2 {
   
        static int i = 20;
        static int m = 30;
        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");
        }

        int j;
        int k = 25;

        public Exercise2(){
            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(Exercise2.i);
            Exercise2 staticTest = new Exercise2();
            Exercise2 staticTest2 = new Exercise2();


        System.out.println(Exercise2.i);
            Exercise2.i -= 5;
        System.out.println(Exercise2.i);

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

6、static修饰符总结

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

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

7、封装

封装:面向对象三大特征之一
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 。
封装的两大原则:
1、把尽可能多的东西藏起来,对外提供便捷的接口
2、把所有的属性藏起来

1、封装的好处

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

2、封装的具体步骤

1、修改属性的可见性--------设为private
2、创建共有的getxxx/setxxx方法------用于属性的读写
3、在getxxx/setxxx方法中加入属性控制语句----对属性值的合法性进行判断

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

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

this关键字是对一个对象的默认引用。在每个实例方法内部,都有一个this引用变量,指向调用这个方法的对象。
1、调用属性
使用this调用成员变量,解决成员变量和局部变量的同名冲突

this.health = 100;
this.name = "二哈"

2、调用方法
使用this调用成员方法,this可以省略,直接调用print();

this.pritn();

3、调用构造方法
如果使用this调用重载的构造方法,只能在构造方法中使用,必须是构造方法的第一条语句

this();
this("二哈",100,100,"雄")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值