黑马程序员技术交流社区

标题: 集合类问题 [打印本页]

作者: \(^o^)/    时间: 2014-4-21 23:48
标题: 集合类问题
本帖最后由 \(^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.*;会编译失败,之前写程序的时候也没写过存在哪个包啊。。。



作者: a3330682    时间: 2014-4-22 00:01
ArrayList这个类是在uilt这个包里面 ;你不导入这个包调用肯定不行啊;
作者: ノtrack    时间: 2014-4-22 00:15
因为你楼上正解
作者: 左拉    时间: 2014-4-22 00:41
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类进行加载而造成性能的下降。
作者: 四川男人    时间: 2014-4-22 00:53
平时你用的基本上是自己些的类,而ArrayList是JDK封装在类库中的,调用人家的类,导入类的位置




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2