新声明前面的Java关键字

时间:2015-03-17 14:51:58

标签: java

我正在尝试学习一些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编程中仍然是非常棒的(这是我的第一个程序)所以请保持温和。

6 个答案:

答案 0 :(得分:7)

您需要告诉编译器 type Tester是什么。

您可能认为编译器可以解决这个问题,因为您正在创建Test(),但它不能。这是因为Tester可以是很多东西;通常是Test()实现的接口基类

E.g。你也可以写java.lang.Object Tester = new Test()

答案 1 :(得分:4)

Test tester = new Test()可以像这样细分:

  1. Test声明一个名为.... {/ li>的对象类型Test的变量
  2. tester
  3. =将此创建的引用分配给右侧评估的内容
  4. new在类型为...
  5. 的堆上创建一个新对象
  6. Test()一个空构造函数,初始化由new
  7. 创建的实例

答案 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()语法。

要记住的一件重要事情是,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

"实例化"和"声明"这里是关键 - 你可以简单地留下一个" Uninstantiated"变量var_name和Java不会尖叫。请参阅IDEONE上的示例。这就像你与雇主签订的工作合同(t& c apply)。一旦你签名(宣布测试为Tester类型),你就不能简单地回过头来说"我将制作"测试"类型Tester" (即Test = new Tester())。除非你安排新的合同,否则你违反了合同的标准。

答案 5 :(得分:0)

Java不是像Ruby或JavaScript那样的动态类型语言。它是静态输入语言。因此,对于编译器,您需要为所有变量定义类型。