[英]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()
可以像這樣分解:
Test
用名稱聲明對象類型為Test
的變量。 tester
=
將此創建的引用分配給右側評估的內容 new
在類型的堆上創建一個新對象... Test()
一個空構造函數,初始化由new
創建的實例 在Java中創建新對象時,需要4個關鍵字。 對象的Type(Class),變量名稱= new
構造函數call ()
。 除非您事先做了這樣的聲明: Test Tester;
您不能簡單地輸入Tester = new Test()
。
這是有關如何在Java中創建對象的出色教程。
Tester
是Test
類的引用變量,除非您以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()
語法。
要記住的一件事是TypeName
和TypeConstructor
必須與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.