java导入包重名的话....

本文探讨了Java中类重名的情况及其解决方式。当自定义类与标准库类同名时,通过不同的导入策略(如明确导入或按需导入),可以控制使用哪一个类。文章通过示例展示了不同情况下的优先级及编译结果。

今天无意想到一个无聊的问题,java类重名会怎样?我们知道,一般的变量重名会报错,局部变量与全局变量重名局部优先,那么类重名会怎样?其实也不会怎样,都不在一个文件里= =! 。但是导入的时候就会有问题了。网上搜索到了一个帖子刚好解答了我的问题。简单概括如下:     (其实就是ctrl+c--> ctrl+v --> del XoX)来源网址:http://topic.youkuaiyun.com/t/20060305/17/4593938.html

 代码:(我先放入两个文件中) 
Vector.java 
class   Vector   { 
public   Vector()   { 
System.out.println( "Class   Vector "); 
     } 


Exercise3.java 
import   java.util.Vector; 
public   class   Exercise3   { 
public   static   void   main(String[]   args)   { 
Vector   v   =   new   Vector(); 
    } 

这个时候应该来说 java.util.Vector 和自己定义的Vector重名了,此时java用的是 java.util.Vector 。因为导入语句是 import   java.util.Vector;  这是明确导入,优先级更高。如果我改成:import java.util.*;则会使用自己定义的Vector,因为 .*  是个“随需导入”,他的优先级最低,所以使用的就是自己的Vector。

如果我放到一个文件里 
Exercise3.java 
import   java.util.*; 
class   Vector   { 
    Vector()   { 
        System.out.println( "Class   Vector "); 
    } 


public   class   Exercise3   { 
    public   static   void   main(String[]   args)   { 
        Vector   v   =   new   Vector(); 
    } 

此时根据“随需导入”,会使用自己定义的Vector。若改为 import  java.util.Vector; 使用了明确的导入,那么他和自己写的 Vector 就是优先级相等了,编译器无法判断该用哪个,就会报错。

COPY完毕

Launch started: 2025-09-19 17:35:53.23 Configuration name: STD_Download_File_From_SYNCDB (2) Configuration location: D:/workspace107/.metadata/.plugins/org.eclipse.debug.core/.launches/STD_Download_File_From_SYNCDB (2).launch com.wm.app.b2b.server.ServiceException: java.io.FileNotFoundException: E:\EBdata\ALL_PROJECTS_INBOUND_PIPS (Access is denied) at STD_Java_File.bytesToFile(STD_Java_File.java:632) at sun.reflect.GeneratedMethodAccessor160.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:404) at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:756) at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39) at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:53) at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243) at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49) at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171) at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:325) at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33) at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:394) at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:627) at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:433) at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:391) at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260) at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:231) at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:263) at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:662) at com.wm.lang.flow.FlowState.stepIncremental(FlowState.java:576) at com.wm.lang.flow.FlowState.invoke(FlowState.java:464) at wm.server.flowdebugger.stepFlow(flowdebugger.java:1081) at wm.server.flowdebugger.execute(flowdebugger.java:544) at sun.reflect.GeneratedMethodAccessor142.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:414) at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:756) at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39) at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:53) at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243) at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49) at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171) at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:325) at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33) at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:394) at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:627) at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:433) at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:391) at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260) at com.wm.app.b2b.server.comm.DefaultServerRequestHandler.handleMessage(DefaultServerRequestHandler.java:119) at com.wm.app.b2b.server.HTTPMessageHandler.process(HTTPMessageHandler.java:156) at com.wm.app.b2b.server.HTTPDispatch.handleRequest(HTTPDispatch.java:218) at com.wm.app.b2b.server.Dispatch.run(Dispatch.java:443) at com.wm.util.pool.PooledThread.run(PooledThread.java:127) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.FileNotFoundException: E:\EBdata\ALL_PROJECTS_INBOUND_PIPS (Access is denied) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at STD_Java_File.bytesToFile(STD_Java_File.java:626) ... 47 more Launch completed: 2025-09-19 17:35:53.23
09-20
任务描述 本关任务:声明一个,在另一个中引用该中的类。 相关知识 的基本概述 在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。有时,开发人员还可能需要将处理同一方面的问题的类放在同一个目录下,以便于管理。 为了解决上述问题,Java 引入了(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。 简单理解:不同的城市之间存在相同名字的小区,用城市名则可以区分这些重名小区,城市名就可以理解为上面的,小区则可以看做是重名的类,通过这个前缀,解决了重名问题。 的作用如下: 把功能相似或相关的类或接口组织在同一个中,方便类的查找和使用; 如同文件夹一样,也采用了树形目录的存储方式。同一个中的类名字是不同的,不同的中的类的名字是可以相同的,当同时调用两个不同中相同类名的类时,应该加上包名加以区别。因此,可以避免名字冲突; 也限定了访问权限,拥有访问权限的类才能访问某个中的类(后面的学习任务中会讲解访问权限)。 的定义 Java 中使用 package 语句定义,package 语句应该放在源文件的第一行,在每个源文件中只能有一个定义语句,并且 package 语句适用于所有类型(类、接口、枚举和注释)的文件。定义语法格式如下: package 包名; Java 的命名规则如下: 包名全部由小写字母(多个单词也全部小写); 如果包名含多个层次,每个层次用“.”分割; 包名一般由倒置的域名开头,比如 com.baidu,不要有 www; 自定义不能 java 开头。 注意:如果在源文件中没有定义,那么类、接口、枚举和注释类型文件将会被放进一个无名的中,也称为默认。在实际企业开发中,通常不会把类定义在默认下。 例如:在一个 com.test 下有一个名为 Test.java 的文件。 package com.test; // com.test 下 public class Demo { public static void main(String[] args) { // 执行语句 } } 在之前的学习任务中,我们简单讲解了 Java,这里为大家详细介绍。 在没有之前,我们如果想要实例化 Scanner 对象,语法如下: java.util.Scanner scanner = new java.util.Scanner(System.in); 为了简化编程,Java 引入了 import 关键字,import 可以向某个 Java 文件中导入指定层次下的某个类或全部类。import 语句位于 package 语句之后,类定义之前。一个 Java 源文件只能含一个 package 语句,但可以含多个 import 语句。 使用 import 导入单个类的语法格式如下: import 包名+类名; 上面语句用于直接导入指定类,例如导入前面的 java.util.Scanner 类,代码如下: import java.util.Scanner; 此时,实例化 Scanner 对象的语法如下: Scanner scanner = new Scanner(System.in); 使用 import 语句导入指定下全部类的用法按如下: import 包名.*; 上面 import 语句中的星号(*)只能代表类,不能代表,表明导入下的所有类。 注意:使用星号(*)可能会增加编译时间,特别是引入多个大包时,所以明确的导入你想要用到的类是一个好方法,需要注意的是使用星号对运行时间和类的大小没有影响。 通过使用 import 语句可以简化编程,但 import 语句并不是必需的,如果在类里使用其它类的全名,可以不使用 import 语句。 Java 默认为所有源文件导入 java.lang 下的所有类,因此前面在 Java 程序中使用 String、System 类时都无须使用 import 语句来导入这些类。但对于前面介绍数组时提到的 Arrays 类,其位于 java.util 下,则必须使用 import 语句来导入该类。 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中声明一个,在另一个中引用该中的类,具体要求如下: 在 Student.java 文件中,声明一个名为 com.pojo 的; 在该文件中,有一个 Student 类,在该类中有一个 info 方法,该方法要求实现返回所有学生的功能,在该方法中定义一个 String 数组,数组中的内容有:“小明、小红、小强、小刚”,最后返回该数组; 在 Test.java 文件中,声明一个名为 com.test 的,并导入 Student 类; 在该文件中的主方法中,调用 Student 类的 info 方法,遍历该数组后输出数组的信息。 点击代码文件可以切换文件。 测试说明 平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。 预期输出: 学生信息如下: 小明 小红 小强 小刚 开始你的任务吧,祝你成功!
最新发布
10-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值