我正在尝试学习一些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();
它不再起作用了。为什么我应该在此功能之前添加Test。 请记住,我在Java编程中仍然是非常棒的(这是我的第一个程序)所以请保持温和。
答案 0 :(得分:7)
您需要告诉编译器 type Tester
是什么。
您可能认为编译器可以解决这个问题,因为您正在创建Test()
,但它不能。这是因为Tester
可以是很多东西;通常是Test()
实现的接口或基类。
E.g。你也可以写java.lang.Object Tester = new Test()
。
答案 1 :(得分:4)
Test tester = new Test()
可以像这样细分:
Test
声明一个名为.... {/ li>的对象类型Test
的变量
tester
=
将此创建的引用分配给右侧评估的内容new
在类型为... Test()
一个空构造函数,初始化由new
答案 2 :(得分:1)
在java中创建新对象时,您需要4个关键字。对象的Type(Class),变量名= new
构造函数调用()
。除非你之前做过如下声明:Test Tester;
,否则你不能只输入Tester = new Test()
。
答案 3 :(得分:1)
以下是关于How to Create Objects in Java
的优秀教程 Tester
是类Test
的引用变量,编译器无法知道您是否以Java Suggest
ClassName referenceVariablName=new ClassName(); //You can also pass arguments
答案 4 :(得分:1)
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
"实例化"和"声明"这里是关键 - 你可以简单地留下一个" Uninstantiated"变量var_name
和Java不会尖叫。请参阅IDEONE上的示例。这就像你与雇主签订的工作合同(t& c apply)。一旦你签名(宣布测试为Tester
类型),你就不能简单地回过头来说"我将制作"测试"类型Tester" (即Test = new Tester())。除非你安排新的合同,否则你违反了合同的标准。
答案 5 :(得分:0)
Java不是像Ruby或JavaScript那样的动态类型语言。它是静态输入语言。因此,对于编译器,您需要为所有变量定义类型。