import static和import的区别

Java静态导入详解
本文介绍了Java 5中引入的新特性——静态导入。通过示例对比了使用静态导入前后代码的区别,展示了如何简化对静态方法和常量的调用。同时讨论了使用静态导入时需要注意的问题及建议。

import static静态导入是JDK1.5中的新特性。一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。 

这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...),在使用时直接print(...)就可以了。 

但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便 



example:

在Java 5中,import语句得到了增强,以便提供甚至更加强大的减少击键次数功能,虽然一些人争议说这是以可读性为代价的。这种新的特性成为静态导入。

当你想使用static成员时,可以使用静态导入(在API中的类和你自己的类上,都可以使用该特性)。下面是静态导入前后的代码实例:

在静态导入之前:

  1. public class TestStatic { 
  2.     public static void main(String[] args) { 
  3.         System.out.println(Integer.MAX_VALUE); 
  4.         System.out.println(Integer.toHexString(42)); 
  5.     } 
  6. }
在静态导入之后:
 
  1. import static java.lang.System.out; 
  2. import static java.lang.Integer.*; 
  3.  
  4. public class TestStaticImport { 
  5.     public static void main(String[] args) { 
  6.         out.println(MAX_VALUE); 
  7.         out.println(toHexString(42)); 
  8.     } 
  9. }
两个类都产生相同的输出:
  1. 2147483647 
  2. 2a
让我们看一下使用静态导入特性的代码中将发生什么:

1、虽然该特性通常称为“静态导入”,但语法必须是import static,后面跟你想导入的static成员的完全限定名称,或者通配符。在本例中,我们在System类的out对象上进行静态导入。

2、在本例中,我们可能想使用java.lang.Integer类的几个static成员。该静态导入语句使用通配符来表达“我想在此类中的所有静态成员上进行静态导入”。

3、现在我们终于看到静态导入特性的好处!我们不必在System.out.println中键入System。太好了!另外,我们不必在Integer.MAX_VALUE中键入Integer。因此,在这行代码中,我们能够将快捷方式用于静态方法和一个常量。

4、最后,我们进行更多的快捷操作,这次针对Integer类的方法。

关于该特性,我们已经有点儿讽刺意味儿了,但不仅我们是这样的。我们不认为节省少量的击键次数会让代码难于阅读一点,但许多开发人员要求将它添加到语言中。

下面是使用静态导入的几条原则:

  • 你必须说import static, 不能说static import。
  • 提防含糊不清的命名static成员。例如,如果你对Integer类和Long类执行了静态导入,引用MAX_VALUE将导致一个编译器错误,因为Integer和Long都有一个MAX_VALUE常量,并且Java不会知道你在引用哪个MAX_VALUE。
  • 你可以在static对象引用、常量(记住,它们是static 或final)和static方法上进行静态导入。
<think> 嗯,用户这次的问题聚焦在OSPF中的两个特定命令:import directimport static。从对话历史看,用户之前已经了解了OSPF基础配置,现在转向更高级的路由重分发功能。不过用户引用的资料[2]有点误导性——它讨论的是Java编程中的静态导入,OSPF完全无关。 用户可能在实际配置中遇到了路由重分发的问题,特别是对直连路由静态路由的处理。需要明确区分: - import direct是重分发设备的所有直连网段 - import static是重分发配置的静态路由 需要特别注意使用场景的差异:比如在多协议网络中,路由器可能需要将非OSPF路由引入OSPF域。但用户可能没意识到重分发会导致次优路径或环路风险,这点必须在回答中强调。 技术细节上要澄清三点: 1)重分发直连路由时,只会引入接口所在网段的路由,不会包含接口主机路由 2)当静态路由指向出接口而非下一跳时,重分发要特别小心 3)路由策略(route-policy)在重分发中的过滤作用 用户引用的资料[3]列出了OSPF邻居建立条件,这当前问题无直接关联,但说明用户可能混淆了基础邻居建立高级路由控制。需要在回答末尾自然过渡到邻居状态相关问题,保持知识连贯性。 最后生成的延伸问题要覆盖: - 重分发导致路由环路的具体案例(补充用户没问但可能需要的) - 路径类型在重分发中的关键作用 - OSPF默认路由的特殊注入方式 </think> 在OSPF协议中,`import direct``import static`是**路由重分发(Route Redistribution)** 的核心命令,用于将非OSPF路由注入OSPF域。以下是详细解析: --- ### 一、`import direct`:重分发直连路由 #### 含义与作用 - **功能**:将设备上的**直连接口网段**注入OSPF路由表 - **本质**:宣告未通过OSPF学习的本地直连网段 - **配置示例**: ```shell [R1-ospf-1] import-route direct # 将本机所有直连网段注入OSPF ``` #### 使用场景 1. **非OSPF接口接入** 当设备存在未运行OSPF的接口(如管理接口)需被OSPF域访问时: ```shell [R1] interface LoopBack1 [R1-LoopBack1] ip address 10.1.1.1 32 # 管理接口未配置OSPF [R1-ospf-1] import-route direct # 注入该直连路由 ``` 2. **混合组网整合** 在OSPF与静态路由/RIP混合环境中整合路由: ```shell [R1] ip route-static 172.16.0.0 16 NULL0 # 配置静态黑洞路由 [R1-ospf-1] import-route direct # 注入直连路由 ``` #### 注意事项 - **路由类型**:注入的路由在OSPF中标记为**Type-5 External (ASE)** - **过滤控制**:建议结合`route-policy`过滤网段: ```shell [R1] route-policy DIRECT permit node 10 [R1-route-policy] if-match ip-prefix DIRECT_LIST [R1-ospf-1] import-route direct route-policy DIRECT ``` --- ### 二、`import static`:重分发静态路由 #### 含义与作用 - **功能**:将手动配置的**静态路由**注入OSPF域 - **关键价值**:在OSPF中传播管理员指定的特殊路径 - **配置示例**: ```shell [R1-ospf-1] import-route static # 重分发所有静态路由 ``` #### 使用场景 1. **默认路由注入** 向OSPF域发布默认路由(替代`default-route-advertise`): ```shell [R1] ip route-static 0.0.0.0 0 192.168.100.1 # 配置默认路由 [R1-ospf-1] import-route static # 注入OSPF ``` 2. **备份路径通告** 发布指向备份链路的静态路由: ```shell [R1] ip route-static 10.0.0.0 8 172.16.1.2 preference 200 # 备份路径 [R1-ospf-1] import-route static type 1 cost 50 # 指定度量值 ``` #### 高级参数 | 参数 | 作用 | 示例命令 | |---------------|-------------------------------|------------------------------------------| | `type 1/2` | 设置外部路由类型(E1/E2) | `import-route static type 1` | | `cost <值>` | 指定外部路由开销 | `import-route static cost 100` | | `tag <值>` | 打标签用于路由策略 | `import-route static tag 50` | --- ### 三、核心区别与选择指南 | **特性** | `import direct` | `import static` | |------------------|-------------------------------------|--------------------------------------| | **路由来源** | 本地直连接口 | 手动配置的静态路由 | | **路由类型** | OSPF外部路由(Type-5) | OSPF外部路由(Type-5) | | **更新机制** | 接口UP/DOWN触发更新 | 管理员手动修改触发更新 | | **典型用途** | 发布未运行OSPF的本地网段 | 发布默认路由或特殊路径 | | **可控性** | 需过滤避免暴露无用接口 | 可精确控制发布的路由 | > **最佳实践**: > - 优先使用`network`命令宣告直连网段(避免产生外部路由) > - 重分发时**必须配置路由策略**防止环路[^1] > - 使用`type 1`外部路由(E1)确保路径开销累加更优[^1] --- ### 四、验证命令 ```shell display ospf lsdb ase # 查看外部路由(Type-5 LSA) display ip routing-table protocol static # 检查静态路由 display ip routing-table protocol direct # 检查直连路由 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值