簡體   English   中英

新聲明前面的Java關鍵字

[英]Java keyword in front of new declaration

我正在嘗試學習一些Java。

當我運行以下代碼時,它可以工作:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

/**
 *
 * @author me
 */
public class Test {

    int myAge;

    public getAge( ){
        system.out.println(myAge);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Test Tester = new Test();
        Tester.myAge = 5;

        System.out.println(Tester.myAge);
    }

}

如您所見,我的主要功能中有一個Test Tester。 當我這樣刪除它時:

Tester = new Test();

它不起作用了。 為什么要在此功能之前添加測試。 記住,我對Java編程(這是我的第一個程序)仍然很陌生,所以要保持柔和。

您需要告訴編譯器什么是Tester 類型

您可能會認為編譯器可以解決此問題,因為您正在創建Test() ,但事實並非如此。 這是因為Tester可以有很多東西; 通常是Test()實現的接口基類

例如,您也可能編寫了java.lang.Object Tester = new Test()

Test tester = new Test()可以像這樣分解:

  1. Test用名稱聲明對象類型為Test的變量。
  2. tester
  3. =將此創建的引用分配給右側評估的內容
  4. new在類型的堆上創建一個新對象...
  5. Test()一個空構造函數,初始化由new創建的實例

在Java中創建新對象時,需要4個關鍵字。 對象的Type(Class),變量名稱= new構造函數call () 除非您事先做了這樣的聲明: Test Tester; 您不能簡單地輸入Tester = new Test()

這是有關如何在Java中創建對象的出色教程

TesterTest類的引用變量,除非您以Java建議的方式指定,否則編譯器無法知道

ClassName referenceVariablName=new ClassName(); //You can also pass arguments

Java的工作方式

TypeName var_name = new TypeConstructor();

在這里,TypeName是您的類名。 但是,您可以分為兩個部分:

TypeName var_name; // IN the beginning


var_name = new TypeConstructor(); // Or using some other method that returns an object of TypeName

但是,您需要確保正確實例化或分配了它。 如果沒有TypeName,Java將無法像您所做的那樣解析new TypeConstructor()語法。

要記住的一件事是TypeNameTypeConstructor必須與var_name具有相同的類型。 您不能喜歡以下內容

String var_name;  // I declared var_name of type String
var_name = new Tester(); // I instantiate var_name to have defaults of type Tester - fails

這里的“實例化”和“聲明”是關鍵-您只需保留“未實例化”變量var_name ,Java就不會尖叫。 請參閱IDEONE上的示例 這就像您與雇主簽署的工作合同(適用條款)。 簽名后(聲明Test為Tester類型),您不能簡單地返回並說“我將進行Tester類型的Test”(即Test = new Tester())。 您正在違反合同的條款,除非您安排新合同。

Java不是像Ruby或JavaScript這樣的動態鍵入語言。 它是靜態輸入語言。 因此,對於編譯器,您需要為所有變量定義類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM