自学内容网 自学内容网

【JAVA入门】Day11 - 包和final

【JAVA入门】Day11 - 包和final



        什么是包?

一、什么是包

        包就是文件夹。用来管理各种不同功能的 Java 类,方便后期代码维护。

  • 包命名的规则:公司域名反写 + 包的作用,需要全部英文小写,见名知意。如:com.std.domain。
package com.std.domain;

public class Student {
私有化成员变量
构造方法
成员方法
}

        一个类真正的名字其实是它的包名+类名,即全类名,又叫全限定名,上面的代码中,学生类的全类名叫:com.std.domain.Student 。一个使用到其他类的测试类,最为完整的写法应该如下所示:

public class Test {
public static void main(String[] args) {
com.std.domain.Student s = new com.std.domain.Student();
}
}

        为了简化代码,不让它这么繁琐,Java 引入了 import 关键字,可以将其他包里的类导入到当前文件下。

import com.std.domain.Student;

public class Test {
public static void main(String[] args) {
Student s = new Student();
}
}

        只有导包,才能使用其他包里的类。在 Java 中,导包需要注意以下几点:

  • 使用同一个包中的类时,不需要导包。
  • 使用 java.lang 包中的类时,不需要导包。
  • 其他情况都需要导包。
  • 如果同时使用两个包中的同名类,需要用全类名
import com.std.domain1.Teacher;
//import com.std.domain2.Teacher; 报错

public class Test {
public static void main(String[] args) {
Teacher t = new Teacher();
com.std.domain2.Teacher t2 = new com.std.domain2.Teacher();
}
}

        上面的代码中,我们导入了 domain1包里的 Teacher 类,那么当前文档中的 Teacher 就代表了 domain1 包中的 Teacher。假如 domain2 包中也有一个 Teacher 类,我们想要使用它,那么这里就只能使用它的全类名进行调用(因为通过导包导入的类,是不能重名的,Java 分不清这两个类)。

二、final

        final 意为最终的,引申为“不可改变的”。
        final 关键字可以用来修饰方法、类和变量。

  • 如果用 final 修饰方法,表示这个方法为最终方法,不能被重写。
  • 如果用 final 修饰类,表明该类是最终类,不能被继承。
  • 如果用 final 修饰变量,那么这个变量就叫做常量,它只能被赋值一次。
//用final修饰父类的show方法,子类的show方法不能重写它。
class Fu {
    public final void show() {
        System.out.println("父类的show方法");
    }
}
//用final修饰的父类,无法被继承,没有子类。
final class Fu {
    public void show() {
        System.out.println("父类的show方法");
    }
}
//用final修饰的变量,变为了常量,只能赋值一次,且必须在初始化过后才能打印。
 final int a = 10;
System.out.println(a);

三、常量

        在实际开发中,常量一般用作系统的配置信息,方便维护,提高可读性。

常量的命名规范有:

  • 单个单词:全部大写
  • 多个单词:全部大写,单词之间用下划线隔开

final 修饰变量时:

  • 如果 final 修饰的变量是基本类型,那么变量存储的数据值不能发生改变。
  • 如果 final 修饰的变量是引用类型,那么变量存储的地址值不能发生改变,但对象内部的属性值可以发生变化。
public class Changliang {
    public static void main(String[] args) {

        final double PI = 3.14;//基本类型,数据值不能改变

        final Student S = new Student(23, "zhangsan");
        S.setName("赵六");
        System.out.println(S.getName() + ", " + S.getAge());

//S = new Student();//报错,S存储的地址值不能改变

//数组也是引用类型
final int[] ARR = {1,2,3,4,5};
ARR[0] = 10;  //数组内部的属性值可以改变
//ARR = new int[10];  //数组的地址值不能改变
    }
}

        PS:在获知了 final 的作用以后,字符串不可改变的本质也得以被窥探。String 类本身实际上是以一个 private final 修饰的 value[ ] 数组修饰的,每一个字符的编码值被数组所存储,由于这个 value[ ] 本身是 final 修饰,因此其地址值不能改变,所有的字符串直接赋值实际上是新建了一个字符串;而由于这个 value[ ] 又被 private 修饰,String 类内部又没有对其操作的公有方法,因此 value[ ] 内部的值也无法被直接改变。


原文地址:https://blog.csdn.net/oo00Z00oo/article/details/140020797

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!