从书中看了一下Java中静态方法的使用以及使用注意事项,总结下来的注意事项义工有两点:
1,静态方法中不能够直接调用非静态变量;
2,非静态方法中可以直接调用静态变量;
至于其他的情况,之前基本的代码中都做了测试,不再赘述了。接下来写一段代码,主要是为了验证前面的第一点:
public classStaticMethod
{
int my_num = 123;
public static void main(String[] args)
{
StaticMethod obj = newStaticMethod();
obj.MyStaticFunc();
}
static void MyStaticFunc()
{
System.out.println("staticfunction!");
System.out.println("my num:" + my_num);
}
}public classStaticMethod
{
int my_num = 123;
public static void main(String[] args)
{
StaticMethod obj = newStaticMethod();
obj.MyStaticFunc();
}
static void MyStaticFunc()
{
System.out.println("staticfunction!");
System.out.println("my num:" + my_num);
}
}
编译运行结果;
E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>javac StaticMethod.java
StaticMethod.java:14:错误: 无法从静态上下文中引用非静态 变量 my_num
System.out.println("mynum: " + my_num);
^
1 个错误
从上面的错误提示中可以看到比较直接的结论,从静态方法(上下文)中引用非静态变量!修改代码如下:
public classStaticMethod
{
static int my_num = 123;
public static void main(String[] args)
{
StaticMethod obj = newStaticMethod();
obj.MyStaticFunc();
}
static void MyStaticFunc()
{
System.out.println("staticfunction!");
System.out.println("my num:" + my_num);
}
}
代码编译运行结果:
E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>javac StaticMethod.java
E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>java StaticMethod
static function!
my num: 123
从上面的结果中可以看出,静态方法(上下文)调用静态变量是没有问题的。至于其他的验证,暂时应该是没有必要了,先前在学习其他的基础时在主函数中都写过类似的功能。简单只测试一下前面的第2点,修改代码如下:
public classStaticMethod
{
static int my_num = 123;
int my_normal_num = 456;
public static void main(String[] args)
{
StaticMethod obj = newStaticMethod();
obj.MyStaticFunc();
obj.TestFunc();
}
static void MyStaticFunc()
{
System.out.println("staticfunction!");
System.out.println("my num:" + my_num);
}
void TestFunc()
{
System.out.println("normalfunction!");
System.out.println("my staticnum: " + my_num);
System.out.println("my normalnum: " + my_normal_num);
}
}
代码的编译运行结果:
E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>javac StaticMethod.java
E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>java StaticMethod
static function!
my num: 123
normal function!
my static num: 123
my normal num: 456
由上面的结果可以看出,非静态方法中对各种变量的调用都是自由的。