2016-01-05 31 views
-1

所以我很新的编程,只是试图在另一个类中实例化一个类,但我不断收到一个错误,说:Cannot Resolve Symbol。有人能告诉我问题出在哪个区域吗?获得类实例化在Java中工作

我的第一节课是这样的:

public class Triangle 
{ 
    public static void main(String[] args) 
    { 
    } 
    public static void Draw (int num) 
    { 
     System.out.print("*"); 
    } 
} 

第二个看起来像这样:提前

public class Lab01 
{ 
    public static void main(String[] args) 
    { 
      Triangle obj2 = new Triangle.Draw(5); 
    } 
} 

感谢

+0

这些类在不同的包中?你需要在'Lab01'中添加'import'语句。 –

+1

显示实际堆栈跟踪.... –

+0

为什么要实例化,因为它是静态方法? – soorapadman

回答

2

是有至少2个问题:

  1. 首先,程序必须只有一个main功能。你的这里有两个。应该删除Triangle类中的main函数。

  2. 的另一个问题是,实际实例化一个类,你需要用new操作调用类的构造函数,但你的Triangle obj2 = new Triangle.Draw(5);线并没有这样做。相反,它会尝试使用static void方法,该方法不会实例化或返回任何内容。

你应该考虑改变你的Triangle如下:

public class Triangle 
{ 
    public Triangle() { 
     System.out.println("Constructing triangle instance"); 
    } 

    public void draw() { 
     System.out.println("Drawing triangle instance"); 
    } 
} 

// using the class 
Triangle t = new Triangle(); 
t.draw(); 

这给你一个公共的默认构造函数,也是一个非静态draw方法应采取绘图,您对特定实例的护理创建。

0

您需要实例您的三角物体

//remove the static modifier if using below 
Triangle obj2 = new Triangle(); 
obj2.draw(5); 


//since your method is static you can just call it from the class also. 
Triangle.draw(5); 

你正在做的是试图将返回值从Triangle.draw()分配给你的Triangle对象。由于绘制是void并且不返回三角形类型,它会引发错误。

Here是一个很好的stackoverflow后,显示了什么时候使用static方法的一个很好的例子。

+0

尝试从实例中访问静态方法是不好的做法,也会产生警告:'应该以静态方式访问Triangle类型的静态方法Draw ' – ray

+0

这就是为什么我提供了两个选项,一个用于删除静态修饰符和instantazing,另一个用于访问静态上下文中的绘制方法 – Ryan