A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© \(^o^)/ 中级黑马   /  2014-4-21 23:48  /  1034 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 \(^o^)/ 于 2014-4-23 09:56 编辑
  1. import java.util.*;
  2. class CollectionDemo
  3. {
  4. public static void main(String[] args)
  5. {

  6. //创建一个集合容器,使用collection接口的子类,ArrayList

  7. ArrayList a1=new ArrayList();

  8. //添加元素。

  9. a1.add("java01");
  10. a1.add("java02");
  11. a1.add("java03");
  12. a1.add("java04");

  13. //获取个数,集合长度。

  14. sop("size:"+a1.size());

  15. }
  16. public static void sop(Object obj)
  17. {
  18. System.out.println(obj);
  19. }
  20. }
复制代码
为什么在第一行不加import java.util.*;会编译失败,之前写程序的时候也没写过存在哪个包啊。。。


4 个回复

正序浏览
平时你用的基本上是自己些的类,而ArrayList是JDK封装在类库中的,调用人家的类,导入类的位置
回复 使用道具 举报
import是导入的意思。
在java里面存在很多个包,每个包都封装了很多类库,那些类都是java语言设计者为开发人员预备的,因为Java的支持开源,所以在JDK安装之后可以阅读源代码(jdk安装路径的src目录下)。
所以,使用import导包的意思就是,你使用了java语言系统中某个包中的类,在程序编译运行的时候jre就能识别出来。
java中的包主要有:
java.lang包:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
java.util包:包含如处理时间的date类,处理变成数组的Vector类,以及stack和HashTable类
java.awt包:构建图形用户界面(GUI)的类库,低级绘图操作Graphics类,图形界面组件和布局管理如Checkbox类、Container类、LayoutManger接口等,以及界面用户交互控制和事件响应,如Event类
java.net包:实现网络功能的类库有Socket类、ServerSocket类
java.sql包:实现JDBC的类库
java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等等

所以在学习java的初级阶段,我们使用一些简单的数据类型计算,输出,转换等等都实际上导入了java.lang这个包,不过在java语言中,这个包是基础包,设置为默认存在,所以不用import语句就可以编译运行。
而在你这个代码中,使用了ArrayList这个类,这个类在java.lang包中是不存在的,它在java.util包中,必须手动导入jre才能识别它是什么(除非你把这个自定义成类)。

自定义包:
我们可以将一些常用的功能写在一个包里面,然后在需要的时候直接导入自定义的包就可以使用自己写的类,这样可以省略很多重复代码,有助于提高编码效率。

自定义包的时候,需要定义一个包名,包名可以随意取,但是普遍的包命名规范是:小写,而且采用域名反转的形式命名,比如可以用org.test.myname的形式,如果是这样的命名形式,那么你的源代码的目录相对路径就是:\org\test\myname\src
假设在自定义的包中定义了一个类Student:
  1. package org.test.myname;
  2. //package表示这是一个用户自定义的包
  3. //自定义一个类
  4. public class Student{
  5.      private String name;
  6.      //构造方法
  7.      public Student(String name){
  8.          this.name=name;
  9.      }
  10.      public String toString(){
  11.           return this.name;
  12.      }
  13. }
复制代码


那么当你以后要使用Student这个类的时候就可以导入刚才定义的包:



  1. //导入刚才定义的包,JVM就可以识别包中的Student类
  2. import org.test.myname;

  3. public  class Test{
  4.       public static void main(String[] args){
  5.         //使用自定义包中的自定义类
  6.         Student stu=new Student("Test-1");
  7.         System.out.println(stu);
  8.   }
  9. }
复制代码


如果你在包中写了两个类,Student和Teacher,在导包的时候有两种做法
1:根据自己的需要导入相应的类(指定名称)
     import  org.test.myname.Student;
2:让JVM自动识别包中的类
     import org.test.myname.*;    在这里*表示任意的意思,java虚拟机系统会根据代码中出现的类自动导入那个类
这两种做法实际效果是完全一样的,当你在使用Student类的时候,java虚拟机不会对Teacher类进行加载而造成性能的下降。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为你楼上正解
回复 使用道具 举报
ArrayList这个类是在uilt这个包里面 ;你不导入这个包调用肯定不行啊;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马