例一:
public class mystatic1 {
// static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问
static String hobby="imooc";
public static void main(String[] args) {
System.out.println("通过类名访问静态变量:"+mystatic1.hobby);
//创建类对象
mystatic1 my=new mystatic1();
System.out.println("通过对象访问静态变量:"+my.hobby);
//在创建一个对象
mystatic1 my2=new mystatic1();
//通过对象2修改静态成员
my2.hobby="imooc2";
//再次用my输出静态变量,从而证明所有的类对象共享静态成员。
System.out.println("通过第一个对象输出第二个对象修改后内容:"+my.hobby);
}
}
//静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收
例二:
//与静态变量一样,也可以使用 static 修饰方法,称为静态方法或类方法。
public class mystatic2 {
//实用static关键字声明静态方法
public static void print(){
System.out.println("谢谢访问!");
}
public static void main(String[] args) {
//直接通过类名调用静态方法
mystatic2.print();
//也可以通过对象名调用,推荐实用类名
mystatic2 my=new mystatic2();
my.print();
}
}
例三:
public class mystatic3 {
String name="路飞";
static String hobby="海贼王";
// 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员
public static void print(){
//System.out.println("谢谢访问:"+name); //提示错误不能对非静态成员访问
System.out.println("爱好:"+hobby+"!");
}
//在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
public void show(){
System.out.println("谢谢访问:"+name+"!");
System.out.println("爱好:"+hobby+"!");
}
// 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
public static void main(String[] args) {
System.out.println("调用静态方法:");
mystatic3.print();
System.out.println("调用普通成员方法");
new mystatic3().show();
}
}
例四:
/*在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。
需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
*/
public class mystatic4 {
int num1;
int num2;
static int num3;
public mystatic4(){
num1=91;
System.out.println("通过构造方法给num1赋值");
}
{//初始化块
num2=74;
System.out.println("通过初始化块为变量num2赋值");
}
static {//静态初始化块
num3=83;
System.out.println("通过静态初始化块为静态变量num3赋值");
}
public static void main(String[] args) {
mystatic4 my=new mystatic4();
System.out.println("num1:"+my.num1);
System.out.println("num2:"+my.num2);
System.out.println("num3:"+num3);
//再次创建对象
mystatic4 my2=new mystatic4();
}
}