封装和static

2023-02-09  本文已影响0人  分布式与微服务

1、封装概述

(1)Java中封装的实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过

该类提供的方法来实现对隐藏信息的操作和访问。

(2)封装反映了事物的相对独立性,有效避免了外部错误对此对象的影响,并且能够对对象使用

者由于大意产生的错误起到预防作用。

(3)面向对象编程提倡对象之间实现松耦合关系。

(4)封装的好处在于隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以

方便地加入存取控制修饰符,来限制不合理操作。

(5)松耦合就是指尽量减少对象之间的关联性,以降低它们之间的复杂性和依赖性。

2、封装的步骤

1、 修改属性的可见性
将类中的属性由public修改为private即可。

2、 设置setter/getter()方法
可以手动添加setter/getter()方法,也可以使用组合键Ctrl+Shift+S由系统添加。

3、 设置属性的存取限制
在setter()方法中进一步利用条件判断语句进行赋值限制。

private String name;
    penguin.name= "QQ";//name 报错

用private封装后就不能直接调用

Java里的包

1、包的概述

Java中的包机制也是封装的一种形式。

包主要有以下3个方面的作用:
1)允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。

2)防止命名冲突:Java中只有在不同包中的类才能重名。

3)包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码有可能不能访问该类。

4)在同一个类中使用不同包中的同名类时,需要使用完整的包名来区别同名类。

2、包的定义

定义包的语法格式如下:
package 包名;
-->package是关键字。

-->包的声明必须是Java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语

句,设计的包需要与文件系统结构相对应。

-->在包命名时,要遵守以下编码规范:

1)一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net

及org,通常使用组织的网络域名的逆序。

例如,如果域名为Javagroup.net,可以声明包为“package net.javagroup.mypackage;”。

2)包名的后续部分依据不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的

组成来区分部门、项目、机器或注册名。

如“package net.javagroup.research.powerproject;”。

research:项目名

powerproject:部门名

3、包的使用

(1)声明包的含义是声明当前类所在的包。

(2)导入包的含义是声明在当前类中要使用到的其他类所在的包

-->导入包使用import关键字。

cn.bdqn.demo01.Penguin p1 = new cn.bdqn.demo01.Penguin();
        
cn.bdqn.demo02.Penguin p2 = new cn.bdqn.demo02.Penguin();       

-->一个类中可以导入多个其他包

-->导包语句在包语句之后、类定义语句之前。

Java访问修饰符

类和类成员的访问控制

(1)包实际上一种访问控制机制,通过包来限制和制约类之间的访问关系。

(2)访问修饰符也同样可以限制和制约类之间的访问关系。

1、 类的访问修饰符

修饰符 同一包中 非同一包中

public 可以使用 可以使用

默认修饰符 可以使用 不可以使用

2、 类成员的访问修饰符

修饰符 同一类中 同一包中 子类中 其他地方

private 可以使用 不可以使用 不可以使用 不可以使用

默认修饰符 可以使用 可以使用 不可以使用 不可以使用

protected 可以使用 可以使用 可以使用 不可以使用

public 可以使用 可以使用 可以使用 可以使用

// 创建Student类对象
        Student stu = new Student();
        stu.name = "李四";
        // 不同包里的类不能访问其它包中使用protected修饰的属性
        // stu.age = 19;
        
        // 不同包里的类不能访问其它包中使用默认修饰符修饰的类
        // stu.address = "安徽合肥";
 
        //不同包里的类不能访问其他包中使用private修饰的类
        // stu.gender = '男';

static关键字

(1)一个类可以创建n个对象。如果n个对象中的某些数据需要共用,就需要使用static关键字修饰

这些数据。

(2)Java中,一般情况下调用类的成员都需要先创建类的对象,然后通过对象进行调用。

(3)使用static关键字可以实现通过类名加“.”直接调用类的成员,不需要创建类的对象。

(4)使用static修饰的属性和方法属于类,不属于具体的某个对象。

1、 用static关键字修饰属性

(1)用static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性称为实例变量。

(2)使用static修饰的属性不依赖于任何对象,用类名直接加“.”调用即可。

(3)在实际开发中,用static关键字修饰属性的最常用场景就是定义使用final关键字修饰的常量。

4)使用final关键字修饰的常量在整个程序运行时都不能被改变,和具体的对象没关系,因此使用

static修饰。如:static final int PERSON_LIVE = 1;

(5)常量名由大写字母组成,多个单词之间使用下划线“_”分隔。

(6)声明常量时一定要赋初值。

2、 用static关键字修饰方法

(1)用static修饰的方法称为静态方法或者类方法,不用static关键字修饰的方法称为实例方法。

(2)在静态方法中不能直接访问实例变量和实例方法。(需要使用对象访问)

(3)在实例方法中可以直接调用类中定义的静态变量和静态方法。

3、使用static关键字修饰代码块

(1)用static修饰的代码块称为静态代码块。

(2)静态代码块随着类的加载一起执行

(3)一个类中有多个静态代码块时,按照顺序从上往下依次执行,只执行一次

// 定义静态变量
    static int num = 10;
    //定义一个普通变量
    int number =1000;
    
    //定义静态常量
     final static String STR = "hello world";
 
    // 定义静态代码块
 
    static {
        System.out.println("我是静态代码块2");
    }
    static {
        System.out.println("我是静态代码块1");
    }
 
    static {
        System.out.println("我是静态代码块3");
    }
 
    // 定义静态方法
    public static void test1() {
        System.out.println("我是静态方法");
    }
上一篇下一篇

猜你喜欢

热点阅读