精华内容
下载资源
问答
  • 2017-03-28 18:25:44
    java中import用法

    单类型导入(single-type-import),例如import Java.io.File;

    按需类型导入(type-import-on-demand),例如 import java.io.*;

    关于这两种导入类型大家各有所爱,众说纷纭。这里分析一下这两种导入类型的大致工作原理供大家参考。

    单类型导入比较好理解,仅仅导入一个public类或者接口。而对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。

    既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。因为单类型导入和按需类型导入对类文件的定位算法是不一样的。java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录进仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:

    顶层路径名 \ 包名 \ 文件名.class = 绝对路径

    对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。

    对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:

    package com;

    import java.io.*;

    import java.util.*;

    当你的类文件中用到了File类,那么可能出现File类的地方如下

    File   \\ File类属于无名包,就是说File类没有package语句,编译器会首先搜索无名包

    com.File   \\ File类属于当前包

    java.lang.File   \\编译器会自动导入java.lang包

    java.io.File

    java.util.File

    需要注意的地方就是,编译器找到java.io.File类之后并不会停止下一步的寻找,而要把所有的可能性都查找完以确定是否有类导入冲突。假设此时的顶层路径有三个,那么编译器就会进行3*5=15次查找。

    了解以上原理之后,我们可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度。

    查看JDK的源代码就知道SUN的软件工程师一般不会使用按需类型导入。因为使用单类型导入至少有以下两点好处:

    1。提高编译速度。

    2。避免命名冲突。(例如:当你import java.awt.*;import java.util.*后,使用List的时候编译器将会出编译错误)

    当然,使用单类型导入会使用你的import语句看起来很长。

    更多相关内容
  • java中import关键字是什么意思

    千次阅读 2021-02-12 22:09:34
    import关键字是用来导入包的,因为实际开发,你不可能把所有的类都放在同一个default包里面。包的作用就是给java类进行分拣,不同业务逻辑的java类放在同一个包中,比如工具包,实体包。那么,你a包中的A类,...

    e31736eccfb2bdd817c3505c1e41e488.png

    import关键字是用来导入包的,因为实际开发中,你不可能把所有的类都放在同一个default包里面。包的作用就是给java类进行分拣,不同业务逻辑的java类放在同一个包中,比如工具包,实体包。

    那么,你在a包中的A类,希望调用b包中的B类,就需要导入b包。

    import关键字使用

    1、显示导入指定包下的类或者接口import java.util.Scanner;

    2、写在包的声明和源文件之间package com.demo.util;

    import java.util.Date;

    public class Demo{...}

    3、如果需要引入多个类或者接口,那么就并列写出package com.demo.util;

    import java.util.Scanner;

    import java.util.Date;

    public class Demo{...}

    4、如果导入的类java.lang包下的,如 : System String Math等类,则不需要显示声明package com.demo.util;

    public class Demo{

    //直接使用

    Math.PI;

    }

    5、.*代表某包下是所有类或者接口,如java.util.*;import java.util.*;

    6、import static 表示导入指定类的static的属性或方法//到如System类的static方法或者属性

    import static java.lang.System.*;

    7、处理同名类的导入使用,使用前需在前面加包名区分,如util和sql包下同时存在Date类//显示声明或使用

    java.util.Date date = new java.util.Date();

    8、不能导入子包import java.*.*;

    展开全文
  • java中import作用详解

    万次阅读 多人点赞 2017-07-07 17:47:19
    java中import详解import与package机制相关,这里先从package入手,再讲述import以及static import的作用。

    import与package机制相关,这里先从package入手,再讲述import以及static import的作用。


    package

    C/C++ 的 #include会把所包含的内容在编译时添加到程序文件中,而java的import则不同。

    这里我们先了解一下Java 的 package 到底有何用处。

    package名称就像是我们的姓,而class名称就像是我们的名字 。package和package的附属关系用"."来连接,这就像是复姓。比如说 java.lang.String就是复姓 java.lang,名字為 String 的类别;java.io.InputStream 则是复姓 java.io,名字為 InputStream的类别。

    Java 会使用 package 这种机制的原因也非常明显,就像我们取姓名一样 ,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生资料,或是同学彼此之间的称呼,就会发生很大的困扰。相同的,全世界的 Java 类数量,恐怕比日本人还多,如果类别不使用package名称,那在用到相同名称的不同类时, 就会产生极大的困扰。所以package这种方式让极大降低了类之间的命名冲突。

    Java 的package名称我们可以自己取,不像人的姓没有太大的选择 ( 所以出现很多同名同姓的情况 ),如果依照 Sun 的规范来取套件名称,那理论上不同人所取的套件名称不会相同 ( 需要的话请参阅 “命名惯例” 的相关文章 ),也就不会发生名称冲突的情况。

    可是现在问题来了,因為很多package的名称非常的长,在编程时,要使用一个类要将多个包名.类名完全写出,会让代码变得冗长,减低了简洁度。例如

    java.io.InputStream is = java.lang.System.in;
    java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
    java.io.BufferedReader br = new java.io.BufferedReader(isr);
    

    显得非常麻烦,于是Sun公司就引入了import。


    import

    import就是在java文件开头的地方,先说明会用到那些类别。
    接着我们就能在代码中只用类名指定某个类,也就是只称呼名字,不称呼他的姓。

    首先,在程序开头写:

    import java.lang.System;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    

    于是我们就可以在程序中这样写到:

    InputStream = System.in;
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    

    一个java文件就像一个大房间,我们在门口写着在房间里面的class的姓和名字,所以在房间里面提到某个class就直接用他的名字就可以。例如:

    System 就是指 java.lang.System,而 InputStream 就是指 java.io.InputStream。

    但是如果一个java文件里面有多个同个“姓”,即包名相同的类(例如上面的InputStream,InputStreamReader,BufferedReader都是java.io中的类),我们一一写出显得比较繁杂,所以Sun就让我们可以使用

    import java.lang.*;
    import java.io.*;
    

    表示文件里面说到的类不是java.lang包的就是java.io包的。编译器会帮我们选择与类名对应的包。

    那我们可不可以再懒一点直接写成下面声明呢?

    import java.*;
    

    历史告诉我们,这样是不行的。因為那些类别是姓 java.io 而不是姓 java。就像姓『诸葛』的人应该不会喜欢你称他為『诸』 先生吧。这样写的话只会将java包下的类声明,而不不会声明子包的任何类。

    这里注意,java.lang包里面的类实在是太常太常太常用到了,几乎没有类不用它的, 所以不管你有没有写 import java.lang,编译器都会自动帮你补上,也就是说编译器只要看到没有姓的类别,它就会自动去lang包里面查找。所以我们就不用特别去 import java.lang了。

    一开始说 import 跟 #include 不同,是因为import 的功能到此為止,它不像#include 一样,会将其他java文件的内容载入进来。import 只是让编译器编译这个java文件时把没有姓的类别加上姓,并不会把别的文件程序写进来。你开心的话可以不使用import,只要在用到类别的时候,用它的全部姓名来称呼它就行了(就像例子一开始那样),这样跟使用import功能完全一样。


    import的两种导入声明

    • 单类型导入(single-type-import)
      (例:import java.util.ArrayList; )
    • 按需类型导入(type-import-on-demand)
      (例:import java.util.*;)

    有如下属性:

    1. java以这样两种方式导入包中的任何一个public的类和接口(只有public类和接口才能被导入)

    2. 上面说到导入声明仅导入声明目录下面的类而不导入子包,这也是为什么称它们为类型导入声明的原因。

    3. 导入的类或接口的简名(simple name)具有编译单元作用域。这表示该类型简名可以在导入语句所在的编译单元的任何地方使用.这并不意味着你可以使用该类型所有成员的简名,而只能使用类型自身的简名。
      例如: java.lang包中的public类都是自动导入的,包括Math和System类.但是,你不能使用它们的成员的简名PI()和gc(),而必须使用Math.PI()和System.gc().你不需要键入的是java.lang.Math.PI()和java.lang.System.gc()。

    4. 程序员有时会导入当前包或java.lang包,这是不需要的,因为当前包的成员本身就在作用域内,而java.lang包是自动导入的。java编译器会忽略这些冗余导入声明(redundant import declarations)。即使像这样
      import java.util.ArrayList;
      import java.util.*;
      多次导入,也可编译通过。编译器会将冗余导入声明忽略.


    static import静态导入

    在Java程序中,是不允许定义独立的函数和常量的。即什么属性或者方法的使用必须依附于什么东西,例如使用类或接口作为挂靠单位才行(在类里可以挂靠各种成员,而接口里则只能挂靠常量)。

    如果想要直接在程序里面不写出其他类或接口的成员的挂靠单元,有一种变通的做法 :
    将所有的常量都定义到一个接口里面,然后让需要这些常量的类实现这个接口(这样的接口有一个专门的名称,叫(“Constant Interface”)。这个方法可以工作。但是,因为这样一来,就可以从“一个类实现了哪个接口”推断出“这个类需要使用哪些常量”,有“会暴露实现细节”的问题。

    于是J2SE 1.5里引入了“Static Import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员。static import和import其中一个不一致的地方就是static import导入的是静态成员,而import导入的是类或接口类型

    如下是一个有静态变量和静态方法的类

    package com.assignment.test;
    
    public class staticFieldsClass {
    	static int staticNoPublicField = 0; 
    	public static int staticField = 1;
        public static void staticFunction(){}
    }
    

    平时我们使用这些静态成员是用类名.静态成员的形式使用,即staticFieldsClass.staticField或者staticFieldsClass.staticFunction()。

    现在用static import的方式:

    //**精准导入**
    //直接导入具体的静态变量、常量、方法方法,注意导入方法直接写方法名不需要括号。
    import static com.assignment.test.StaticFieldsClass.staticField;
    import static com.assignment.test.StaticFieldsClass.staticFunction;
    
    //或者使用如下形式:
    //**按需导入**不必逐一指出静态成员名称的导入方式
    //import static com.assignment.test.StaticFieldsClass.*;
    
    public class StaticTest {
        public static void main(String[] args) {
    	    //这里直接写静态成员而不需要通过类名调用
            System.out.println(staticField);
            staticFunction();
        }
    }
    
    

    这里有几个问题需要弄清楚:

    1. Static Import无权改变无法使用本来就不能使用的静态成员的约束,上面例子的StaticTest和staticFieldsClass不是在同一个包下,所以StaticTest只能访问到staticFieldsClass中public的变量。使用了Static Import也同样如此。

    2. 导入的静态成员和本地的静态成员名字相同起了冲突,这种情况下的处理规则,是“本地优先。

    3. 不同的类(接口)可以包括名称相同的静态成员。例如在进行Static Import的时候,出现了“两个导入语句导入同名的静态成员”的情况。在这种时候,J2SE 1.5会这样来加以处理:

    4. 如果两个语句都是精确导入的形式,或者都是按需导入的形式,那么会造成编译错误。

    5. 如果一个语句采用精确导入的形式,一个采用按需导入的形式,那么采用精确导入的形式的一个有效。

    大家都这么聪明上面的几个特性我就不写例子了。

    static import这么叼那它有什么负面影响吗?

    答案是肯定的,去掉静态成员前面的类型名,固然有助于在频繁调用时显得简洁,但是同时也失去了关于“这个东西在哪里定义”的提示信息,理解或维护代码就呵呵了。
    但是如果导入的来源很著名(比如java.lang.Math),这个问题就不那么严重了。


    按需导入机制

    使用按需导入声明是否会降低Java代码的执行效率?

    绝对不会!

    一、import的按需导入

    import java.util.*;
    
    public class NeedImportTest {
        public static void main(String[] args) {
            ArrayList tList = new ArrayList();
        }
    }
    

    编译之后的class文件 :

    //import java.util.*被替换成import java.util.ArrayList
    //即按需导入编译过程会替换成单类型导入。
    import java.util.ArrayList;
    
    public class NeedImportTest {
        public static void main(String[] args) {
            new ArrayList();
        }
    }
    
    

    二、static import的按需导入

    import static com.assignment.test.StaticFieldsClass.*;
    public class StaticNeedImportTest {
        public static void main(String[] args) {
            System.out.println(staticField);
            staticFunction();
        }
    }
    

    上面StaticNeedImportTest 类编译之后 :

    //可以看出 : 
    //1、static import的精准导入以及按需导入编译之后都会变成import的单类型导入
    import com.assignment.test.StaticFieldsClass;
    
    public class StaticNeedImportTest {
        public static void main(String[] args) {
        //2、编译之后“打回原形”,使用原来的方法调用静态成员
            System.out.println(StaticFieldsClass.staticField);
            StaticFieldsClass.staticFunction();
        }
    }
    

    附加

    这是否意味着你总是可以使用按需导入声明?
    是,也不是!

    在类似Demo的非正式开发中使用按需导入声明显得很有用。

    然而,有这四个理由让你可以放弃这种声明:

    1. 编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计。
    2. 命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。
    3. 说明问题:毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。
    4. 无名包问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。

    Sun的工程师一般不使用按需类型导入声明.这你可以在他们的代码中找到:
    在java.util.Properties类中的导入声明:

    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.io.Writer;
    import java.io.OutputStreamWriter;
    import java.io.BufferedWriter;
    import java.security.AccessController;
    import java.security.PrivilegedAction;
    

    可以看到他们用单类型导入详细的列出了需要的java.io包中的具体类型。


    展开全文
  • javaimport关键字的使用

    千次阅读 2021-02-12 22:12:06
    在java中如何使用Java包中自带的类呢?方法一:使用时可以用Java.(包名).(方法名).(包中的类名);例如:Java.util.Arrays.toString(某个要排序数组);具体代码如下:public static void main(String[] args) {int[]...

    在java中如何使用Java包中自带的类呢?

    方法一:

    在使用时可以用Java.(包名).(方法名).(包中的类名);

    例如:Java.util.Arrays.toString(某个要排序数组);

    具体代码如下:

    public static void main(String[] args) {

    int[] arr=new int[]{1,2,45,4,5,23,7,8};//new一个数组对象,并且为整个数组赋值;

    String res=java.util.Arrays.toString(arr);

    //使用Java包中的util包中的Arrays方法中的toString()方法;声明:toString()返回指定数组内容的字符串表示形式。

    System.out.println(res);

    java.util.Arrays.sort(arr);//使用sort()方法升序排序整个数组

    res=java.util.Arrays.toString(arr);

    System.out.println(res);

    }

    方法二:

    在Java头文件首先导入要使用的Java包,使用import关键字导入

    例如:import  Java.(包名).(方法名);

    代码具体如下:

    import java.util.Arrays;//导入要使用的Java包

    public class import关键字 {

    public static void main(String[] args) {

    int[] arr=new int[]{1,2,45,4,5,23,7,8};

    //打印数组

    String res=Arrays.toString(arr);

    System.out.println(res);

    //数组排序

    Arrays.sort(arr);

    res=Arrays.toString(arr);

    System.out.println(res);

    }

    }

    程序执行效果:

    3a9af57127f8a7931c5cc8400bc40270.png

    展开全文
  • Java中import 导入的用法

    万次阅读 2018-12-11 19:21:53
    import 导入的用法 可以导入类,导入包,导入项目 导入方式: 1:全局导入:导入声明方法外 2:局部导入:导入声明方法 当你自定义的类和系统的类重名的时候,如果要使用系统类,就得使用局部导入 注意:尽量...
  • java中import java.util是什么意思

    千次阅读 2021-03-05 12:50:05
    java中import java.util是什么意思发布时间:2020-06-17 10:00:01来源:亿速云阅读:177作者:Leahjavaimport java.util是什么意思?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这...
  • 学习import或者package时,我们总是好奇,当Java包不系统默认路径下,那么我们怎么导入并使用自定义的包,下面就简单的介绍一下导入自定义包的设置 1. 不同目录(test_project和be_project)下新建两个文件夹...
  • Java中importimport static的区别

    千次阅读 2019-01-14 14:57:08
    默认会导入java.lang包下的 二、import static 从JDK1.5开始(导入后可直接调用相应的静态方法或者属性) ①.导入类下的静态方法或者静态属性 (范围修饰符不能为private,否则会报错)②.写法为  导入某个类下的所有...
  • java中指定importimport *的区别

    万次阅读 多人点赞 2018-08-16 13:11:05
    java中有两种包的导入机制,总结如下: 单类型导入(single-type-import), 例如 import java.io.File; 按需类型导入(type-import-on-demand),例如 import java.io.*; 这里分析一下这两种导入...
  • IDEA无法import自己工程类的问题解决方法

    千次阅读 多人点赞 2021-03-16 02:25:39
    今天开个很久没搞的工程,刚开的时候一片红,很自然的想到,要去配置一下项目的JDK,但是配置好之后,又出了个诡异问题:项目可以运行,但是import项目内部自己写的类的时候,都出现了红色错误。虽然import显示错误...
  • java里面import java.util.*;是什么用处?

    千次阅读 2021-02-12 12:49:00
    Java中import的作用是导入要用到的包中的类接口。import就是在java文件开头的地方,先说明会用到那些类别。接着我们就能代码只用类名指定某个类,也就是只称呼名字,不称呼他的姓。这其中...
  • Java中import导入的一些注意事项

    千次阅读 2018-08-24 09:41:56
    一、关于import import关键字主要是导入不同包下的类,比如说Arrays,但是像java.lang.*下所包含的所有类已经被默认导入了,也就是说每个java程序...一旦在java源文件使用import导入类,那么该源文件使用这...
  • Java:import java.util.Arrays(一)的使用

    千次阅读 多人点赞 2020-05-25 21:39:44
    1、如果找到关键字,则返回值为关键字数组的位置索引,且索引从0开始。(就和数组的排序计算一样,都是从零开始。) 2、如果没有找到关键字,返回 (-(插入点) - 1)。,所谓插入点值就是第一个比关键字大的元素...
  • Java中import另一个工程中自己写的类

    千次阅读 2015-04-17 11:34:57
    Java中import另一个工程中自己写的类Java中import另一个工程中自己写的类方法:产生jar包: 默认操作都Eclipse下 右键单击自己写的类的工程,选择Export->Java->Jar file, next选择路径保存jar包 导入jar包: 选择...
  • IDEA:修改JAVA文件自动引入import.*包

    千次阅读 2020-12-30 11:37:15
    Intellij Idea工具在java文件,经常会自动导入import java.utils.* 这样的导入方式,导致引入不必要的包,使得类的体积变大 不推崇导入*这样的做法! 问题解决 选择 Editor->Code Style->Java->Imports...
  • Java中import包带*(星号)问题

    千次阅读 2015-02-04 23:01:06
    Java中import包时,带*号和不带*号的问题
  • Java包与Import导入

    万次阅读 多人点赞 2019-04-12 12:06:35
    Java package提供了访问权限和命名的管理机制,它是Java中很基础却又非常重要的一个概念。 一、包的作用 1 把功能相似或相关的类或接口组织同一个包中,方便类的查找和使用。 2 如同文件夹一样,包也采用了树形...
  • javaimport java.util.Scanner;的意思

    千次阅读 2021-02-26 16:28:41
    import导入声明可分为两导入声明可分为两导入声明可分为两导入声明可分为两: 1>单类型导入单类型导入单类型导入单类型导入(single-type-import) 例例例例:import java.util.ArrayList; 2>按需类型导入按需...
  • java导入其他类方法--import使用方法

    万次阅读 多人点赞 2019-03-21 20:56:39
    java导入其他类方法–import使用方法 A:类同一个包 类名 对象名 =new 类名(); 例子: 被调用类Demo.java package com.test1;//属于同一个包 public class Demo{ public static void main(String[] args){ ...
  • JAVA中 package 和 import 的使用

    万次阅读 2017-11-06 14:11:49
    包名一般为小写,而类名的第一个字母一般为大写,这样引用时,可以明显的分辨出包名和类名。如果类的定义之前没有使用package定义包名,那么该类就属于缺 省的包。 1.1、 包的作用 可以更好的组织类,包与...
  • JAVA基础之 了解import java.io.*的作用

    万次阅读 2019-03-03 11:39:40
    在Java中,如果给出一个完整的限定名,包括包名、类名,那么Java编译器就可以很容易地定位到源代码或者类。Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类。 import java.io.*; 这个命令行将会...
  • Java中import语句

    千次阅读 2013-08-24 23:04:37
    1> 单类型导入(single-type-import) 例:import java.util.ArrayList;  2> 按需类型导入(type-import-on-demand) 例:import java.util.*;  以这样两种方式导入包的任何一个public的类和接口(只有public类...
  • java中package与import

    万次阅读 2014-02-26 08:14:33
    由于大家对package的使用存在太多困惑,我这里将自己对于package的使用的领悟进行一点总结:  package所存放的文件  所有文件,不过一般分一下就分这三种  1,java程序源文件,扩展名为.java。 ...
  • Java,不需要import就能引用到的类

    千次阅读 2019-03-15 17:12:32
    有没有注意到,你使用System/Exception/Math/String不需要import,因为这些类在java.lang下。java.lang是Java的基础类,唯一的,基础类,Java默认会import,所以java.lang下面的类不需要import。 第二种:同包。 ...
  • the import java.util cannot be resolve 解决导入报错

    万次阅读 多人点赞 2021-01-13 13:16:42
    the import java.util cannot be resolve 解决导入报错 当你的老师给你发了一个java项目文件 你随便下载到了桌面上 使用eclipse将其导入后 突然发现一堆红叉 为什么会出现这样的报错呢? 因为你没有把要导入的工程...
  • Java Import

    万次阅读 2016-10-24 13:25:41
    Java 使用import关键字来导入任意类型到同一个编译单元 代码,导入代码应放在包声明代码之后,类型声明代码之前 Java 有两种类型的导入声明: 单类型导入(Single-type import declaration) 按需类型...
  • import java.util.*”语句表示什么意思? 1、“import java.util.*;”表示的是把util这个包下的全部类导入到程序; 2、导入“import java.util.*;”后程序后面如果要用到util包里面的别的类都不需要再重新导入...
  • 就会出现import中有部分import的类红了,找不到了,但是代码可以正常编译运行,重启AS、重启电脑、Build clean、rebuild等操作都不能恢复发生时,请再尝试以下操作。 解决办法 方法1——> Android Studio 右上....
  • Javaimport javax.swing.*;语句理解

    千次阅读 多人点赞 2020-08-20 22:22:36
    这是java导入包的语法,表示导入swing这个包的所有类和接口   swing是图形可视包,导入这个包后才能进行图形化软件的开发   import      代表“引入” javax.swing  代表“路径” (javax文件夹下的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,463,748
精华内容 1,385,499
关键字:

在java中import如何自己出现

java 订阅