我试图计算创建的对象数,但它始终返回1。
public class Drivertwo {
public static void main(String[] args) {
Employee newEmp = new Employee();
Employee newEmp2 = new Employee();
Calculate newcal = new Calculate();
Clerk newclerk = new Clerk();
float x;
int y;
newEmp.setEmp_no(2300);
newEmp.setEmp_name("W.Shane");
newEmp.setSalary(30000);
newEmp.counter();
newEmp2.setEmp_no(1300);
newEmp2.setEmp_name("W.Shane");
newEmp2.setSalary(50000);
newEmp2.counter();
newclerk.setEmp_name("Crishane");
newclerk.setEmp_no(1301);
newclerk.setGrade(2);
newclerk.setSalary(45000);
newclerk.counter();
System.out.println("Salary is:" + newcal.cal_salary(newclerk.getSalary(), newclerk.getEmp_no()));
System.out.println("Name is:" + newclerk.getEmp_name());
System.out.println("Employee number is:" + newclerk.getEmp_no());
System.out.println("Employee Grade is:" + newclerk.getGrade());
System.out.println("No of objects:" + newEmp.numb);
这是我的主要方法
public class Employee {
private int salary;
private int emp_no;
private String emp_name;
public int numb=0;
public int getSalary() {
return salary;
}
public int getEmp_no() {
return emp_no;
}
public String getEmp_name() {
return emp_name;
}
public void setSalary(int newSalary) {
salary = newSalary;
}
public void setEmp_no(int newEmp_no) {
emp_no = newEmp_no;
}
public void setEmp_name(String newEmp_name) {
emp_name = newEmp_name;
}
}
public int counter() {
numb++;
return numb;
这是我的员工班级
我尝试在员工类中作为启动器运行计数器,但它始终返回1。我知道我可以在主类中创建一个计数器,每次创建新对象时都可以获取计数器,但是我想自动增加制作对象时以1麻木。
答案 0 :(得分:2)
您需要将numb
设为静态,以使该类的每个实例只有一个副本。实际上,每个Employee
对象都有其自己的numb
副本。
为什么不将其放在构造函数中呢?
public Employee() {
numb++;
}
答案 1 :(得分:1)
numb
是一个实例变量,这意味着每个Employee
对象将具有自己的numb
,将由0
初始化。
如果您希望所有Employee
实例共享相同的numb
,则应将其设置为static
。
答案 2 :(得分:1)
// Java program Find Out the Number of Objects Created
// of a Class
class Test {
static int noOfObjects = 0;
// Instead of performing increment in the constructor instance block is preferred
//make this program generic. Because if you add the increment in the constructor
//it won't work for parameterized constructors
{
noOfObjects += 1;
}
// various types of constructors
public Test()
{
}
public Test(int n)
{
}
public Test(String s)
{
}
public static void main(String args[])
{
Test t1 = new Test();
Test t2 = new Test(5);
Test t3 = new Test("Rahul");
System.out.println(Test.noOfObjects);
}
}
答案 3 :(得分:0)
我试图在我的员工班级中试一试,但始终如此 返回1
它返回1,因为numb
是一个实例变量,这意味着您为Employee
类创建的每个实例/对象都拥有自己的numb
变量副本,该副本最初等于{{1 }}。在新创建的zero
类实例上调用counter
方法时,Employee
变量将递增到numb
并返回。
每次创建1
类的实例时,都会发生相同的过程。
我想在对象为 制成
制作Employee
静态变量将解决此问题,因为然后numb
将是一个类变量,并且在该类的每个实例之间共享类变量。
答案 4 :(得分:0)
进行此修改
numb
像numb
一样public int numb=0;
和numb++;
count()
答案 5 :(得分:0)
由于static
成员仅初始化一次,因此对于每个类的实例都是相同的。
class YourClass {
private static int numb;
public YourClass() {
//...
numb++;
}
public static int counter() {
return numb;
}
}
那么简单;-