我是Java的新手,虽然我已经在其他程序语言中编程了25年。所以,我正在尝试自学Java。试图写一些由两个文件组成的愚蠢程序:一个名为“Customer”的类,一个名为“Silly4”的主程序。
我假装为银行类型的公司实施信用卡系统(尽管我的大多数经验都是在国防合同中)。我认为这对我来说是一个很好的教学例子。
尝试建立一个名为“客户”的信用卡数据结构,以便(暂时)它可以容纳1000个客户。在主程序“Silly4”中,我将此Customer类实例化为“cust2”,然后从那里尝试使用“cust2”。我尝试检索客户编号5(j = 5)的信用卡余额。到现在为止还挺好。
然后从那里我尝试在类Customer中声明另一个方法(供将来使用),我任意称之为“bal44”,然后我尝试在主程序Silly4中引用它作为“ball44(5541);”。
所以我编译类Customer,然后编译程序Silly4,我得到一个编译错误“java:52:error:找不到符号”,用于在主程序“Silly4”中引用方法“bal44(5541)” 。我糊涂了。我已经声明并成功编译了那个带有“bal44”的Customer类,但是Java告诉我它无法找到它。我很困惑。
请原谅所有无关的println,我用它们来看看程序是如何移动的。
// Data Structure for credit card database
public class Customer {
private String name;
private int accountNo;
private double balance;
private boolean Overdue;
// Getters, setters, constructor...
public void setName( String new_name )
{ name = new_name; }
public void setAccount( int new_account )
{ accountNo = new_account; }
public void setBalance( double new_bal )
{ System.out.println( " Start proc setBalance ");
balance = new_bal;
System.out.println( " Finish proc setBalance ");
}
public double getBalance()
{ System.out.println( " Start proc getBalance ");
System.out.println( " proc getBalance , balance= " + balance + " end print");
return balance;
// how to specify which element of array[1000] ? balance I want ?
// System.out.println( " Finish proc getBalance ");
}
// Add new customer to credit card system
// (note - index in array Customer[i] is worry of main program
//
public void addCustomer( String name2, int account2, double bal2 )
{ name = name2;
accountNo = account2;
balance = bal2;
}
public void bal44 ( int account3 )
{ accountNo = account3; }
// Constructor
Customer ()
{ name = "John Smith";
accountNo = 1005;
balance = 125.43;
Overdue = false; }
// see page 1032 Liang for definition complex Object and get-Procs for it
}
这是主程序/类Silly4:
类Silly4
{ //信用卡数据库程序
public static void main(String[] args)
{
double bal2, bal3;
int i; // loop counter
int j;
bal2 = 151.47;
bal3 = 5.0; // just initialize
// And then you can create an array of it:
System.out.println("** Program Silly4 Running **");
Customer[] cust2 = new Customer[1000];
System.out.println("** Array cust2 instantiated **");
for(i=0; i<=999; ++i)
{
cust2[i] = new Customer();
}
System.out.println("** Array2 cust2 Obj initialized **");
// try to code this eventually - cust2.balance = 151.47 ;
//
j = 5; // customer no. 5
cust2[j].setBalance( bal2 );
bal3 = cust2[j].getBalance() ;
System.out.println("** Balance Customer " + j + " is " + bal3);
// Add a new customer
// comment out - addCustomer( "Steve Jones", 5541, 1.0 );
bal44( 5541 ); // test out declaring new method "bal44"
System.out.println("** End of Silly4 **");
}
}
答案 0 :(得分:0)
致电时
bal44( 5541 );
没有任何对象,Java将其视为&#34;这个&#34;对象并在Silly4中搜索该方法而不是在Customer类中。从Silly4调用该方法,就像您正在调用其他客户类方法一样。 e.g。
cust2[j]. bal44( 5541 ); or something like that.
了解更多关于&#34;这个&#34;这里https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
P.S。这里要注意的一点是,静态方法与主方法一样,没有这个引用可供他们使用。所以,从技术上来说,它是在Silly4而不是实例方法中搜索类级(静态)方法。 :)
答案 1 :(得分:0)
你基本上在查询的第一句话中回答了自己。 Java不是纯粹的程序性语言,它是一种面向对象的语言。
这意味着当您声明方法时,它们不仅仅是范围函数。在类中声明的方法与在C中的include
d文件中声明的函数不相似。它只能从对象的范围内调用。 封闭类。换句话说,您没有名为bal44
的函数。您有一个类bal44
的方法 Customer
,这意味着您需要让类Customer
的对象为您执行它,类似于您致电setBalance()
。
this
(当前对象)执行方法的快捷方式,从技术上讲,method(args)
是this.method(args)
的捷径。因此,只要您处于单个类的范围内,类的方法就会像传统函数一样运行。
答案 2 :(得分:0)
请注意,问题在于:您正在使用bal44(5541)
,但是您使该方法非静态,这意味着您需要创建类的对象(Customer),然后再举例说
Customer customer = new Customer()
customer.bal(5541);
如果你想在不创建类的对象的情况下调用该方法,只需输入关键字&#34; static&#34;在方法的标题中。 public static void bal44(int num)
进一步说明:由于您来自程序语言,因此回想起主要区别在于对象的使用。对象具有多个特征或属性,以及动作或行为。例如汽车,它的属性是它的颜色,速度等,它的主要动作/行为是驱动。属性是变量,而行为/动作是方法。例如
car.drive();
car.setColor("red");
我希望有帮助吗?如果你不明白你可以PM我或在这里回复,我会进一步解释