Java基础五--封装

什么是封装?

  • 通过该类提供的方法来实现对隐藏信息的操作和访问
  • 隐藏对象的信息
  • 留出访问的接口

封装的优点

  • 良好的封装能减少耦合
  • 类内部的结构可以自由修改
  • 可以对成员变量进行更精确的控制
  • 隐藏信息,实现细节

实现Java封装的步骤

  • 隐藏对象

    修改属性的可见性——设置为 private

    1
    2
    3
    4
    public class Person{
    private String name;
    private int age;
    }

    这段代码中,将 name 和 age 属性设置为私有的,只有本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

  • 留出接口

    创建 getter / setter 方法——设置为 public 用于属性的读写

    在 getter / setter 方法中加入属性控制语句——对属性值的合法性进行判断

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Person{
    private String name;
    private int age;

    public int getAge(){
    return age;
    }

    public String getName(){
    return name;
    }

    public void setAge(int age){
    this.age = age;
    }

    public void setName(String name){
    this.name = name;
    }
    }

    采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name)之间发生的同名的冲突。


作用

  • 管理 Java 文件
  • 解决同名文件冲突

定义包

语法:package 包名;

注意:

1.必须放在 Java 源文件中的第一行

2.一个 Java 源文件中只能有一个 package 语句

3.包名全部英文小写

4.命名方式:域名倒序 + 模块 + 功能

eg:package com.nuc.zigbee;

导入包

语法:

import 包名.类名;

eg:

import com.nuc.*;

import com.nuc.zigbee;

常用系统包

java.lang 包含 Java 语言基础的类

java.util 包含 Java 语言中的各种工具类

java.io 包含输入、输出相关功能的类


static 关键字

static 翻译为静态,从面向对象的角度讲,当一个类中的变量或方法用 static 修饰时,这些变量和方法就成了类本身的,他们和对象的关系并不大。但是从直观的角度讲,这些被修饰的量确实被该类所有对象所拥有,并且被这个类的所有对象所共享,求其是当使用该类对象进行引用他们时。其实当使用对象进行引用 static 修饰成员时,在底层代码的实现中,其实还是转换为类名进行引用,这表明这个成员属于类。

  • static + 属性——静态属性、类属性
  • static + 方法——静态方法、类方法
  • static + 类——不存在,不能加载类前
  • static + 方法内局部变量——不能加载局部变量前
  • static + 代码块——静态代码块

代码块

  • 通过{}可以形成代码块
  • 方法内的代码块称为:普通代码块
  • 类内的代码块称为:构造代码块
  • 构造代码块前 + static:静态代码块

注意

  • 初学这个关键字时,书上有个重点,那就是一个类中, static 修饰的成员不能访问势力成员,只能访问静态成员。这个很好理解,static 修饰的成员叫做类成员,属于类本身的属性,随着类的编译进行初始化,而此时实例成员未必进行初始化,这就会带来很多错误,所以类成员访问实例成员是不能通过编译的。
  • 静态方法中不可以定义 this,super 关键字,因为静态元素优先于对象存在。

静态成员的声明周期

静态成员随着类的加载而产生,销毁时释放,生命周期伴随着类的整个的生命周期,生命周期长,这就意味着对内存资源的占用也会相对比较长。

静态方法中的成员调用

  • 可以直接调用同类中的静态成员。
  • 不可以直接调用同类中的非静态成员。
  • 只能通过对象实例化后,对象.成员方法 的方式访问非静态成员。

各种代码块的执行顺序

无论实例产生多少对象,静态代码块只执行一次。

构造代码块在每次对象构造的时候调用。

方法中的普通代码块则是在每次调用方法的时候顺序调用。

什么时候定义静态变量

当对象中出现共享数据时,该数据被修饰成静态,对象中的特有数据,修饰为非静态,存在于堆内存中。

什么时候定义静态方法

当功能内部没有访问到非静态数据(对象中特有的数据),该函数可以定义为静态的。

-------------本文结束感谢您的阅读-------------

本文标题:Java基础五--封装

文章作者:Cui Zhe

发布时间:2018年10月14日 - 08:10

最后更新:2018年10月21日 - 10:10

原始链接:https://cuizhe1023.github.io/2018/10/14/Java基础五/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。