目录
引言
在面向对象编程(OOP)中,类和对象是最基础且核心的概念。类定义了对象的属性和行为,而对象是类的具体实例。理解类和对象的特征,不仅能帮助我们写出高质量的代码,还能提升程序的可维护性和扩展性。本文将从包(Package)代码块两个维度,深入解析类和对象的重要特性,并结合实际代码示例说明其应用场景。
一、包(Package):代码的组织大师
1.1 包的定义与作用
对于日常的文件使用文件夹进行管理十分的便捷

包是Java中组织类的一种机制,类似于文件系统中的文件夹。它的核心作用包括:
-
解决类名冲突:不同包中允许存在同名类。
-
提高代码可读性:通过包名可以直观了解类的功能归属。
-
控制访问权限:通过包级别的访问修饰符实现权限管理。
例如,Java标准库中的java.util.Date和java.sql.Date虽然类名相同,但通过包名区分,避免了命名冲突。
1.2 包的导入与使用
Java 导入包的使用说明
在 Java 中,我们可以通过导入包来使用其中的类,这样可以避免每次都写完整的类名,提高代码的可读性和开发效率。以下是几种常见的导入包的写法及注意事项:
1.2.1 单个类导入
如果只想导入某个特定的类,可以使用如下写法:
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime());
}
}
1.2.2 整个包导入
如果需要使用某个包中的多个类,可以导入整个包:
import java.util.*;
public class Test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime());
}
}
这样,java.util 包下的所有类都可以在当前类中使用。
1.2.3 导入冲突问题
当导入的包中存在同名类时,会发生冲突。例如:
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
Date date = new Date(); // 无法确定是 util 还是 sql 中的 Date 类
System.out.println(date.getTime());
}
}
此时,需要使用完整的类名来指定具体使用哪个包中的类:
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}
1.2.4 静态导入(不推荐使用)
对于类中的静态方法和字段,可以使用静态导入:
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}
这样在使用静态方法时就不需要再写类名前缀了。
import java.util.Date; // 导入特定类
import java.util.*; // 导入整个包(不推荐,易引发冲突)
冲突解决:若导入两个包中存在同名类(如java.util.Date和java.sql.Date),需使用全限定类名:
java.util.Date date = new java.util.Date();
1.3 自定义包
创建自定义包的规则:
在文件首行声明包名:
package com.example.demo;包名通常采用公司域名的倒置形式(如
com.bit.demo1),确保唯一性。包路径需与文件系统的目录结构一致(如
com/bit/demo1)。

1.4 包的访问权限
-
默认权限(包级私有):不加修饰符的成员仅允许同包内的类访问。(成员变量,成员方法,甚至整个类都可以是默认权限)
-
示例:
package com.bit.demo1; public class Computer { String brand; // 默认权限,仅同包内可访问 private String cpu; // 仅本类可访问 public String screen; // 全局可访问 }在另一个包中访问
brand会编译报错,体现了包级权限的控制。
二、代码块:灵活控制初始化逻辑
2.1 普通代码块
定义在方法中,用于限制变量作用域:
public void method() {
{
int x = 10; // 仅在此代码块内有效
}
int x = 100; // 合法,与块内x不冲突
}
2.2 构造代码块(实例代码块)
特性:在每次创建对象时执行,优先于构造方法。
用途:初始化实例成员变量。
示例:
class Student {
{
name = "Tom"; // 构造代码块初始化
System.out.println("实例代码块执行");
}
public Student() {
System.out.println("构造方法执行");
}
}
2.3 静态代码块
特性:在类加载时执行,仅一次。
用途:初始化静态成员变量。
执行顺序: 静态代码块 → 实例代码块 → 构造方法。
掌握类和对象的特征,是Java编程的基石。通过合理使用包、封装、static和代码块,可以显著提升代码的可维护性和扩展性。希望本文能帮助你深入理解这些核心概念,并在实践中灵活运用!
86万+

被折叠的 条评论
为什么被折叠?



