由“无法从静态上下文中引用非静态方法”引出的疑问
来源:互联网 发布:淘宝评价回复语大全 编辑:程序博客网 时间:2024/05/18 10:42
因为我们知道静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给各错误.
简单说来,静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用.因此想在静态方法中引用非静态方法是不可能的,因为它究竟引用的是哪个对象的非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错.
在Java核心技术 第四章,中EmployeeTest.java中,程序报错,无法从静态上下文中引用非静态方法。
import java.util.*;/***This program tests the Emploee class.*@Vertion 1.11 2004.02.19*@author Cay Horstmann**/class Employee { private String name; private double salary; private Date hireDay; public Employee(String n,double s,int year,int month,int day) { name = n; salary = s; GregorianCalendar calendar = new GregorianCalendar(year,month-1,day); //GregorianCalendar uses 0 for January hireDay = calendar.getTime(); } public String getName() { return name; } public double getSalary() { return salary; } public Date getHireDay() { return hireDay; } public void raiseSalary(double byPercent) { double raise = salary * byPercent/100; salary += raise; } }public class EmployeeTest{ public static void main(String[] args) { //fill the staff array with three Employee objects Employee[] staff = new Employee[3]; staff[0] = new Employee("Carl Cracker",75000,1987,12,15); staff[1] = new Employee("Harry Hacker",50000,1989,10,1); staff[2] = new Employee("Tony Tester",40000,1990,3,15); //raise everyone's salary by 5% for (Employee e: staff) { e.raiseSalary(5); } // print out information about all Employee objects for (Employee e : staff) { System.out.println("name="+e.getName()+",salary="+e.getSalary()+",hireDay="+e.getHireDay()); } }}
范例程序中,EmployeeTest类在前边,报错,把Employee类写在前边,不再报错。
0 0
- 由“无法从静态上下文中引用非静态方法”引出的疑问
- 无法从静态上下文中引用非静态方法
- 无法从静态上下文中引用非静态方法
- 静态方法:无法在静态上下文中引用非静态
- 静态方法:无法在静态上下文中引用非静态
- 无法从静态上下文中引用非静态变量,非静态方法
- “无法从静态上下文中引用非静态”
- 无法从静态上下文中引用非静态变量
- 无法从静态上下文中引用非静态 变量 this
- 无法从静态上下文中引用非静态 变量 this
- “无法从静态上下文中引用非静态方法”这个问题怎么解决
- Java静态方法:无法从静态上下文中引入非静态方法
- JAVA学习【2】错误:无法从静态上下文中引用非静态
- 错误: 无法从静态上下文中引用非静态 变量 this
- java编译时出现无法从静态上下文中引用非静态
- JAVA学习【2】错误:无法从静态上下文中引用非静态(转载)
- 初学java:“错误:无法从静态上下文中引用非静态”(在调用类中的类时出现的错误)
- 静态方法引用非静态方法的小手段
- java利用classloader实现热部署
- leetcode——268——Missing Number
- 计算质数(极速版)
- Memcached学习笔记
- 标准C++中string的使用++
- 由“无法从静态上下文中引用非静态方法”引出的疑问
- ZOJ 3946 Highway Project(最短路)
- SpringData 学习(7)—— 学习 Repository 接口的第 2 个子接口 PagingAndSortingRepository
- Java之Volatile关键字使用
- DP - 传纸条
- POJ 3164 最小树形图
- Android在代码中打开切换wif失败:WifiStateMachine: Not authorized to update network
- Android下am和pm命令简介
- 数据库连接池