『壹』 java static关键字的问题
1、首先提个别编码规范问题,类名首字母要大写,所以student要写成Student
2、main()要写成main(String args[])
3、static修饰的是类级别的属性,不是对象级别的,所以在构造方法中使用sum++是可以实现自增加的,不过你在Homework09的main方法中new Student没有调用对应的构造方法(你这里是默认的无参构造函数),而是使用了带参数的构造方法,而带参数的构造方法中没有sum++. 所以做法为:将sum++放到 public Student(String name)这个构造函数中
修改你的代码如下:
文件名Student.java
class Student
{
private String name;
private static int sum = 0;
public Student()
{
sum++;
System.out.println(sum);
}
public Student(String name)
{
sum++;
System.out.println(sum);
this.name = name;
System.out.println(name + "是第" + sum + "个学生");
}
}
文件名:Homework09.java
public class Homework09
{
public static void main(String args[])
{
Student s1 = new Student("zhansan");
Student s2 = new Student("lisi");
Student s3 = new Student("wangsu");
}
}
『贰』 import static java.lang.System.out; 为什么要加上static关键字
import static 是静态导入,抄是jdk1.5的新特征,可以不同过袭调用包名,直接使用包里的静态方法。
举个例子来说:
用import的情况:
public static void main(String args[]){
System.out.println("输出内容");
}
用import static 的情况:
import static java.lang.System.out;
public static void main(String args[]){
out.println("输出内容");
}
两者的输出情况是一样的。
『叁』 java中利用反射为变量赋值的时候,为什么变量需要声明为static的
因为静态只能接收静态,反射获得的值是静态的。
例如:
public class Test{
public static void main(String[] args) {
aaa();
int n = num;
}
int num =100;
public void aaa(){}
}
aaa()和num会被强制转为static类型;回
可以这样:
public static void main(String[] args) {
Test test = newTest();//实例化答
test .aaa();
int n = test .num;
}