草庐IT

弱引用

全部标签

java - 为什么Java静态方法可以调用构造函数,但不能引用this?

我的假设:静态方法不能调用非静态方法。构造函数是一种没有返回类型的方法。给定这个例子...publicclassMain{publicstaticvoidmain(String[]args){Mainp=newMain();//constructorcallk();//[implicit]`this`reference}protectedMain(){System.out.print("1234");}protectedvoidk(){}}此行打印1234:Mainp=newMain()这一行抛出异常:k()为什么示例代码会做这两件事?它们不会与我的上述假设冲突吗?我的假设是否正确?

java - Comparator.comparing(...) 在采用 String::compareTo 时抛出非静态引用异常

下面是我的代码片段的两行:ListlistDevs=Arrays.asList("alvin","Alchemist","brutus","larsen","jason","Kevin");listDevs.sort(Comparator.comparing(String::length));//ThisworksfinelistDevs.sort(String::compareToIgnoreCase);//Thisworksfine但是(出于经验)当我尝试写listDevs.sort(Comparator.comparing(String::compareToIgnoreCase)

java - java引用之间的异或操作

我想为xor-linkedlist编写java代码.有人可以建议我如何在引用之间执行异或运算吗? 最佳答案 说长话短,你不能。多说一句,如果Java允许您通过引用传递变量,则Java语言不允许对这些引用进行算术运算。因此,您的异或运算将无法进行。此外,在阅读维基百科条目时,我了解到这是经典链表实现的内存优化,仅依赖于该指针算法来确定下一个/上一个节点。我认为这是一种非常高级的内存优化,它在Java中似乎不如在非托管内存语言(例如C(++))中有用。 关于java-java引用之间的异或操

Java for循环按值或按引用

我在我的代码中发现了一个问题。首先是代码:publicclassMain{/***@paramargs*/publicstaticvoidmain(String[]args){String[]blablubb={"a","b","c"};for(Strings:blablubb){s="over";}printArray(blablubb);for(inti=0;i输出是:abcoveroverover我假设第一个循环也会覆盖数组中的字符串。所以无论如何输出都会结束。它似乎创建了值的副本而不是创建引用。我从来没有意识到这一点。我做错了吗?是否可以选择创建引用?//编辑:似乎每个人都知道

java - 如何检测何时不再引用对象

有没有办法创建注册一个处理程序,该处理程序将在释放对某个对象的最后一个引用时准确调用?一个例子是一个由物理数据文件支持的对象,一旦该对象不再被引用,该文件应该被关闭而不是重命名。如果无需显式调用该对象的“关闭”方法就可以了。我从Weak/Phantom引用区域了解到的所有通知机制仅说明通知将在某个时间点发生,但无法保证何时发生... 最佳答案 简而言之,没有。Java规范明确拒绝让您知道最后一个引用何时被释放。JVM实现(和优化)依赖于此。没有钩子(Hook)。 关于java-如何检测何

Java笔记:方法引用

Java中的方法引用与Lambda表达式一样,同样式函数式编程的一种体现,允许将方法作为参数传递给另一个方法,区别于Lambda表达式需要在传递的时候进行定义,方法引用必须是对象已经存在的实现好的方法,从而进一步简化函数式编程的代码。语法:类名::静态方法名对象名::实例方法名示例:Listnames=Arrays.asList("zhangsan","lisi","wangwu");//使用::方法引用的方式将方法作为参数传入另一个方法names.forEach(System.out::println);函数式接口:同Lambda表达式一样,方法引用同样只能用于函数式接口(只有一个抽象方法的

java - 我可以用这个引用作为 Java 中的参数更改一个方法中的引用吗?

privatestaticvoidchangeString(Strings){s=newString("newstring");}publicstaticvoidmain(String[]args){Strings=newString("oldstring");changeString(s);System.out.println(s);//expect"newstring"}如何将s作为方法changeString的唯一参数输出“新字符串”?谢谢。 最佳答案 在Java中参数是按值传递的,对象参数传递对象的引用,这意味着您可以更改参

Java, Linux : how to detect whether two java. io.Files引用同一个物理文件

我正在寻找一种有效的方法来检测两个java.io.File是否引用同一个物理文件。根据文档,File.equals()应该完成这项工作:Teststhisabstractpathnameforequalitywiththegivenobject.Returnstrueifandonlyiftheargumentisnotnullandisanabstractpathnamethatdenotesthesamefileordirectoryasthisabstractpathname.但是,给定一个挂载在/media/truecrypt1的FAT32分区(实际上是一个TrueCrypt容

java - ArrayList 实际存储什么 - 对对象或实际对象的引用?

假设我的代码是这样的:ArrayListlist=newArrayList();Students=newStudent();//creatingobjectofStudentclassmyList.add(s);//Hereamconfused.../*myListcontainsjustthereferencevariabletotheStudentobject,ORmyListcontainstheactualStudentobject(memoryallocationforname,rollNoetc)??*/简而言之,当使用add()将对象添加到ArrayList时:Array

Java 8 流,为什么要编译第 2 部分……或者什么是方法引用,真的吗?

好的,这个“系列”中的第一个问题是thisone.现在,这是另一种情况:Arrays.asList("hello","world").stream().forEach(System.out::println);这会编译并工作...好的,在最后一个问题中,使用了类中的静态方法。但现在不同了:System.out是static领域System,是的;它也是一个PrintStream,和一个PrintStream有一个println()恰好与Consumer的签名匹配的方法在这种情况下,aConsumeriswhatforEach()expects.所以我尝试了这个...publicfina