关于后端:Java-的包-权限修饰符与final关键字

30次阅读

共计 2615 个字符,预计需要花费 7 分钟才能阅读完成。

第一章 包

1.1 包

​ 包在操作系统中其实就是一个文件夹。包是用来分门别类的治理技术,不同的技术类放在不同的包下,方便管理和保护。

在 IDEA 我的项目中,建包的操作如下:

包名的命名标准

路径名. 路径名.xxx.xxx
// 例如:com.itheima.oa
  • 包名个别是公司域名的倒写。例如:黑马是 www.itheima.com, 包名就能够定义成 com.itheima. 技术名称。
  • 包名必须用”.“连贯。
  • 包名的每个路径名必须是一个非法的标识符,而且不能是 Java 的关键字。

1.2 导包

什么时候须要导包?

​ 状况一:在应用 Java 中提供的非核心包中的类时

​ 状况二:应用本人写的其余包中的类时

什么时候不须要导包?

​ 状况一:在应用 Java 外围包(java.lang)中的类时

​ 状况二:在应用本人写的同一个包中的类时

1.3 应用不同包下的雷同类怎么办?

假如 demo1 和 demo2 中都有一个 Student 该如何应用?

代码示例:

// 应用全类名的模式即可。// 全类名:包名 + 类名
// 拷贝全类名的快捷键:选中类名 crtl + shift + alt + c 或者用鼠标点 copy,再点击 copy Reference
com.itheima.homework.demo1.Student s1 = new com.itheima.homework.demo1.Student();
com.itheima.homework.demo2.Student s2 = new com.itheima.homework.demo2.Student();

第二章 权限修饰符

2.1 权限修饰符

​ 在 Java 中提供了四种拜访权限,应用不同的拜访权限修饰符润饰时,被润饰的内容会有不同的拜访权限,咱们之前曾经学习过了 public 和 private,接下来咱们钻研一下 protected 和默认修饰符的作用。

  • public:公共的,所有中央都能够拜访。
  • protected:本类,本包,其余包中的子类都能够拜访。
  • 默认(没有修饰符):本类,本包能够拜访。

    留神:默认是空着不写,不是 default

  • private:公有的,以后类能够拜访。
    public > protected > 默认 > private

2.2 不同权限的拜访能力

public protected 默认 private
同一类中
同一包中的类
不同包的子类
不同包中的无关类

可见,public 具备最大权限。private 则是最小权限。

编写代码时,如果没有非凡的思考,倡议这样应用权限:

  • 成员变量应用private,暗藏细节。
  • 构造方法应用 public,不便创建对象。
  • 成员办法应用public,不便调用办法。

小贴士:不加权限修饰符,就是默认权限

第三章 final 关键字

3.1 概述

​ 学习了继承后,咱们晓得,子类能够在父类的根底上改写父类内容,比方,办法重写。

如果有一个办法我不想他人去改写外面内容,该怎么办呢?

Java 提供了final 关键字,示意润饰的内容不可变。

  • final:不可扭转,最终的含意。能够用于润饰类、办法和变量。

    • 类:被润饰的类,不能被继承。
    • 办法:被润饰的办法,不能被重写。
    • 变量:被润饰的变量,有且仅能被赋值一次。

3.2 应用形式

3.2.1 润饰类

final 润饰的类,不能被继承。

格局如下:

final class 类名 {}

代码:

final class Fu {
}
// class Zi extends Fu {} // 报错, 不能继承 final 的类

查问 API 发现像 public final class Stringpublic final class Mathpublic final class Scanner 等,很多咱们学习过的类,都是被 final 润饰的,目标就是供咱们应用,而不让咱们所以扭转其内容。

3.2.2 润饰办法

final 润饰的办法,不能被重写。
格局如下:

修饰符 final 返回值类型 办法名(参数列表){// 办法体}

代码:

class Fu2 {final public void show1() {System.out.println("Fu2 show1");
    }
    public void show2() {System.out.println("Fu2 show2");
    }
}

class Zi2 extends Fu2 {
//    @Override
//    public void show1() {//        System.out.println("Zi2 show1");
//    }
    @Override
    public void show2() {System.out.println("Zi2 show2");
    }
}

3.2.3 润饰变量 - 局部变量

  1. 局部变量——根本类型
    根本类型的局部变量,被 final 润饰后,只能赋值一次,不能再更改。代码如下:
public class FinalDemo1 {public static void main(String[] args) {
        // 申明变量,应用 final 润饰
        final int a;
        // 第一次赋值 
        a = 10;
        // 第二次赋值
        a = 20; // 报错, 不可从新赋值

        // 申明变量,间接赋值,应用 final 润饰
        final int b = 10;
        // 第二次赋值
        b = 20; // 报错, 不可从新赋值
    }
}

思考,上面两种写法,哪种能够通过编译?

写法 1:

final int c = 0;
for (int i = 0; i < 10; i++) {
    c = i;
    System.out.println(c);
}

写法 2:

for (int i = 0; i < 10; i++) {
    final int c = i;
    System.out.println(c);
}

依据 final 的定义,写法 1 报错!写法 2,为什么通过编译呢?因为每次循环,都是一次新的变量 c。这也是大家须要留神的中央。

3.2.4 润饰变量 - 成员变量

成员变量波及到初始化的问题,初始化形式有显示初始化和构造方法初始化,只能抉择其中一个:

  • 显示初始化(在定义成员变量的时候立马赋值)(罕用);
public class Student {final int num = 10;}
  • 构造方法初始化(在构造方法中赋值一次)(不罕用,理解即可)。

    留神:每个构造方法中都要赋值一次!

public class Student {
    final int num = 10;
    final int num2;

    public Student() {
        this.num2 = 20;
//     this.num2 = 20;
    }
    
     public Student(String name) {
        this.num2 = 20;
//     this.num2 = 20;
    }
}

被 final 润饰的常量名称,个别都有书写标准,所有字母都 大写

正文完
 0