黑马程序员技术交流社区

标题: static关键字 [打印本页]

作者: 曾翰翰    时间: 2012-11-1 21:50
标题: static关键字
package day01;
public class Employee {
public Employee(String n,int i){
  String name = n;
  int id = i;
}
private static int  id;
public static void setId(){
  id++;
}
public static void main(String args[]){
Employees[] ee =new Employees[3];
ee[0] = new Employees("张三",1000);
ee[1] = new Employees("李四",2000);
ee[2] = new Employees("王五",1800);
for(int i = 0;i<ee.length;i++){
  setId();
  System.out.println("名字" + ee[i].getName() +" ID=" + ee[i].getId());
}
}
}
运行结果是
名字张三 ID=null
名字李四 ID=null
名字王五 ID=null
怎么不是
名字张三 ID=1801
名字李四 ID=1802
名字王五 ID=1803



作者: 崔洪全    时间: 2012-11-1 22:08
setId()方法中的id虽然可以做到自增的效果,但是这个id却始终没有被赋值。
ee[0] = new Employees("张三",1000);
ee[1] = new Employees("李四",2000);
ee[2] = new Employees("王五",1800);
这三条赋值语句中所赋值的引用是一个临时变量id;
对构造方法进行如下修改即可
public Employee(String n,int i){
  this.name = n;
  this.id = i;
}
作者: 焦晨光    时间: 2012-11-1 22:19
楼主的源代码很乱 而且有很多错误 怎么会有输出结果
错误一:Employees[] ee =new Employees[3]; Employees没有定义应改为Employee
错误二:ee[0] = new Employees("张三",1000); 错误同上 另外Employee类的初始化方法错误,传的参数无效
错误三: ee[i].getName()   getName()方法并没有定义,此处更不能用来调用获取那么的值
错误四:ee[i].getId() 此处的getId()亦没有定义
作者: 曾翰翰    时间: 2012-11-1 22:25
额。。部分代码是copy过来的。。。5555.。。果然坑啊、、ctrl+c  ctrl+v果然害死人啊。。之前那个方法重载那个里面有。但是类名忘了改了。。
作者: 崔洪全    时间: 2012-11-1 22:27
至于其中的错误我也看到了,既然你有输出结果,我想应该是少粘贴了一部分代码。这个可以理解,所以我就针对我所看到的问题做出了解答
作者: 曾翰翰    时间: 2012-11-1 22:49
我定义了getName()方法后   System.out.println("名字" + ee[i].getName() +" ID=" + ee[i].getId());
括号里就整个报错了。。
package day01;

public class Employee {
       
       
        private String name;
        public Employee(String n,int i){
                String name = n;
                int id = i;
        }
        private static int  id;
        public static void setId(){
                id++;
        }
        public static void main(String args[]){
        Employee[] ee =new Employee[3];
        ee[0] = new Employee("张三",1000);
        ee[1] = new Employee("李四",2000);
        ee[2] = new Employee("王五",1800);
        for(int i = 0;i<ee.length;i++){
                setId();
                System.out.println("名字" + ee[i].getName() +" ID=" + ee[i].setId());
        }
        }
       
        public String getName() {
                return getName();
        }
        public void setName(String name) {
                this.name = name;
        }
        }
╮(╯▽╰)╭。。凌乱了
作者: 林志进    时间: 2012-11-1 22:51
完整代码,运行试下吧
class Employees {
        private String name;

        public String getName() {
                return name;
        }
        private static int id; // static修饰的变量是共享的数据,默认初始为0;
        public Employees(String n, int i) {//每调用一次构函,相当于id重新赋值一次
                name = n;
                id = i;
        }
        public int getId() {return id;}
        public static void setId() {id++;}
        public static void main(String args[]) {
                Employees[] ee = new Employees[3];
                ee[0] = new Employees("张三", 1000);// 第一次赋值后共享数据变成1000
                ee[1] = new Employees("李四", 2000);// 第二次赋值后共享数据变成2000
                ee[2] = new Employees("王五", 1800);// 第三次赋值后共享数据变成1800
                for (int i = 0; i < ee.length; i++) {
                        setId(); //       循环三次,id进行了三次自增,打印结果 为1801 1802 1803
                        System.out.println("名字" + ee[i].getName() + " ID=" + ee[i].getId());}
        }
}
作者: 曾翰翰    时间: 2012-11-1 22:54
焦晨光 发表于 2012-11-1 22:19
楼主的源代码很乱 而且有很多错误 怎么会有输出结果
错误一:Employees[] ee =new Employees[3]; Employees ...

又出新问题了。。帮忙看下。。╮(╯▽╰)╭。。菜鸟伤不起啊。
作者: 梁胜海    时间: 2012-11-1 23:40
我的天,这代码写的逆天了
作者: 梁胜海    时间: 2012-11-1 23:54
哥给你写好了,你的代码缺好多啊,而且好多逻辑错五,你写的时候有没有认真思考啊?
package com.lsh.error;

public class Employee {

        private String name;

        private static int id;

        public Employee(String name, int id) {
                this.name = name;
                this.id = id;
        }

        public static void setId() {
                id++;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }
        public int getId(){
                return id;
        }

        public static void main(String args[]) {
                Employee[] ee = new Employee[3];
                ee[0] = new Employee("张三", 1000);
                ee[1] = new Employee("李四", 2000);
                ee[2] = new Employee("王五", 1800);
                for (int i = 0; i < ee.length; i++) {
                        setId();
                        System.out.println("名字" + ee[i].getName() + " ID=" + ee[i].getId());
                }
        }
}
作者: 曾翰翰    时间: 2012-11-2 17:13
哈哈、、终于看到技术分了。。感动。。加油   动力十足啊
作者: 曾翰翰    时间: 2012-11-2 17:29
林志进 发表于 2012-11-1 22:51
完整代码,运行试下吧
class Employees {
        private String name;

嗯 我试了  可以运行  我还需要多看看分析分析啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2