Java中的封装

什么是封装

  • 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
    封装是一种将代码与其处理的数据结合起来,而不被外界干扰和滥用的程序设计机制。该逻辑单元负责将所描述的属性隐藏起来,外界对客体内部属性的所有访问只能通过提供的用户接口实现。封装可以隐藏实现细节,并对外提供了公共的访问方式

抽象

  • 抽象是人类解决问题的基本法宝。良好的抽象策略可以控制问题的复杂程度,增强系统的通用性和可扩展性,抽象主要包括过程抽象和数据抽象

范围限定词: 不被外界干扰和滥用的程序设计机制,封装隐藏实现细节,用于约束访问,主要用在方法和属性的定义上,用于限制针对方法和属性的访问。

在Java中可以使用限制有4种:

  1. private 私有的,当前类可见
  2. protected 受保护的、默认(就是没有限定词default / package),同包和子类中可见
  3. public 公共的,到处可见

没有范围限定词,只能在同包中访问,相同的代码,在不同的包中相同的代码都会报错

class上的限定词

定义类的方法实际上有2种,一种定义在另外一个类的内部(内部类),还有一种是外部类。定义类时可以使用限定词。

一个“.java”文件中可以定义无数个非public的类,(类名称不能重复),但是只能定义一个public class,而且要求文件名称和公共类名称必须一致(java是严格区分大小写)。

在执行应用时必须指定对应的哪个类是启动的类,一般默认的公共类就是启动类(main方法),如果public class中没有定义主方法,实际上启动会报错。

public class T1{
    public static void main(String[] args){
        System.out.println("T1 main");
        }
  }
 class B1{
     public static void mian(String[] args){
     }
 }

在编译过程中IDE工具会弹出窗口,提示main方法的位置,可以选择对应的启动类。

src默认用于存放源代码,bin默认用于存放编译后的字节码文件。

**如果一个.java文件包含多一个class定义,则编译结果是多个字节码文件。**在命令行执行则不会出现任何文件,因为java后面跟的是具体类名

注意:在具体的开发中一般不使用在一个.java文件中存放多个class定义,除非是特殊需求

public class到处可用,class只能在同包中访问,private当前类内可见,protected表示同包或者子类中可见,默认表示同包可见

package和import

在Java编程团队开发中可能会出现类同名,为了避免命名冲突,可以引入package,实际上充当名空间的作用。package将一些类组合在一起,起到命名空间的作用,在一定程度上可以避免出现类名冲突的问题。

语法: package 包名;

命名规则:使用域名反转的方式进行命名,使用全小写。

创建包有2种常用方式:1、直接创建包。2、定义类时指定所属的包,自动创建这个包。

在Java中为了方便开发,会将多个功能相似的类放在一个组内,而这个组就是包,包就像一个目录结构。

在Java中调用其它包中的公共类时,必须告知具体类的位置。

使用类名称有两种写法:全名和简名。

  • 全名=包名称+类名称java.util.Date

    简名=类的名称Date

注意:在同一个包中的类名称不允许冲突

如果类在同一个包中,相互调用则不需要import语句;Java虚拟机在启动时会自动导入java.lang包,只要程序用到这个包的类时,不需要导入,要使用其它包时,都必须手工导入。

封装的特点

隔离变量,一般建议对于属性采用:私有属性,共有的get/set方法的形式进行定义。

在IDE工具中先定义类和对应的属性,所有属性都是private,然后点击鼠标右键,弹出菜单,然后弹出窗口,在窗口中针对每个属性选择是否生成对应的get/set方法。特殊案例,这对boolean属性不是get而是isXxx,如果Boolean类型属性则还是get/set。自动生成代码。
在这里插入图片描述
不是所有的属性都有get/set方法,取决于是否允许读写。只允许读则只有get,没有set;如果只允许写,则只有set,没有get。这是具体的业务逻辑导致的规则

构造器方法

没有返回类型,如果有返回类型,哪怕是void也是普通方法,不是构造器方法
方法名称和类名称一致,包括大小写
方法中可以有return语句,但是不能return任何内容【构造器】
不能直接调用,在new对象时,系统分配存储空间—系统给属性赋初始值—调用构造器人为执行初始化
在这里插入图片描述

new A1()时,首先系统分配存储空间(构建变量),然后系统自动给id和name属性赋默认值,最后才运行对应的构造器,在构造器中可以自定义每个属性的默认值

析构器方法

protected void finalize() throws Throwable名称固定
在垃圾回收当前对象之前执行的处理逻辑,一般可用于资源回收
垃圾回收器的运行时机不确定,所以在具体开发中不依靠这里进行资源回收

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值