在类中,用static
声明的成员变量
为静态成员变量,或者叫做:类属性,类变量。
静态属性的访问形式:
- 对象名.属性
- 类名.属性
- 它为该类的公用变量,类属性,被该类的所有实例共享,在类被载入时被显式初始化
public class StaticDemo {
String name = "zhangsan";
static int age = 30;
public static void main(String[] args) {
StaticDemo staticDemo = new StaticDemo();
//使用对象进行调用
System.out.println(staticDemo.name);
System.out.println(staticDemo.age);
//使用类名进行调用
// System.out.println(StaticDemo.name);//name无法引用,因为name为非静态变量
// System.out.println(StaticDemo.age);//age可以引用,age为静态变量
StaticDemo.age = 80;
System.out.println(StaticDemo.age); //结果为80
System.out.println(staticDemo.age);//结果为80
staticDemo.age = 70;
System.out.println(staticDemo.age); //结果为70
System.out.println(StaticDemo.age);//结果为70
}
}
public class StaticDemo {
String name = "zhangsan";
static int age = 30;
public static void main(String[] args) {
StaticDemo staticDemo = new StaticDemo();
//使用对象进行调用
System.out.println(staticDemo.name);
System.out.println(staticDemo.age);
//使用类名进行调用
System.out.println(StaticDemo.name);//name无法引用,因为name为非静态变量
System.out.println(StaticDemo.age);//age可以引用,age为静态变量
}
}
- 对于该类的所有对象来说,
static
成员变量只有一份,被该类的所有对象共享 - 可以使用“对象.类属性”来调用。一般都是用“类名.类属性”
static
变量置于方法区中的静态区,成员变量在堆中- 静态变量不能定义在静态方法中
用static
声明的方法为静态方法
访问修饰符 static 返回值类型 方法名(){
}
访问形式:
- 对象名.方法名();
- 类名.方法名();
- 不需要对象,就可以调用(类名.方法名)
- 在调用该方法时,不会将对象的引用传递给它,所以在
static
方法中不可访问非static的成员 - 静态方法不能以任何方式引用
this
和super
关键字 - 静态方法可以在非静态方法中调用
public class StaticDemo2 {
String name = "zhangsan";
static int age = 30;
//静态方法
public static void test(){
System.out.println("静态方法");
}
//普通方法
public void test2(){
test(); //静态方法可以在非静态方法中调用
}
public static void main(String[] args) {
StaticDemo2 staticDemo2 = new StaticDemo2();
staticDemo2.test();
StaticDemo2.test();
staticDemo2.test2();
}
}
- 静态方法中不能直接调用非静态方法,如果想调用,要使用
new
方法,但是不能直接new。
如下代码:不能使用这种方式:
public class StaticDemo2 {
String name = "zhangsan";
static int age = 30;
//静态方法
public static void test(){
System.out.println("静态方法");
new StaticDemo2().test2();//使用new方法,错误 错误
}
//普通方法
public void test2(){
test(); //静态方法可以在非静态方法中调用
}
public static void main(String[] args) {
StaticDemo2 staticDemo2 = new StaticDemo2();
staticDemo2.test();
StaticDemo2.test();
staticDemo2.test2();
}
}
static
可以修饰方法和成员变量
思考:
什么时候需要我们定义static方法?
答:一般工具类中的方法定义为static
正文完