封装 学习笔记(超详细!!!)

封装

封装概念

 封装: 将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。
 Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。

访问限定符

 Java中提供了四种访问限定符:private、default、protected、public

在这里插入图片描述
public:公开的,被其修饰的变量或方法都可以公开使用
private:私人的,被其修饰的变量或方法只能在当前类中使用。一般情况下,我们用private修饰成员变量,用public修饰成员方法
default:包访问权限,被其修饰的变量或方法只能在同一个包中被使用。需要注意的是,在修饰变量或方法时并不是在前面写上default,而是什么也不写。
protected:是继承相关知识里的,这里先不做解释

public class Test {
    class Animal {
        public String name;//可以被公开访问和使用
        String color;//包访问权限,只能在同一个包中被访问
        private int age;//只能在当前类中被访问
      
        public Animal(String name, String color, int age) {
            this.name = name;
            this.color = color;
            this.age = age;
        }
    }
}

  包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。
  包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
导入包中的类
  Java当中提供了很多类供我们使用,当我们用到一个包中的某个类时,就需要导入包中的这个类。比如要使用Scanner类创建一个对象时,需要用import导入这个类。这里的 java.util就是类所在的包, Scanner就是用到的类。需要注意的是,我们常说的 导包 其实是导入包里的某个类。

import java.util.Scanner;

public class Test {
    Scanner scan = new Scanner(System.in);
}

 自定义包

  • 在文件的最上方加上一个 package 语句指定该代码在哪个包中。
  • 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.demo.www )。
  • 包名要和代码路径相匹配. 例如创建com.demo.www的包, 那么会存在一个对应的路径 com/demo/www 来存储代码。
  • 如果一个类没有 package 语句, 则该类被放到一个默认包中。

  既然Java提供了很多包,我们也可以自己创建一个包。

 操作步骤
 1)右击src,选择New---->Package

在这里插入图片描述
 2)输入Name (注意这里的名字 应全部为 小写字母)

在这里插入图片描述
 3)下面是创建好的包
在这里插入图片描述




这里可以再解释一下包访问权限的范围,如果在www这个包里面创建一个Test1类,类内部定义有 包访问权限的age,在不同包 demo包中创建一个Test2类,那么对于age来说 在不同包中Test2类就不能访问age,只能在demo这个包中被访问

在这里插入图片描述




在这里插入图片描述

static修饰的成员变量和方法

修饰成员变量

   用 static 修饰的成员变量称为静态成员变量,未被其修饰的称为实例成员变量。

  1. 被static修饰的成员变量属于类的变量,储存在方法区中,随类的加载而被加载,不再属于对象,不再依赖于对象。
  2. 静态成员变量不属于某个对象,是类的属性,是多个对象共享的,即使创建多个对象也不会新增第二个静态成员变量。
  3. 在其类外使用时需要用类名进行访问,但也可以用当前对象的引用进行访问,但是这种方法不合理。
  4. 生命周期伴随类的一生:随类的加载而创建,随类的卸载而销毁。(当用类名进行访问类的属性时,类就会被加载,进而这些静态成员变量就会被创建)
  5. 方法中不能定义和使用静态成员变量,在方法当中定义的变量是局部变量,而静态的变量属于类变量。随着类的加载而被创建,而局部变量是调用该方法的时候,才创建的。所以,此时两种变量的性质是冲突的。Java当中不允许定义局部的静态变量

修饰成员方法

  1. 静态成员方法不属于某个具体的对象,属于类的方法。
  2. 要用类名的方式调用,也可以用当前对象的引用进行调用,但是这样调用不合理
  3. 静态成员方法里面不能任何访问非静态的成员变量或成员方法,也不能出现this参数,因为这些都是依赖于对象的,而静态成员方法属于类的方法,不依赖于对象

代码块

普通代码块

使用{}定义在方法中的一段代码,这种用法不多

构造代码块(实例代码块)

定义在类中的代码块(不加修饰符)。一般用来初始化实例成员变量

静态代码块

用static修饰的定义在类中的代码块,一般用于从初始化静态成员变量

同步代码块

现在还没学…

执行顺序

  • 执行顺序:静态代码块 > 实例代码块 > 构造方法
  • 静态代码块不管生成多少个对象,其只会执行一次(在类被加载时被执行)
  • 如果一个类中有多个静态代码块,会按照定义的先后顺序进行依次执行
  • 实例代码块只有在创建对象时才会执行
  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值