Java 中import的用法,以及类的种类

问:


已经定义了一个包Human;包里定义一个类Human 
1): 
我在这个包外重新写个程序,import整个Human包,但是Human 不是公共的,为什么啊,不是引用了整个包后就可以使用了的么? 
我然后又将写的程序也放到包里面去,然后再次运行,提示:找不到符号:Human 


应该怎么办啊 


答:


1. 类Human的访问修饰符是缺省访问控制符(即default),即类Human在包Human外是不可见的,只能被同一个包中的类访问或引用,所以你在包Human外写个程序是访问不了类Human的。 
2. 把写的程序放到包Human里面去,再次运行,提示:找不到符号:Human .首先是否编译了类Human; 其次在编译 放入包Human的那个程序 时要导入 类Human 的路径,Human类在包Human中,所以编译时采用 javac -cp Human类路径 放入包Human的那个程序类 (注意:Human类路径中不包含包Human,就是到包Human的父文件夹), 也可以直接在包Human中用javac *.java编译即可. 注意运行时当前路径要与包Human目录同级. 


在此还简单的说下对包和类的导入的理解: 
在Java中,是使用包来组织类的,其作用是确保类的唯一性,如有可能在同一个项目中,两个不同的程序员定义了相同名字的类Human,其各自把自己定义的Human类放在自己的定义的包中就不会冲突了(也就是包名是不同的),为了确保包名的绝对唯一性,在项目开发中,常把公司的域名逆序后做为包名,并对不同的项目采用不同的子包(如com.baidu; cn.com.sina等就是域名逆序,cn.com.sina.project1, cn.com.sina.project2 就是不同的项目包命名). 
一个类可以使用所属包中的所有类,也可以访问其他包中的公有类(即public类), 而要访问另一个包中的公有类,有两种做法:第一种是在每个类名前加完整的包名,如java.util.Date date = new Date();另外一种就是使用import语句,如import java.util.Date; import语句导入了类,但真正定位包中的类是编译器的工作,其实在字节码文件(以.class后缀的文件)中还是使用完整的包名来引用其他类的。 
把类放入包中,就是把包名放在类源码文件第一行,如package human; 


类的种类 
根据修饰符(modifiers)(不考虑内部类)对类的修饰,可以确认一个类: 
public class 类名{}:公共类,其可以被所有类访问,能实例化(也就是new操作); 
public abstract class 类名{}:抽象类,不可以实例化; 
   根据修饰符(modifiers)(不考虑内部类)对类的修饰,可以确认一个类: 
public class 类名{}:公共类,其可以被所有类访问,能实例化(也就是new操作); 
public abstract class 类名{}:抽象类,不可以实例化; 
public final class 类名{}:final类,不可继承; 
class 类名{}:同一包中可以被访问; 
从上可以看出,能修饰类的修饰符就是public,abstract,final,没有修饰符(default),其中abstract和final不能同时使用。 
当然还要深入,可以去了解 虚拟机如何定位类 。 


在此还是那句 default修饰的类(没有修饰符的类)不能被包外类访问 ,如果有错,希望指教(目前我所了解的是如此)。




摘自iaskchris


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值