精华内容
下载资源
问答
  • 关于Java类无法使用接口默认方法的问题Java8新特性新改变功能快捷键如何改变文本样式插入链接与图片如何插入一段漂亮代码片导出与导入导出导入 Java8新特性 总所周知Java8中对于接口增强,增加了接口默认...

    关于Java类无法使用接口的默认方法的问题

    Java8新特性

    总所周知Java8中对于接口增强,增加了接口的默认方法静态方法,使得接口越来越趋近于抽象类,在这里对于接口和抽象类的区别就不再赘述,在这里仅仅只是对于Java类无法使用接口的默认方法的问题进行一个分析解释。

    示例代码1

    public class A extends B implements Hook{
        public static void main(String[] args) {
            A.say();
    //        A.hookSay();/*Static method may be invoked on containing interface class only*/
        }
    }
    class B {
        static void say(){
            System.out.println("B");
        }
    }
    interface Hook{
        static void hookSay(){
            System.out.println("Hook");
        }
    }
    

    执行结果

    B

    在使用 A.hookSay() 时提示的错误是 Static method may be invoked on containing interface class only 说白了就是类不能继承接口的静态方法

    为什么Java8已经允许接口定义静态方法,但仍不允许继承接口的类继承接口的静态方法呢?
    网上有人解释说用接口大多数情况下对象的类型都是用接口类型声明的,如果是这样,重写静态方法就没用了。

    但是如果以这个说法子类也不应该继承父类的静态方法,所以这个说法是说不通的。

    示例代码2

    网上还有另一个说法是一个类可以实现多个接口,如果2个接口具有相同的静态方法,它们都将被继承,编译器就不知道要调用哪个接口。

    但是这样有一个问题,接口默认方法不也是会遇到相同的问题吗?

    public class A implements Hook,Hook2{
        @Override
        public void say(){
            System.out.println("A");
        }
        public static void main(String[] args) {
            new A().say();
        }
    }
    interface Hook{
        default void say(){
            System.out.println("Hook");
        }
    }
    interface Hook2{
        default void say(){
            System.out.println("Hook2");
        }
    }
    
    
    

    执行结果

    A

    如果一个类继承的2个接口具有相同的默认方法,编译器也不知道要调用哪个接口,于是Java就强制让这个继承2个接口的类必须重写那个重复的默认方法。

    那为什么Java不允许静态方法也用这种方式去解决静态方法冲突的问题呢?
    因为java中静态属性和静态方法可以被继承,但是没有被重写,而是被隐藏

    1. 父类和子类拥有相同名字的属性或者静态方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的,这就是隐藏
    2. 所有属性和静态方法都可以被继承和隐藏而不能被重写
    3. 当发生隐藏的时候,声明类型是什么类,就调用对应类的属性或者方法,而不会发生动态绑定

    结论

    假如类可以继承接口的默认方法,如果2个接口都有具有相同的静态方法,而类则会在编译时候不知道该继承哪个接口的静态方法,并且也无法通过重写静态方法来避免冲突(静态方法不能被子类重写,只能被子类隐藏)

    第一次写博客,有什么问题希望各位指出

    展开全文
  • 有时 类名.方法运行错误 简单说来,静态方法可以不用创建对象就调用...因此想在静态方法中引用非静态方法是不可能,因为它究竟引用是哪个对象非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错. ...

    有时 类名.方法运行错误
    简单说来,静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用.因此想在静态方法中引用非静态方法是不可能的,因为它究竟引用的是哪个对象的非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错.

    展开全文
  • 关于Java中compareTo方法的使用

    千次阅读 2017-07-27 19:56:16
    首先,说明一下javacompareTo方法,比较此对象与指定对象顺序。compareTo方法用于比较两个字符串ASCII码差值。常见情况有3中: 第一种:比较两个单个字符 例如: 首先我们定义两个只有单个字符变量i,...

    首先,说明一下java中的compareTo方法,比较此对象与指定对象的顺序。compareTo方法用于比较两个字符串的ASCII码的差值。常见的情况有3中:

    第一种:比较两个单个字符

    例如:

    首先我们定义两个只有单个字符的变量i,j

    String i = "a" ,  j = "b";

    System.out.println(i.compareTo(j));

    结果:-1;

    String i = "a" , String j = "a";

    System.out.println(i.compareTo(j));

    结果:0;

    String i = "b" , String j = "a";

    System.out.println(i.compareTo(j));

    结果:1;

    结论:首先说明一下:a的ASCII码为97,b的ASCII码为98. 在使用compareTo方法时,若被比较的两个字符串

    为单个字符,返回两个字符的ASCII码差值;

    第二种:首字母不相同的字符串(非单个)

    String i = "ab", j = "b";

    结果:-1;

    String i = "abc" , j = "def";

    结果:-3

    结论:首字母不相同的情况下,不论后面的是否相同,只比较首字母的ASCII码,返回首字母的ASCII码的差值。

    第三种:首字母相同的字符串(非单个)

    String i = "abcdef", j ="a";

    结果:1;

    String i = "abcdef", j ="ac";

    结果:-1;

    String i = "abcdef", j ="ab";

    结果:4;

    String i = "abcdef", j ="abcd";

    结果:2;

    String i = "abcdef", j ="abcde";

    结果:1;

    结论:如果参与运算的两个字符串的首字母是相同的,会依次的比较下一个字符,直到出现了不同的位置,在该

    位置会比较不同字符,并返回这两个字符的ASCII的差值。

    如果需要比较的两个字符的长度不一样,但是参与比较的两个字符串中从首字母开始不间断的存在相同部分

    (即参与比较的字符均相同),则会返回两个字符串长度的差值。


    compareTo方法可以用于比较字符串,在实际应用中我们可以考虑用compareTo方法来判断日期。例如:比较生产日期

    与截至日期,可判断是否过期。

    String makeData ="2017-07-27";

    String passedData = "2017-09-27";

    if(passedData.compareTo(makeData)>=0){

    System.out.println("还处在有效期内!");

    }else{

    System.out.println("已经超过了有效期!");

    }


    展开全文
  • 关于Java的读文件使用方法Bufferedreader类 首先关注两个有关读文件的类:File类和FileReader类 File类: File fl = new File("/src/..."); File对象代表磁盘中实际存在的文件和目录。可...

    关于Java的读文件使用方法Bufferedreader类

    首先关注两个有关读文件的类:File类和FileReader类

    File类:

    File fl = new File("/src/...");
    

    File对象代表磁盘中实际存在的文件和目录。可实例化的参数应该是一个文件的路径,而文件的路径是以字符串类String的实例实现的,当然相同与C中的路径寻找方法,可以是绝对路径也可以是相对路径,如果是相对路径,默认的是当前 .java 文件所在的文件路径。
    这里单独拿出来File类是为了类比FileReader类。

    FileReader类:

    FileReader fr = new FileReader("/src/...");
    /*或*/
    FileReader fr = new FileReader(fl);参数是个File类的实例
    

    FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。所以它得到的是文件流。

    BufferedReader类:

    BufferedReader br = new BufferedReader(new FileReader(String filename));
    

    1.之所以我们使用BufferedReader类是因为在所有无论是FileInputStream类还是其他,都没有一个方法可以一次性读取文件的一整行(他们都有一个方法是read(),这个方法每次只能读取一个字符或是一个字节,并不能读取一整行),而这正是BufferedReader类的好处。
    2.因为文件读取可能会出现异常:java.io.FileNotFoundException(找不到文件),所以在使用该类的时候,实例化后一定要使用try···catch···finally语句衔接,try语句的具体使用方法后续展开。
    3.使用该类需要导入包:import java.io.BufferedReader;

    展开全文
  • 本文通过实例代码给大家实例介绍了Java多线程中关于join方法的使用,非常不错,具有参考借鉴价值,需要朋友参考下
  • 关于java List 添加数据的方法使用

    千次阅读 2020-06-05 09:53:58
    List 添加元素的方法通常有① boolean add(E e);② void add(int index, E element); ① boolean add(E e);每次添加的元素被放置在list的尾部; ② void add(int index, E element);在插入操作过程中指定插入的...
  • add方法单独使用吗 一定要有对象吗,对象.add( ) add方法前面对象选取范围是什么,哪些类对象才可以使用add方法
  • import java.util.*; public class T { ...补充:我想问重点是:为什么这里toString()方法不会自动调用(就像int类和Integer类会在需要时候自动转换),或者说toString()方法自动调用条件都有什么?
  • 一,Java闪屏出现原因: 二,Java闪屏解决
  • Java Stringsplit方法的在处理不同limit时候,会有非常不同结果。 摘自Java doc 6:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String,%20int%29 split public ...
  • Java关于的方法

    2011-07-09 20:25:29
    关于Java的类中的方法使用,详细的说明如何使用方法。
  • final在翻译为最终的,不可变的,不可拓展的, final 在Java中可以用来修饰类,方法,以及字段,内部类。 在Java中,修饰类,那么该类就不能有子类,即不能创建一个类来...在Java的使用过程中,主要定义一些不变的...
  • 关于Java抽象类与抽象方法的使用

    千次阅读 2018-07-06 11:19:08
    首先我们要知道java中为什么要有抽象类和抽象方法,原因是为了解决java中接口的缺陷,接口在声明类的方法的时候,是根据一部分类的需要。如果有一天,随着业务需求的增加,功能要求越来越多,而我们又需要通过接口来...
  • 关于java8接口中默认方法的使用

    千次阅读 2017-07-06 13:39:31
    java8在接口中引入了默认方法,通过在方法前加上default关键字就可以在接口中写方法的默认实现,有点类似于C++中的多继承,但是当多个接口或父类中有相同签名的方法时,会引发一些问题,经过实验得出如下结论: ...
  • 下面小编就为大家带来一篇关于java中可变长参数定义及使用方法详解。小编觉得挺不错,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 第二种就是常见的没有用static修饰的方法;第三种就是构造方法,构造方法主要用于对类进行初始化。  静态方法可以使用一个定义且实例化过的对象来调用也可以直接使用类名来调用。  实例方法必须使用一个被定义且...
  • myDialog.dismiss( ) 比如这条语句中是关闭一个对话框意思吗 dismiss还有哪些方面应用
  • java编程关于使用c3p0连接mysql数据库使用的方法 #1.准备jar包 (1). 导入c3p0-0.9.2.1.jar包,mysql-connector-java-5.1.38.jar包和mchange-commons-java-0.2.3.4.jar包 具体jar包自行下载 #2打开eclipse,创建utils...
  • import java.util.Date; import bsh.EvalError; import bsh.Interpreter; /** * 在java中利用动态编译实现eval, * * 我们知道, * * 在很多脚本语言中都有eval函数, * * 他可以把字符串转换成为表态式...
  • 首先要说明就是Lock,通过查看Lock源码可知,Lock是一个接口: 1 2 3 4 5 6 7 8 public interface Lock {  void lock();  void ...
  • java关于equals方法使用的注意事项      已经好久都没写博客了,看来当初每周定至少写3篇博客计划又泡汤了,最近都...
  • 使用指定字符集将此 String 编码为 byte 序列,并将结果存储到一个新 byte 数组中。 public String(byte[] bytes, Charset charset) 通过使用指定 charset 解码指定 byte 数组,构造一个新 String。新 ...
  • Java基础关于Map(字典)的方法使用 java中一般用map与hashmap来创建一个key-value对象使用前提是要导入方法包: import java.util.HashMap; import java.util.Map;格式: Map 数据名称 = new HashMap();key(键)-...
  • 关于JAVA中Console.readLine()方法的使用
  • 关于JAVA容器的使用

    千次阅读 2018-03-20 10:10:13
    转载地址关于hash集合:当向hash集合(诸如HashSet、HashMap等)中存入一个元素时,HashSet会调用该对象hashCode()方法来得到该对象hashCode值,然后根据hashCode值决定该对象在HashSet中存储位置。...
  • 一个程序,单单使用自己的方法是不行的,你还需要引用外部的程序,这样才能完善你的程序。当然这要根据的你项目来说,现在我需要使用外部的程序,所以我就需要制作一个连接到外部的程序。所以我翻查了一下,发现可以...
  • 关于使用IO流中的方法将A文件内容复制到B文件中 先创建一个文件 // 创建新的文件 File file = new File("D:\\111Java高级\\demo\\asd1.txt"); boolean createNewFile = file....
  • 初级java开发者,对于try catch方法使用的不是很熟悉。请各位大神能不能推荐详细讲解网页,小弟感激不尽!!!
  • 反对使用stop(),是因为它不安全。它会解除由线程获取所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正问题所在。 网上查到资源是这么说,那么什么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,571
精华内容 4,228
关键字:

关于java的方法使用

java 订阅