小编Eli*_*luf的帖子

Oracle Java教程 - 在回答问题时可能出现错误

我是Java新手,阅读Oracle教程.在每个部分之后,有问题和答案,我不理解一个答案中的句子(见下面的粗体线).

来源是https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/objects-answers.html

我指的是问题2,看到粗体字.据我所知,如果没有对数组的引用,则数组有资格进行垃圾回收.无关紧要,是否存在对此数组所持有的对象的引用,因为内部对象(在数组内)具有自己的引用计数.是对的吗?请解释粗体句.

从oracle教程中引用:https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/objects-answers.html

  1. 问题:以下代码创建一个数组和一个字符串对象.代码执行后,对这些对象有多少引用?对象是否有资格进行垃圾回收?

    String[] students = new String[10];
    String studentName = "Peter Smith";
    students[0] = studentName;
    studentName = null;
    
    Run Code Online (Sandbox Code Playgroud)

    答:有一个对students数组的引用,该数组有一个对字符串Peter Smith的引用.这两个对象都没有资格进行垃圾回收.数组学生没有资格进行垃圾收集,因为它有一个对象studentName的引用,即使该对象已被赋值为null.该对象studentName不符合条件,因为 students[0]仍然引用它.

java

18
推荐指数
2
解决办法
1164
查看次数

Oracle Java教程 - 静态类 - 教程中可能出现的错误

我是Java的新手,从Oracle Java教程学习Java.我现在正在学习嵌套类,静态类和内部类.我发现以下解释似乎很奇怪,我认为这是错误的.

来自:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

嵌套类是其封闭类的成员.非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有.静态嵌套类无权访问封闭类的其他成员

最后一句"静态嵌套类无法访问封闭类的其他成员"很奇怪,但可能引用实例成员,说静态类就像一个静态方法,无法访问实例变量.但下一个注意事项甚至更奇怪:

注意:静态嵌套类与其 外部类(和其他类)的实例成员交互,就像任何其他顶级类一样.实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包.

这看起来很奇怪,因为它意味着静态类无法访问外部类的私有实例成员.我编写了以下编译和运行的代码,并演示了静态类可以访问外部实例私有变量.

public class A {

    private int x;
    static private int y;


    static public class B{

        static void doSomething(){
            y++;
            System.out.println("y is now " + y );
        }

        static void doSomethingElse(A a)
        {
            a.x++;
            System.out.println("a.x is " + a.x );
        }
    }
}

// ------

public class Main {

    public static void main(String[] args){
        A a = new A();
        A.B b = new A.B(); …
Run Code Online (Sandbox Code Playgroud)

java

11
推荐指数
2
解决办法
422
查看次数

需要澄清Oracle教程解释何时使用iterator vs for-each构造

在关于集合的Oracle教程https://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html中, 我看到以下内容:

Use Iterator instead of the for-each construct when you need to:

1. Remove the current element. The for-each construct hides the iterator, so you cannot call remove. Therefore, the for-each construct is not usable for filtering.
2. Iterate over multiple collections in parallel.
Run Code Online (Sandbox Code Playgroud)

我理解第一个选项'删除当前元素',它由迭代器支持,并且不受for-each构造的支持.我需要澄清第二个选项'并行迭代多个集合',这可以用迭代器而不是for-each来完成.有人可以提供这种情况的一个例子吗?据我所知,for-each也可以嵌套,因此可以并行访问多个集合.

这不是Iterator vs For-EachIterator vs的重复, 因为他们询问迭代器和for-each的一般比较,我问oracle教程中的特定句子.

java collections iterator

3
推荐指数
1
解决办法
43
查看次数

标签 统计

java ×3

collections ×1

iterator ×1