当前位置: 首页 > 面试题库 >

如何在Java中使用指针?

赵智
2023-03-14
问题内容

我知道Java没有指针,但是我听说可以用指针创建Java程序,而这可由少数Java专家来完成。是真的吗


问题答案:

Java中的所有对象都是引用,你可以像使用指针一样使用它们。

abstract class Animal
{...
}

class Lion extends Animal
{...
}

class Tiger extends Animal
{   
public Tiger() {...}
public void growl(){...}
}

Tiger first = null;
Tiger second = new Tiger();
Tiger third;

取消引用null:

first.growl();  // ERROR, first is null.    
third.growl(); // ERROR, third has not been initialized.

混叠问题:

third = new Tiger();
first = third;

丢失的细胞:

second = third; // Possible ERROR. The old value of second is lost.    

你可以通过首先确保不再需要第二个旧值或为另一个指针分配第二个值来确保此安全。

first = second;
second = third; //OK

请注意,以其他方式给second赋值(NULL,new …)同样可能引起错误,并可能导致丢失其指向的对象。

OutOfMemoryError当你调用new且分配器无法分配所请求的单元格时,Java系统将引发异常()。这是非常罕见的,通常是由于失控的递归导致的。

请注意,从语言的角度来看,将对象放弃到垃圾回收器根本不是错误。这只是程序员需要注意的事情。相同的变量可以在不同的时间指向不同的对象,并且当没有指针引用它们时,旧值将被回收。但是,如果程序的逻辑要求维护对对象的至少一个引用,则将导致错误。

新手经常会犯以下错误。

Tiger tony = new Tiger();
tony = third; // Error, the new object allocated above is reclaimed. 

你可能要说的是:

Tiger tony = null;
tony = third; // OK.

铸造不当:

Lion leo = new Lion();
Tiger tony = (Tiger)leo; // Always illegal and caught by compiler. 

Animal whatever = new Lion(); // Legal.
Tiger tony = (Tiger)whatever; // Illegal, just as in previous example.
Lion leo = (Lion)whatever; // Legal, object whatever really is a Lion.

C中的指针:

void main() {   
    int*    x;  // Allocate the pointers x and y
    int*    y;  // (but not the pointees)

    x = malloc(sizeof(int));    // Allocate an int pointee,
                                // and set x to point to it

    *x = 42;    // Dereference x to store 42 in its pointee

    *y = 13;    // CRASH -- y does not have a pointee yet

    y = x;      // Pointer assignment sets y to point to x's pointee

    *y = 13;    // Dereference y to store 13 in its (shared) pointee
}

Java中的指针:

class IntObj {
    public int value;
}

public class Binky() {
    public static void main(String[] args) {
        IntObj  x;  // Allocate the pointers x and y
        IntObj  y;  // (but not the IntObj pointees)

        x = new IntObj();   // Allocate an IntObj pointee
                            // and set x to point to it

        x.value = 42;   // Dereference x to store 42 in its pointee

        y.value = 13;   // CRASH -- y does not have a pointee yet

        y = x;  // Pointer assignment sets y to point to x's pointee

        y.value = 13;   // Deference y to store 13 in its (shared) pointee
    }
} 


 类似资料:
  • 问题内容: 当前正在检索机器上安装的默认打印机以进行打印。我希望能够选择文档要使用的打印机。最好的方法是什么? 码: 问题答案: 在下面创建类,将其导入,然后在知道打印机名称的情况下尝试调用;如果您不知道可以访问哪些打印机,请调用一个包含所有可行的注册打印机名称的。 也可以查看我对这个SO问题的答案以获取更多详细信息:

  • 问题内容: 如何在Java中使用鼠标指针捕获屏幕图像?我知道可以使用Robot类捕获屏幕,但是它可以捕获没有鼠标指针的屏幕,因此这不是我的解决方案。 问题答案: 这不是直接可能的,但是您可以用来获取指针当前所在的位置的信息。 将屏幕截图作为后,您可以在Java 2D API的帮助下将您自己的光标图像确切地放置在屏幕截图上的该位置。

  • 问题内容: 我想对英语句子加标签,并进行一些处理。我想使用openNLP。我已经安装了 当我执行命令时 它提供输出POSTagging Text.txt中的输入 我希望它安装正确吗? 现在如何从Java应用程序内部进行此POStagging?我已将openNLPtools,jwnl,maxent jar添加到项目中,但是如何调用POStagging? 问题答案: 这是我放在一起的一些(旧)示例代码

  • 问题内容: 我正在尝试使用Java中的HtmlUnit登录网站。首先,我输入用户名,然后输入密码。之后,我需要从下拉框中选择一个选项。输入用户名和密码似乎有效,但是当我尝试从下拉框中选择项目时出现错误。谁能帮我解决这个问题?我的代码如下: 问题答案: 这是HTMLunit的单元测试中的代码。 请注意,他们使用的是getSelectsByName而不是getElementById。 这是这些单元测试

  • 问题内容: 使用Java工具, 我可以使用WSDL生成打SOAP Web服务所需的存根和类。 但是我不知道如何在REST中做同样的事情。如何获得击中REST Web服务所需的Java类。无论如何,要使用该服务的方式是什么? 谁能给我指路? 问题答案: 工作示例,请尝试以下操作:

  • 问题内容: 我是Java的初学者,并且正在使用newboston的Java教程(youtube)。在教程36-37中,他开始使用String.format();。他在过去的教程中没有解释。这是他正在上课的代码: 因此,他正在做的是进行某种军事时间课程,并使用String格式。所以我要问的是,是否有人可以向我解释String.format()的工作方式以及上述格式的工作方式。谢谢您的帮助! 问题答案