精华内容
下载资源
问答
  • 仅从类和接口静态导入
    2021-03-14 03:13:21

    这个问题已经在这里有了答案:            >            What does a “Cannot find symbol” compilation error mean?                                    10个

    我试图通过在Util.java中定义一个静态方法来缩短System.out.println().我想利用Util.print()进一步简化为print().所以我做了一个静态导入.

    Util.java与ListOfNumbers.java位于同一目录下.当我尝试从测试人员类访问writeList()时,出现以下错误:

    import java.io.*;

    import java.util.List;

    import java.util.ArrayList;

    import static Util;

    public class ListOfNumbers {

    ...

    ...

    public void writeList() {

    // The FileWriter constructor throws IOException, which must be caught.

    PrintWriter out = null;

    try {

    print("Entered try statement...");

    ...

    } catch (IOException | IndexOutOfBoundsException e){

    print("Exception thrown: \n" + e.getMessage());

    ...

    }

    }

    }

    错误:

    >> javac Tester.java && java Tester

    .\ListOfNumbers.java:4: error: '.' expected

    import static Util;

    ^

    .\ListOfNumbers.java:4: error: ';' expected

    import static Util;

    ^

    .\ListOfNumbers.java:4: error: cannot find symbol

    import static Util;

    ^

    symbol: class Util

    .\ListOfNumbers.java:4: error: static import only from classes and interfaces

    import static Util;

    ^

    .\ListOfNumbers.java:24: error: cannot find symbol

    print("Entered try statement...");

    ^

    symbol: method print(String)

    location: class ListOfNumbers

    .\ListOfNumbers.java:34: error: cannot find symbol

    print("Exception thrown: \n" + e.getMessage());

    ^

    symbol: method print(String)

    location: class ListOfNumbers

    6 errors

    解决方法:

    您应该导入方法名称

    import static Util.print;

    如果要从Util导入所有静态方法:

    import static Util.*;

    标签:import,static,java

    来源: https://codeday.me/bug/20191118/2028282.html

    更多相关内容
  • 静态导入

    2019-12-03 23:30:51
    通过import后面添加static关键字,可以使用import语句导入接口的静态成员。当使用静态导入时,可以直接通过名称引用静态成员,而不必使用它们的类名进行限定,从而简化并缩短使用静态成员所需的方法。  &...

       Java提供了静态导入特性,静态导入扩展了import关键字的功能。通过在import后面添加static关键字,可以使用import语句导入类或接口的静态成员。当使用静态导入时,可以直接通过名称引用静态成员,而不必使用它们的类名进行限定,从而简化并缩短使用静态成员所需的方法。
       为了理解静态导入的方法,看一个不使用静态导入的例子。下面的程序计算直角三角形的斜边。程序使用Java内置数学类Math的两个静态方法,Math类是java.lang包一部分。第一个方法是Math.pow(),该方法返回指定幂的幂值。第二个方法是Math.sqrt(),该方法返回参数的平方根。

    //Compute the hypotenuse of a right triangle.
    public class Hypot {
        public static void main(String[] args) {
            double side1,side2;
            double hypot;
            side1=3.0;
            side2=4.0;
            //Notice how sqrt() and pow() must be qualified by
            //their class name,which is Math.
            hypot = Math.sqrt(Math.pow(side1,2)+Math.pow(side2,2));
            System.out.println("Given sides of lengths "+side1+" and "+side2+" the hypotenuse is "+hypot);
        }
    }
    

       因为pow()和sqrt()是静态方法,所以必须通过类名Math调用它们。这使得斜边的计算有些笨拙:

     hypot = Math.sqrt(Math.pow(side1,2)+Math.pow(side2,2));
    

       正如这个例子演示的,每次使用pow()或sqrt()(以及所有其他数学方法,如sin()、cos()、tan())方法时,都必须指定类名会变得单调乏味。
       通过静态导入可以消除这些单调乏味的指定类名的操作,如前面程序的下面这个版本所示:

    //Use static import to bring sqrt() and pow() into view.
    import static java.lang.Math.sqrt;
    import static java.lang.Math.pow;
    //Compute the hypotenuse of a right triangle.
    public class Hypot {
        public static void main(String[] args) {
            double side1,side2;
            double hypot;
            side1=3.0;
            side2=4.0;
            //Here,sqrt() and pow() can be called by themselves.
            //their class name,which is Math.
            hypot = Math.sqrt(pow(side1,2)+pow(side2,2));
            System.out.println("Given sides of lengths "+side1+" and "+side2+" the hypotenuse is "+hypot);
        }
    }
    

       在这个版本中,名称sqrt和pow通过它们的静态导入语句变得可以直接使用:

    import static java.lang.Math.sqrt;
    import static java.lang.Math.pow;
    

       在这些语句之后,不再需要使用类名限定sqrt()和pow()。所以,可以更方便地指定斜边的计算,如下所示:

     hypot = Math.sqrt(pow(side1,2)+pow(side2,2));
    

       可以看出,这种形式更加容易阅读
       静态导入语句有两种形式。第一种形式引入单个名称,前面程序使用的就是这种形式,如下所示:
       import static pkg.type-name.static-member-name;
       其中,type-name是包含所需静态成员的类或接口的名称,pkg指定完成包名,成员名称是由static-mamber-name指定的。
       静态导入语句的第二种形式是导入给定类或接口的所有静态成员,如下所示:
       import static pkg.type-name.*;
       如果要使用在某个类中定义的多个静态方法或域变量,那么使用这种形式不必逐个指定就可以导入它们,所以,前面的程序可以使用一条import语句导入pow()和sqrt()成员(以及Math类的所有静态成员):

    import static java.lang.Math.*;
    

       当然,静态导入不仅仅局限于Math类,也不仅仅局限于方法。例如,下面这条语句导入了静态的System.out:
       import static java.lang.System.out;
       有了这条语句之后,向控制台输出时就可以不再使用System限定out,如下所示:

    out.println("After importing System.out,you can use out directly.");
    

       向刚才显示的那样导入System.out是否是一个好主意,还应当视具体情况而定。尽管可以缩短语句,但是对于阅读程序的所有人来说,将无法立即弄清楚out引用的是system.out。
       另外一点,除了导入Java API定义的接口和类的静态成员外,也可以使用静态导入语句导入我们自己创建的接口和类的静态成员。
       尽管静态导入很方便,但是注意不要滥用。记住,Java将类库组织到包中的目的是避免名称空间发生冲突。当导入静态成员时,就将这些成员带入全局名称空间。因此,这会增加潜在的名称空间冲突以及无意中隐藏其他名称的风险。如果在程序中只使用静态成员一两次,最好不要导入它们。此外,有些静态成员,例如System.out,很容易识别,您可能不希望导入它们。静态导入时针对重复使用某个静态成员这类情况设计的。例如执行一系列数学计算。总之,应当使用但不要滥用这一特性。

    展开全文
  • java静态导入接口默认方法方法引用2019-08-21 20:06:20.0静态导入一个中的静态方法静态变量可以直接导入使用,而不必导入整个。使用 import static,如下:package com.yawn.java8;import static ...

    java静态导入、接口默认方法和方法引用

    2019-08-21 20:06:20.0

    静态导入

    一个类中的静态方法和静态变量可以直接导入使用,而不必导入整个类。

    使用 import static,如下:

    package com.yawn.java8;

    import static com.yawn.java8.util.TestUtil.DEFAULT_NAME;

    import static com.yawn.java8.util.TestUtil.getDefaultName;

    /**

    * @author yawn

    * @date 2018-04-10 15:14

    */

    public class Test {

    public static void main(String[] args) {

    // 静态导入后直接使用

    String defaultName = getDefaultName();

    String name = DEFAULT_NAME;

    }

    }

    接口默认方法和静态方法:

    在接口中,可以使用default定义普通方法,也可以使用static定义静态方法;普通方法通过实现类的实例进行调用,静态方法通过接口名进行调用。

    如下:

    package com.yawn.java8;

    /**

    * @author yawn

    * @date 2018-04-10 15:14

    */

    public class Test {

    public static void main(String[] args) {

    IMessage message = new IMessage() {

    // 普通方法甚至在实现类中可以重写

    @Override

    public void hello2() {

    System.out.println("hello2 override");

    }

    @Override

    public void message(String message) {

    System.out.println(message);

    }

    };

    message.message("这是一个msg消息!");

    // 接口中的 default 方法

    message.hello1();

    message.hello2();

    // 接口中的 static 方法

    IMessage.world1();

    IMessage.world2();

    }

    }

    interface IMessage {

    // 普通方法通过对象调用

    default void hello1() {

    System.out.println("Hello1");

    }

    default void hello2() {

    System.out.println("Hello2");

    }

    // 静态方法通过类名调用

    static void world1() {

    System.out.println("World1");

    }

    static void world2() {

    System.out.println("World2");

    }

    void message(String message);

    }

    这样使用,使得接口更像抽象类,同时也可以让子类实现多个接口。

    方法引用

    XWPFTemplate template = XWPFTemplate.compile("contract_generate.docx");

    template.getElementTemplates().stream()

    .map(ElementTemplate::getTagName)

    .collect(Collectors.toList())

    .forEach(System.out::println);

    // 等同于以下代码

    template.getElementTemplates().stream()

    .map(element -> element.getTagName())

    .collect(Collectors.toList())

    .forEach(tagName -> System.out.println(tagName));

    当lambda表达式只是调用了一个已经申明过的方法时,为了增加可读性和进一步简化,可以使用方法引用。

    4类方法引用说明:

    类型例子

    static方法的引用ContainingClass::staticMethodName

    特定对象的方法的引用containingObject::instanceMethodName

    特定类型的方法的引用ContainingType::methodName

    构造器的引用ClassName::new

    2019-08-21 20:06:20.0

    展开全文
  • 【Java】静态导入import static

    千次阅读 2018-11-23 23:40:45
    1. 意义 import static静态导入是JDK 1.5增加的特性,有两种使用方式: ...用.*时,表示导入中的所有静态属性方法。 用静态名称时,表示只导入该静态属性或方法。 静态导入后就可以直接用名称访问静态属性和方...

    1 意义

    import static静态导入是JDK 1.5增加的特性,有两种使用方式:

    import static java.lang.Integer.*;
    或者
    import static java.lang.Integer.MAX_VALUE;
    

    解释:

    • .*时,表示导入类中的所有静态属性和方法。
    • 用静态名称时,表示只导入该静态属性或方法。

    静态导入后就可以直接用名称访问静态属性和方法,而不必用ClassName.methodName()的方式来访问。

    其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序。但是,滥用静态导入会使程序更难阅读,更难维护。


    2 使用

    2.1 正确使用

    当程序中需要经常使用某个静态方法时,可以使用静态导入,用于减少字符输入量和提高程序可读性。比如封装一下常用的System.out.println(),就可以直接使用println()了。

    使用静态方法封装目标方法:

    package com.demo.importstatic
    
    public class Utils {
        public static void println(String x) {
            System.out.println(x);
        }
    }
    

    静态导入:

    package com.demo.importstatic
    
    import static com.demo.importstatic.Utils.println;
    
    public class Test {
        public static void main(String[] args) {
            println("a test string");
        }
    }
    

    2.2 错误使用

    如果用.*方式导入多个类的静态属性和方法,就会使代码可读性降低,分不清静态属性和方法到底属于哪个类,也不清楚所使用的静态属性和方法的意义。比如:

    import static java.lang.Double.*; 
    import static java.lang.Math.*; 
    import static java.lang.Integer.*; 
    

    静态导入这些类的静态属性和方法之后,当调用MAX_VALUE时,就不知道到底调用的哪个类的属性,编辑器这时候就会报错。还有其他一些错误使用需要规避。


    3 总结

    对于静态导入,要遵循两个规则:

    1. 不要使用.*方式,除非是导入静态常量(只包含常量的类或接口)
    2. 属性名或方法名具有明确、清晰的表象意义。

    4 参考

    展开全文
  • JAVA静态导入(import static)详解

    千次阅读 2021-02-12 10:15:55
    当你想使用static成员时,可以使 用静态导入(在API中的类和你自己的上,都可以使用该特性)。下面是静态导入前后的代码实例:在静态导入之前:public class TestStatic {public static void ...
  • idea设置java静态导包

    千次阅读 2019-07-05 10:39:01
    挨个找: File -> Settings -> Code Style -> Java -> Imports ...点击 + ,粘贴你需要导入的包路径,点对勾,点apply,导包,看效果 import static org.springframework.test.web.servlet.req...
  • Java提高:静态导入给你带来的麻烦

    千次阅读 2013-07-11 10:18:46
    静态导入后,代码中就不用再写类名了,但是我们知道是“一事物的描述”,缺少了类名的修饰,静态属性静态方法的表象意义就会被无限方法,这会让阅读者很难弄清楚其属性或方法代表何以,甚至是哪一
  • 问题说明: 运行时报错。错误如下: Static interface methods are only supported starting with Android...仅从Android N开始支持静态接口方法。 解决办法: 指定jdk版本 android { ... compileOptions { ...
  • 近来发现在调用一个带有静态代码块的时总是奇怪的异常掉了,catch exception也捕获不住。 后来通过catch throwable发现能够捕获到NoClassDefFoundError这个错误,在网上一通搜也找不到试用的解决方式。 我试着把...
  • Error:(30, 1) java: 仅从类和接口静态导入 二、错误原因 查了好久,原因竟然是我的JDK版本过高导致的,本地装了JDK8JDK9,Idea编辑器打开项目默认用的是JDK9,而这个项目本身用的是JDK8。 三、解决方案 将...
  • 工程师培训资料 标题Java培训系列课程-静态导入精品培训 培训人xx 本章学习目标 理解可变参数方法的定义及使用 理解增强型for循环的特点及使用 理解静态导入的操作 理解泛型的主要作用及实现 理解多例设计模式枚举...
  • C++静态动态库的导入导出

    千次阅读 2021-12-14 19:37:09
    C++静态库的导出导入。 C++动态库函数的导出导入。 C++动态库的导出导入
  • 理解Java的static import静态引入机制

    万次阅读 2012-11-13 12:52:58
    J2SE 1.5里引入了“Static Import”机制,借助这一机制,可以用略掉所在的接口名的方式,来使用静态成员。本文介绍这一机制的使用方法,以及使用过程中的注意事项。  在Java程序中,是不允许定义独立的函数...
  • android studio提供了三种方式导入外部资源: 1. Library dependency – 在线添加、需联网下载 ...3. Module dependency – 本地添加带有源码的库工程(要先 import Moudle 将库工程导入项目中)
  • java怎么导入类

    千次阅读 2021-02-27 08:25:05
    package对应目录的相对路径,class对应文件,如E:\Workspaces\MyEclipse10\JavaStudy\src\com\happyframework\javastudy\hello\Hello.java关于class有如下几点规则:文件的名字必须class的名字一致(public级别的...
  • C++静态类

    千次阅读 2015-12-19 10:47:31
    可以声明为 static 的,以指示它包含静态成员。不能使用 new 关键字创建静态类的实例。 使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的...
  • jdk1.8如何调用接口中的静态方法

    千次阅读 2021-11-24 14:22:31
    今天运行代码报错! 1、自定义接口: public interface MyInterface { ...2、调用接口中的静态方法 object run { def main(args: Array[String]): Unit = { MyInterface.getmessage() } } 3、报错 Static met
  • 实现接口时,接口就充当可以引用这个类型的实例的类型。因此,实现了接口,就表明客户端可以对这个的实例实施某些动作。为了任何其他目的而定义接口时不恰当的。 有一种叫做常量接口,他不满足上面的条件...
  • Java程序的内存划分this、super注解(Annotation)访问控制(Access Control)toString方法static静态导入成员变量的初始化初始化块、静态初始化块单例模式(Singleton Pattern) Java笔记目录可以点这里:Java ...
  • 面向对象编程之继承、多态、封装、抽象接口、包继承的继承格式为什么要继承继承的特点继承的种类及关键字访问权限多态向上转型动态绑定...类和接口的区别接口的区别包包的语法格式和导入包的作用欢迎指正...
  • 欢迎进入JAVA基础知识讲解 本系列文章将主要针对JAVA一些基础知识点进行讲解,为平时归纳所结,不管是刚...JDK(java development kit ,java开发工具包,提供java开发环境运行环境) JRE(java runtime environme...
  • Java静态导入(import static)需谨慎

    千次阅读 2016-05-31 06:40:08
    Java 5 开始引入了静态导入语法(import static),其目是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序。我们先来看一个不使用静态导入的例子,也就是一般导入: public class MathUtils{  // ...
  • vs2017静态动态库的创建与使用简明教程静态库创建使用创建使用易错点动态库创建使用创建使用注意DLL的好处Others 静态库创建使用 创建 打开vs2017点击创建新项目,选择静态库; 在StaticLib.cpp文件下...
  • 静态和导入库的区别

    千次阅读 2016-11-22 11:19:42
    目前以lib后缀的库有两种,一种为 静态链接库 ...静态库 是一个或者多个obj文件的打包,所以有人干脆把obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个 静态库 ,如果其中有错,它会准确的找
  • 1. 封装的关键——访问控制符:  1) Java有4种访问控制级别,范围从小到大(从严到宽)依次为:private、default(包)、protected、public ... private:最严,只有在当前中可见,外的一切都不可见(都无法访问
  • 在日常开发过程中,静态变量 静态方法 是我们常见的用法,Java中相信大家并不陌生了,那么在 Kotlin 中该如何使用呢?其实很简单,只需要一个将变量方法包含在 companion object 域中即可,比如这样: ...
  • Java高级系列——如何设计类和接口

    万次阅读 2018-01-06 14:27:55
    一、介绍 无论你使用哪一种编程语言(在这里Java也不排除),遵循一种好的设计规则对于写出清晰、易于理解、可测试、长生命周期...确切的讲,我们将会讨论接口(interfaces)和接口默认方法(interfaces with default
  • 面向对象编程:包,继承,多态,抽象接口

    千次阅读 多人点赞 2021-11-16 21:33:39
    1、导入包中的 import java.util.Date; // import java.util; 导入一个具体的 不能导入一个具体的包 import java.util.*; // 通配符 // util下有很多 Java处理的时候 需要哪个才会拿哪个 // C语言 通过...
  • iOS之深入解析静态动态库

    千次阅读 2021-08-31 15:06:18
    本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。 ② 库的分类 根据程序代码的开源情况,库可以分为两: 开源库:源代码是公开的,可以看到具体实现,比如知名的第三方框架:AFNetworking、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,507
精华内容 52,602
关键字:

仅从类和接口静态导入