最近在面试,对于试题简单回顾下原理。呵呵。
Java基础知识中,会提到静态方法 不能直接调用非静态变量 和 非静态方法。
原理:静态变量 和 方法 是在编译的时候随着随着类产生的,而非静态变量 和 方法是要使用 new 关键字在实例化类的时候才生成的。
public class Test {
private int x=0;
private static int y=0;
private void printStr(){
private static int z=0; //错误XXXXXXXXXXXXX 静态变量不能在方法中声明
System.out.println("Function printStr");
Person p = new Person(){
public void printNames(){
System.out.println("In the printStr");
}
};
p.printNames();
}
private static void printStrs(){
System.out.println("Ststic Good");
}
public static void main(String[]args){
short s1=1;
// s1=s1+1; /is error the type is different
s1+=1;
System.out.println(s1);
//error /printStr(); 原因:非静态方法 需要实例化 才能使用
Test t=new Test();
t.printStr();
//can use static method 原因:静态方法和类一起在编译时加载,所以可以使用
printStrs();
//可以访问私有变量
ProxyTest proxyTest = new ProxyTest();
proxyTest.x = 12;
proxyTest.y = 25; //OK Use the static var
char x=20;//可以等于一个编码的整型
int s=(int)1.0f; //类型强制转换
float f=1.0; //错误XXXXXXXXXXXXX
float f=1.0f; //正确
}