包
1. 包就是文件夹,用来管理各种不同功能的Java类,方便后期代码维护。
2. 在 Java 里,包是用来组织类和接口的一种机制。它能够防止命名冲突,并且按照功能或者模块
对代码进行分类。
包名的命名规则:公司域名反写+包的作用(全部英文小写,见名知意)
e.g. com.chillingheart.domain
package com.chillingheart.domain;
public class Student{
私有化成员变量
构造方法
成员方法
}
全类名:(包名+类名)
com.chilingheart.domain.Student
目录结构:
com/
chillingheart/
domain/
Student.java
若要在一个 Java 类里使用其他包中的类,就需要使用 import
关键字来导入这些类。
import com.chilingheart.domain.Student
使用其他类的规则
1. 使用同一个包中的类时,不需要导包;
2. 使用 java.lang包中的类时,不需要导包;
3. 其他情况都需要导包;
4. 如果同时使用两个包中的同类名,需要用全类名。
静态导入
除了普通的导入,Java 还支持静态导入,这能让你直接使用其他类的静态成员,而无需使用类名
来限定。
// 静态导入 Math 类的所有静态成员
import static java.lang.Math.*;
public class StaticImportExample {
public static void main(String[] args) {
double result = sqrt(16);
System.out.println("The square root of 16 is: " + result);
}
}
在这个例子中,使用静态导入导入了 java.lang.Math
类的所有静态成员,所以可以直接使
用 sqrt
方法,而无需写成 Math.sqrt
。
通配符导入
若要导入一个包中的所有类,可以使用通配符 *
。
// 导入 java.util 包中的所有类
import java.util.*;
public class WildcardImportExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
System.out.println(list);
}
}
在这个例子中,使用通配符导入了 java.util 包中的所有类,所以可以直接使用 List 和 ArrayList 类。
包的访问权限
Java 中的包还涉及到访问权限的概念。类、方法和变量可以使用不同的访问修饰符(如 public
、protected
、private
和默认)来控制其在包内和包外的访问权限。
public
:可以在任何包中被访问。protected
:可以在同一个包内以及不同包的子类中被访问。- 默认(没有修饰符):只能在同一个包内被访问。
private
:只能在同一个类中被访问。
final关键字
final 最终的 --->不可被改变的
1. 方法 表明方法是最终方法,不能被重写
2. 类 表名该类时最终类,不能被继承(不能有子类)
3. 变量 叫做常量,只能被赋值一次
常量
实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性。
常量的命名规范:
1. 单个单词:全部大写
2. 多个单词:全部大写,单词之间用下划线隔开
修饰方法
class ParentClass {
public final void finalMethod() {
System.out.println("This is a final method.");
}
}
class ChildClass extends ParentClass {
// 以下代码会报错,因为 finalMethod 是 final 方法,不能被重写
// public void finalMethod() {
// System.out.println("Trying to override final method.");
// }
}
在这个例子里,ParentClass
中的 finalMethod
被声明为 final
,所以 ChildClass
不能对其进行
重写。
修饰类
final class FinalClass {
public void display() {
System.out.println("This is a final class.");
}
}
// 以下代码会报错,因为 FinalClass 是 final 类,不能被继承
// class SubClass extends FinalClass {}
在上述示例中,FinalClass
被定义为 final
类,若尝试创建它的子类,编译器会报错。
修饰变量
修饰基本数据类型变量
final修饰的变量是基本类型时:那么变量存储的数据值不能发生改变。
class FinalVariableExample {
public static void main(String[] args) {
final int num = 10;
// 以下代码会报错,因为 num 是 final 变量,不能被重新赋值
// num = 20;
System.out.println("The value of num is: " + num);
}
}
在上述代码中,num
被声明为 final
变量,赋值后若再尝试修改其值,编译器会报错。
修饰引用数据类型变量
final修饰的变量是引用类型时:变量存储的地址值不能发生改变,对象内部可以改变。
import java.util.ArrayList;
import java.util.List;
class FinalReferenceExample {
public static void main(String[] args) {
final List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
// 可以修改引用对象的内容
System.out.println("List content: " + list);
// 以下代码会报错,因为 list 是 final 变量,不能再指向其他对象
// list = new ArrayList<>();
}
}
对于引用数据类型的 final
变量,虽然不能让它指向另一个对象,但可以修改所引用对象的内容。