类:
1、是静态方法和静态属性的集合
2、是用来构造对象的模板
1、
public class Teacher {
//把类用于实例化对象的模板---都不被static修饰
//一直和Teacher对象有关
public String name;//某个老师(对象)的名字
public int age;//某个老师(对象)的年龄
//构造方法用于构造某个老师(对象)
public Teacher(String name,int age){
this.name=name;
this.age=age;
}
//某个老师(对象)的自我介绍
public void introduce(){
System.out.printf("我是%s,我今年%d岁\n",name,age);
}
//把类用于静态属性和静态方法的集合---都被static修饰
public static int countOfTeacher=0;
//超脱于一个个老师(对象)之上,和Teacher无关
//和Teacher无关
public static String buildTeacher(String name){//新增
countOfTeacher++;
return name;
}
//和Teacher无关
public static int getCountOfTeacher(){//统计
return countOfTeacher;
}
}
2、
ublic class TeacherTest {
public static void main(String[] args) {
//针对Teacher作为对象模板的用法
Teacher a=new Teacher("李老师1",40);
a.introduce();//通过指向Teacher对象的引用去调用
//针对Teacher用于静态的集合
//使用类名调用,和对象无关
int b=Teacher.countOfTeacher;
System.out.println(b);//0
System.out.println(Teacher.buildTeacher("李老师2"));
System.out.println(Teacher.countOfTeacher);//1
System.out.println(Teacher.getCountOfTeacher());//1
System.out.println(Teacher.buildTeacher("李老师3"));
System.out.println(Teacher.countOfTeacher);//2
System.out.println(Teacher.getCountOfTeacher());//2
}
}
运行结果:
3、
在静态上下文(静态方法)中,不能使用非静态的属性和非静态的方法。—因为后者需要通过this访问,而前者没有this。
在普通上下文(普通方法)中,可以使用静态属性和静态方法。—因为后者需要通过类名访问
试一下:
import java.lang.reflect.Method;
public class StaticAccessDemo {
public static int a=0;
public int b=0;
public static void staticMethod(){}
public void Method(){}
public static void staticContext(){
staticMethod();//可以使用静态方法
System.out.println(a);//可以使用静态属性
//不能使用非静态
//Method();编译错误
//System.out.println(b);
}
public void normalContext(){
staticMethod();//可以使用静态方法和属性
System.out.println(a);
Method();//也可以使用非静态方法和属性
System.out.println(b);
}
public static void main(String[] args) {
}
}
“在静态上下文(静态方法)中,不能使用非静态的属性和非静态的方法。—因为后者需要通过this访问,而前者没有this。”—可构造指向对象的引用(this)来解决
import java.lang.reflect.Method;
public class StaticAccessDemo {
public static int a=0;
public int b=0;
public static void staticMethod(){}
public void Method(){}
public static void staticContext(){
staticMethod();//可以使用静态方法
System.out.println(a);//可以使用静态属性
//不能使用非静态
//Method();编译错误
//System.out.println(b);
//构造对象
StaticAccessDemo c=new StaticAccessDemo();
System.out.println(c.b);
c.Method();
}
public void normalContext(){
staticMethod();//可以使用静态方法和属性
System.out.println(a);
Method();//也可以使用非静态方法和属性
System.out.println(b);
}
public static void main(String[] args) {
}
}