JAVA笔记整理(四),JAVA中的封装

什么是封装

所谓的封装就是把数据项和方法作为一个独立的整体隐藏在对象的内部,具体的实施细节不对外提现,仅仅保留有限的外部接口,封装外的用户只能通过接口来进行操作。就好比开启一台电脑需要进行很多个步骤,电源供电、BIOS自检、查找硬件等等一系列动作,而我们只需要按下开机按钮,其余的动作都是电脑内部完成的,这里就可以看作是电脑对启动的一系列动作进行了封装,给提供了开机按钮供我们调用。

为何需要封装

首先,从程序安全性上来说,暴露在外面的细节被隔离掉,要想修改内部的数据,必须使用提供的特定方法,而这些方法中又做了限制,可以确保值设置合法的值。

其次,封装后的程序只对外提供特定的接口以供调用,而其内部如何实现与外界无关,所以当修改程序的时候,只要保证接口正确,其内部如何实现可以自己随意去修改,而不用担心会受到外界值的影响。

JAVA中的权限控制符

private:只能自己访问使用

public:允许所有外部类访问使用

protected:允许子类和同包类访问使用

default:只允许同类或同包使用

JAVA中的包

JAVA中为了解决类的命名问题,实现类文件的管理引入的包机制。通常我们将一组功能相同的类放在同一个包下,从而形成逻辑上的类的集合。

程序的第一行使用    

package 包名

   来表示该类位于某个包中。一旦类中使用的package语句,就意味着该源文件里面定义的所有类都属于这个包。

如果要使用其他包中的类,则需要是用import关键字来导入指定包下的某个类。

java中的常用包:

java.lang:该包包含了JAVA语言的核心类,如String、Math、System和Thread等,使用这个包下的类无须使用import语句导入,系统会自动导入该包下的所有类

java.util:这个包包含了JAVA的大量工具类、接口和集合框架类、接口,例如Arrays和List、Set等

java.net:这个包下包含了一些JAVA网络编程相关的类和接口

java.io:这个包包含了一些JAVA输入输出的相关类和接口

java.sql:这个包包含了JAVA进行JDBC数据库变成的相关类和接口

如何封装

1、把所有的属性藏起来。

2、把尽可能多的东西藏起来.对外提供简捷的接口。

3、对操作接口进行合法性验证

class Animal {
    // 定义private权限的name和age属性
    private String name;
    private int age;

    // 提供对外使用的getName、setName、getAge和setAge方法
    // 在方法内部进行合法性验证
    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length() <= 0) {
            System.out.println("名字太短啦");
        } else {
            this.name = name;
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age <= 0) {
            System.out.println("年龄太小啦");
        } else {
            this.age = age;
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        // 执行时候,如果直接使用animal.name,系统会抛出异常
        // Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        // The field Animal.name is not visible

        // animal.name = "dog";

        //必须使用animal.setName()来设置其name属性
        //animal.setName("");//直接传入空字符串,又会提示“名字太短啦”
        animal.setName("dog");
    }
}

JAVA中的this

this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认引用有两种情形:

1.构造器中引用该构造器正在初始化的对象

  

public class ThisDemo {
    // 定义一个名为num的成员变量
    public int num;

    public ThisDemo () {
        // 使用this代表该构造器正在初始化的对象
        // 下面的代码将会把该构造器正在初始化的对象的foo成员变量设为6
        this.num= 6;
    }

    public static void main(String[] args) {
        // 所有使用ThisDemo 创建的对象的num成员变量均为6
        System.out.println(new ThisInConstructor().num);
    }
}

2.在方法中引用调用该方法的对象

public class Dog {
    // 定义一个jump()方法
    public void jump() {
        System.out.println("正在执行jump方法");
    }

    // 定义一个run()方法,run()方法需要借助jump()方法
    public void run() {
        this.jump();
        System.out.println("正在执行run方法");
    }
}

如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用this前缀。

public class Test {
    private int num = 13;

    public void setNum(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.setNum(15);
        System.out.println(t.getNum());
    }
}

this引用也可以用于构造器中作为默认引用,由于构造器是直接使用new关键字来调用,而不是使用对象来调用,所以this在构造器中代表该构造器正在初始化的对象

public class ReturnThis {
    public int age;

    public ReturnThis grow() {
        age++;
        // renturn this返回调用该方法的对象
        return this;
    }

    public static void main(String[] args) {
        ReturnThis rt = new ReturnThis();
        // 可以连续调用同一个方法
        rt.grow().grow().grow();
        System.out.println("re的age成员变量值是:" + rt.age);  //re的age成员变量值是:3
    }
}

this()表示调用构造方法(需注意:构造函数调用必须在构造函数中的第一条语句)

public class Test {
    public Test() {
        System.out.println("无参构造函数");
    }

    public Test(int num) {
        this();
        System.out.println("一个参数的构造函数");
    }

    public static void main(String[] args) {
        Test t = new Test(2);
    }
}

//输出结果为:无参构造函数     一个参数的构造函数
时间: 2024-09-29 17:47:22

JAVA笔记整理(四),JAVA中的封装的相关文章

Python学习笔记整理(四)Python中的字符串..

字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'\temp\diege' Raw字符串 抑制(取消)转义,完全打印\tmp\diege,而没有制表符 T5=u’diege' Unicode字符串 T1+T2     合并 T1*3    重复 T2[i]    索引 T2[i:j] 分片

java笔记整理

Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, Ejb, java和模式 Linux/Unix笔记 inode :存储编号(地址) ls -k:查看磁盘分区 ls -li:显示当前文件的inode号. 目录的大小跟文件的大小有关,跟目录里的文件(目录)数量无关. 一行多个命令的话,中间用分号分开.如:pwd;cal;date last | grep

Cocos2dx 学习笔记整理----在项目中使用图片(初)

cocos2dx有多种使用图片的方法,先来个最简单的:用CCSprite直接使用图片. 首先,进入到之前建立的项目,把你将要使用的图片放入到目录下的Resources文件夹里面.项目中以相对路径使用资源皆是以Resources文件夹为根目录参考的. 然后进入到HelloWorldScene.cpp的init方法的最后面加入以下代码: ? 1 2 3 CCSprite * sprite = CCSprite::create("bl_24.png"); sprite->setPosi

Cocos2dx 学习笔记整理----在项目中使用图片(二)

之前了解了一种比较简单的图片的使用方式, 今次来了解稍微复杂一点的图片使用方式,plist+png. 这里要用到之前提到的Texture Packer. Texture Packer是一款图片打包工具,Texture Packer可以将素材打包成我们项目需要的格式. Cocos2dx支持很多种格式, 我们可以将某一种类的或者有共性的图片打包到一个png,然后用plist管理,以节约加载和内存,且显卡支持的纹理尺寸的长宽为2的n次幂,Texture Packer会把纹理整合到次尺寸. 今次我们利用

5.3-全栈Java笔记:面向对象特征(二)封装、多态

封装(encapsulation) 封装的作用和含义 我要看电视,只需要按一下开关和换台就可以了.有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关.具体怎么内部实现的,我们不需要操心. 需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来.这就是封装. 我们程序设计要追求"高内聚,低耦合". 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量的方法给外部使用,

Java笔记十四.深入理解类和对象(1)

Java是一种完全面向对象的编程语言(C是面向过程).所谓面向对象编程(OOP),即是一种编程风格,它通过给程序中加入扩展语句,把函数"封装"进编程所必需的"对象"中.OOP 达到了软件工程的三个主要目标:重用性.灵活性和扩展性.其实,面向对象就是把一切东西看成一个个对象,比如人,车,面包,等等,然后把这些对象拥有的属性变量,比如年龄,民族,工作地点,变质期,寿命,还有操作这些属性变量的函数(方法)打包成一个类来表示,这个类的一个抽象就是一个对象.在Java程序中,

Java 笔记(四) RTTI - 运行时类型检查

运行时类型检查,即Run-time Type Identification.这是Java语言里一个很强大的机制,那么它到底给我们的程序带来了什么样的好处呢? 在了解运行时类型检查之前,我们要首先知道另一个密切相关的概念,即运行时类型信息(Run-time Information - 也可以缩写为RTTI) 运行时类型信息使得你可以在程序运行时发现和使用类型信息. 来自:<Thinking in Java>. OK,那么我们总结来说,RTTI就是能够让我们在程序的运行时去获取类型的信息.接下来我

JAVA笔记整理(一),JAVA介绍

JAVA语言的版本: J2SE(Java2 Platform Standard Edition,java平台标准版),后更名为:JAVA SE J2EE(Java 2 Platform,Enterprise Edition,java平台企业版),后更名为:JAVA EE J2ME(Java 2 Platform Micro Edition,java平台微型版),后更名为:JAVA ME 跨平台 “一处编写,到处运行”,写好的JAVA代码由JAVA源码编译器来编译生成字节码文件,然后交由JAVA虚

JAVA基础整理-50.Java继承和多态

Java类的封装 封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏. Java类的继承:Java简单的继承及单继承和多继承的区别 简单继承 注意:类的继承并不改变类成员的访问权限.也就是说,如果父类的成员是公有的.被保护的或默认的,它的子类仍具有相应的这些特性. extends 关键字直接跟在子类名之后,其后面是该类要继承的父类名称.例如: public class Student extends Person{} 注意:如果在父类中存在有参的构造方法