• 在 Java 中使用import关键字来导入任意类型到同一个编译单元中

  • 在代码中,导入代码应放在包声明代码之后,类型声明代码之前

Java 中有两种类型的导入声明:

  1. 单类型导入(Single-type import declaration)

  2. 按需类型导入(Import-on-demand declaration)

单类型导入

  • 单类型导入用于导入指定包中的一个单独的类型(例如一个类)。语法如下:
import <fully qualified name of a type>;
  • 下面的代码演示了如何从 org.aptusource 包中导入 Dog 类:
import org.aptusource.Dog;
  • 单类型导入只能导入一个类型,如果要导入多个类型,那么可以使用多个单独的单类型导入语句

  • 下面的代码导入了 pkg1 包中的 ClassOne,pkg2 包中的 ClassTwo 和 ClassThree,pkg3 包中的 ClassFour:

import pkg1.ClassOne;
import pkg2.ClassTwo;
import pkg2.ClassThree;
import pkg3.ClassFour;
  • 下面的代码使用了 Dog 类的全名称
public  class  Main{public static  void  main(String[]  args)  {org.aptusource.Dog jack;  // Uses  full qualified name for the   Dog  class}
}
  • 下面的代码演示了如何使用单类型导入,我们将导入 org.aptusource.Dog 类,这样就可以使用简单名称来引用 Dog 类

更改后的 Main类如下

import org.aptusource.Dog; // 导入 Dog 类public  class  Main {public static  void  main(String[]  args)  {Dog  jack; // 使用 Dog 类的简单名称}
}
  • 当编译器遇到简单名称 Dog 所在的代码段时,比如:
Dog  jack;
  • 编译器将会查找所有的导入声明来将简单名称转换为全名称

  • 像上面的例子中,编译器会将代码段替换为:

org.aptusource.Dog  jack;
  • 导入声明可以让你在代码中使用简单名称,增加了代码的可读性

按需导入

  • 按需导入可以使用一行导入代码来导入多个类型

  • 按需导入的语法如下:

import <package name>.*;
  • 上面的语句可以看到,包名后直接跟了一个点号和一个星号(*)

  • 例如,下面的代码导入了 org.aptusource 包中的所有类型:

import org.aptusource.*;

上面的 Main 类可以使用按需导入来重写:

import org.aptusource.*;
public  class  Main {public static  void  main(String[]  args)  {Dog  jack; // 使用 Dog 类的简单名称}
}

静态导入

使用说明

  • 静态导入是JDK5.0引入的新特性

  • 要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类,使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名

Demo

  • 比如先在一个包中定义一个这样的类:
package com.example.learnjava;public class Common
{public static final int AGE = 10;public static void output(){System.out.println("Hello World!");}
}

使用一般导入

  • 在另一个包中使用时,如果不用静态导入,是这样用的:
    前面加入了导入语句,将Common类导入,使用其中的静态成员变量和静态方法时需要加上类名
package com.example.learnjava2;import com.example.learnjava.Common;public class StaticImportTest
{public static void main(String[] args){int a = Common.AGE;System.out.println(a);Common.output();}}

使用静态导入

静态导入的语法是:

  • import static 包名.类名.静态成员变量;
  • import static 包名.类名.静态成员函数;

注意导入的是成员变量和方法名

  • 如前面的程序使用静态导入后:
package com.example.learnjava2;import static com.example.learnjava.Common.AGE;
import static com.example.learnjava.Common.output;public class StaticImportTest
{public static void main(String[] args){int a = AGE;System.out.println(a);output();}}

优点

  • 减少字符输入量,提高代码的可阅读性,以便更好地理解程序

  • 举一个例子来说:

import static java.lang.Math.PI;
public class MathUtils{// 计算圆面积public static double calCircleArea(double r){return PI * r * r;}// 计算球面积public static double calBallArea(double r){return 4 * PI * r * r;}
}

缺点

  • 滥用静态导入会使程序更难阅读,更难维护。静态导入后,代码中就不用再写类名了,但是我们知道类是“一类事物的描述”,缺少了类名的修饰,静态属性和静态方法的表象意义可以被无限放大,这会让阅读者很难弄清楚其属性或方法代表何意,甚至是哪一个类的属性(方法)都要思考一番,特别是在一个类中有多个静态导入语句时,若还使用了*通配符,把一个类的所有静态元素都导入进来了,那简直就是恶梦

参考资料

  • Java静态导入

  • Java import

Java Import相关推荐

  1. java import自定义类_Java实现的自定义类加载器示例

    本文实例讲述了Java实现的自定义类加载器.分享给大家供大家参考,具体如下: 一 点睛 1 ClassLoader类有如下两个关键方法: loadClass(String name, boolean ...

  2. Java import javax.servlet 出错

    Java import javax.servlet 出错 Error: The import javax.servlet cannot be resolved The import javax.ser ...

  3. java awt point_100分 解决java import java.awt.Point;import java.awt.Rectangle;

    100分 解决java import java.awt.Point;import java.awt.Rectangle; 100分 解决java import java.awt.Point; impo ...

  4. java import javax.mail.*报错原因

    java import javax.mail.*报错原因:缺少收发邮件的jar包 下载地址: http://www.oracle.com/technetwork/java/javamail/javam ...

  5. java import class_有关import的问题__import_Java_class_java_Graphics__169IT.COM

    我刚装完Jbuilder7,就在里面编了一个程序 首先新建了一个project,然后在其中新建了一个class 在其中输入程序如下 import Java.awt.Graphics; class li ...

  6. %@ page language=java import=java.util.* pageEncoding=UTF-8%

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  7. java——import语句

    测试输入: 牛肉,3,true 预期输出: 面码:牛肉,粉的份量:3两,是否带汤:true 面码:牛肉,粉的份量:3两,是否带汤:false 面码:酸辣,粉的份量:2两,是否带汤:true测试输入: ...

  8. java import路径_Java import以及Java类的搜索路径

    如果你希望使用Java包中的类,就必须先使用import语句导入. import语句与C语言中的 #include 有些类似,语法为: import package1[.package2-].clas ...

  9. java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved

    折腾Eclipse时,经常会遇到这种情况: 缺少某个库,找到之后,需要将该库,jar包,加入到当前项目,使得代码中的import xxx得以正常导入. [如何在Eclipse中导入/添加(外部的)库/ ...

最新文章

  1. 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
  2. 灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术(第3版)
  3. 指针:自定义函数sumDiff(),调用它来求两个数的和、差
  4. 解决pl/sql devloper 中数据库操作语句中文乱码的问题
  5. 网站留言板防重复留言_2020微信公众号怎么开通原创、赞赏、留言功能?【5月更新】...
  6. Centos7安装完成找不到 ifconfig 网路设置命令
  7. spark如何进行聚类可视化_利用spark做文本聚类分析
  8. oracle11g服务项及其启动顺序
  9. mac制作Windows10镜像
  10. JavaScript-ECMAScript、BOM、DOM
  11. 个人官网第8次升级(新功能、用户体验、修复bug、系统优化)
  12. mysql 1548_MySQL创建函数由于Error 1548失败
  13. c语言三阶素数魔方阵,C语言 三阶魔方阵
  14. super()继承关系总结
  15. LeetCode刷题笔记2——数组2
  16. 基于ACF多通道特征的人脸检测——从原理到实现
  17. Jmeter介绍与使用
  18. 树莓派+motion实现局域网简单监控
  19. TypeScript数据类型
  20. html特效代码 枫叶,jQuery飘落的枫叶

热门文章

  1. 【深度学习图像识别课程】毕业项目:狗狗种类识别(2)代码实现
  2. 国际快递顺丰API接口接入教程代码示例
  3. B站黑马程序员Oracle学习——数据的增删改
  4. ChatGpt真的会取代程序员吗,有点过分担心了
  5. 实现页面上方实现输入关键字搜索出关联关键词内容的功能
  6. 58旗下转转:上半年闲置交易报告出炉
  7. 十大高颜值蓝牙耳机排行榜,最受欢迎的真无线蓝牙耳机前十名
  8. 计算机网络双语chapter4答案,计算机网络题库chapter4
  9. 如何用EXCEL求一组数的方差…
  10. ubuntu及shell脚本常用命令入门