大神帮忙看下,为什么会出现这样的错

悲伤的阿木木丿 2018-09-11 06:20:49
这个是没有问题的

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,就会报错
...全文
281 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SwTesting 2018-09-13
  • 打赏
  • 举报
回复
上面那个数组声明加不加Static是没影响的,但是for循环 你建立了Employee e,非Static 的方法,必须先建立对象,才能调用类中的方法, static的类 就可以直接 通过类名.方法名()直接调用。
预见-遇见 2018-09-12
  • 打赏
  • 举报
回复
因为你的Employee写在了EmpioleeTest里面,写成了类部类,你把它挪出来就好了,如果是类部类的话,main方法是静态方法,只能调用静态的东西。所以上面加了static的不会报错
qq_37108946 2018-09-12
  • 打赏
  • 举报
回复
static 是一个静态修饰符,你的main方法被静态修饰符修饰了,而在同一个类加载的过程中,静态是优先于非静态的,也就是说当main方法运行的时候,非静态还没有被加载Employee无法被找到。所以会报错
qq_34483981 2018-09-12
  • 打赏
  • 举报
回复
正确的写法是用的静态内部类的写法,外部类是可以在main方法里面直接调用静态内部类的方法和属性的,就好像是static修饰的方法和属性是可以直接用类名来点一样,而成员内部类,是最常见的一种内部类,他是依附于外部类生成的,不能直接new出来使用,他需要用外部类的对象来调用,你可以先new一个外部类对象,在调用内部类对象。
Surrin1999 2018-09-12
  • 打赏
  • 举报
回复
main方法是静态的 你如果不加static 那么执行main方法时此时对象的实例没被创建 因为main方法是由jvm以静态方式调用的 class Emploee还没被分配内存 你怎么能创建它呢 把class Employee类写到另一个文件里就行了
wildyy 2018-09-11
  • 打赏
  • 举报
回复
main是静态,class不是静态,都是同一个类的成员,静态不能直接访问非静态
码客567 2018-09-11
  • 打赏
  • 举报
回复
https://www.cnblogs.com/dolphin0520/p/3799052.html
码客567 2018-09-11
  • 打赏
  • 举报
回复
这个你要知道static.修饰的代码或者属性的作用

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧