这个是没有问题的import java.time.LocalDate;public class EmpioleeTest {
    public static void main(String[] ages){
        Employee[] staff = new Employee[3];
        staff[0] = new Employee("张三",7500,1999,1,10);
        staff[1] = new Employee("李四",5500,1989,2,20);
        staff[2] = new Employee("王五",6000,1997,10,9);
      for(Employee e:staff){
            e.raiseSalary(5);
        }
        for(Employee e:staff){
            System.out.println("name="+e.getName()+",salary"+e.getSalary()+",hireDay"+e.getHireDay());
        }
    }    static class Employee{
        private String name;
        private int id;
        private double salary;
        private LocalDate hireDay;        public Employee(String n,double s,int year,int month,int day){
            name = n;
            salary = s;
            hireDay= LocalDate.of(year,month,day);
        }        public String getName() {
            return name;
        }        public double getSalary() {
            return salary;
        }        public LocalDate getHireDay() {
            return hireDay;
        }        public void setName(String name) {
            this.name = name;
        }        public void setSalary(double salary) {
            this.salary = salary;
        }        public void setHireDay(LocalDate hireDay) {
            this.hireDay = hireDay;
        }        public void raiseSalary(double byPercent){
            double raise = salary*byPercent/100;
            salary+=raise;
            }
        }
    }这个是有问题的
import java.time.LocalDate;public class EmpioleeTest {
    public static void main(String[] ages){
        Employee[] staff = new Employee[3];
        staff[0] = new Employee("张三",7500,1999,1,10);
        staff[1] = new Employee("李四",5500,1989,2,20);
        staff[2] = new Employee("王五",6000,1997,10,9);
      for(Employee e:staff){
            e.raiseSalary(5);
        }
        for(Employee e:staff){
            System.out.println("name="+e.getName()+",salary"+e.getSalary()+",hireDay"+e.getHireDay());
        }
    }     class Employee{
        private String name;
        private int id;
        private double salary;
        private LocalDate hireDay;        public Employee(String n,double s,int year,int month,int day){
            name = n;
            salary = s;
            hireDay= LocalDate.of(year,month,day);
        }        public String getName() {
            return name;
        }        public double getSalary() {
            return salary;
        }        public LocalDate getHireDay() {
            return hireDay;
        }        public void setName(String name) {
            this.name = name;
        }        public void setSalary(double salary) {
            this.salary = salary;
        }        public void setHireDay(LocalDate hireDay) {
            this.hireDay = hireDay;
        }        public void raiseSalary(double byPercent){
            double raise = salary*byPercent/100;
            salary+=raise;
            }
        }
    }我想知道,为啥在class Employee 前面少了一个static,就会报错

解决方案 »

  1.   

    这个你要知道static.修饰的代码或者属性的作用
      

  2.   

    https://www.cnblogs.com/dolphin0520/p/3799052.html
      

  3.   

    main是静态,class不是静态,都是同一个类的成员,静态不能直接访问非静态
      

  4.   

    static 是一个静态修饰符,你的main方法被静态修饰符修饰了,而在同一个类加载的过程中,静态是优先于非静态的,也就是说当main方法运行的时候,非静态还没有被加载Employee无法被找到。所以会报错
      

  5.   

    因为你的Employee写在了EmpioleeTest里面,写成了类部类,你把它挪出来就好了,如果是类部类的话,main方法是静态方法,只能调用静态的东西。所以上面加了static的不会报错
      

  6.   

    main方法是静态的 你如果不加static  那么执行main方法时此时对象的实例没被创建 因为main方法是由jvm以静态方式调用的  class Emploee还没被分配内存  你怎么能创建它呢  把class Employee类写到另一个文件里就行了
      

  7.   

    正确的写法是用的静态内部类的写法,外部类是可以在main方法里面直接调用静态内部类的方法和属性的,就好像是static修饰的方法和属性是可以直接用类名来点一样,而成员内部类,是最常见的一种内部类,他是依附于外部类生成的,不能直接new出来使用,他需要用外部类的对象来调用,你可以先new一个外部类对象,在调用内部类对象。
      

  8.   

    上面那个数组声明加不加Static是没影响的,但是for循环 你建立了Employee e,非Static 的方法,必须先建立对象,才能调用类中的方法, static的类 就可以直接 通过类名.方法名()直接调用。