1.6(java学习笔记)static关键字

static关键字

1.static修饰变量也称静态变量,静态变量存放在静态区被改类的所有对象共享。

例如,定义了一个类class User{static Sring city = "a城"},将类中的一个city属性定义为静态变量。我们创建一个对象use1,然后可以通过user1.city = "b城"修改静态区里面User类的信息。User类中city的初始值就发生了改变,变成了b城。我们再新建一个对象use2,打印user2,会发现user2.city变成了b城。

(结合之前讲的内存分析说的,静态区中存放类信息,静态变量等,静态区只有一个,被所有线程共享);

如果没有加static的变量,称为非静态变量,非静态变量只属于对象,每个对象有每个对象的非静态变量。修改非静态变量只会改变单个对象的值,并不会改变类类中的信息。

以下列代码为例:

 1 public class TestStatic {
 2     public static void main(String[] args){
 3         User a1 = new User();
 4         a1.Info();
 5         a1.city = "b城";        //city为静态变量,修改后存放在静态区的User类中city的信息也被修改了。
 6         a1.Info();              //此时类中city的值时“b城”
 7         User a2 = new User();   //新建一个对象,输出city我们会发现输出的b城
 8         a2.Info();              //说明类中的信息已经被修改,而静态变量被所有对象共享。
9 //如果city没有static修饰,那么修改a1.city修改的只是属于a1的非静态变量, 10 } //并不会改变类中的信息,新建a2输出a2还是a城(city非static修饰时)。 11 } 12 13 class User{ 14 static String city = "a城"; //修改后就相当于static String city = “b城”; 15 void Info(){ 16 System.out.println(city); 17 } 18 }
输出结果:
a城 b城 b城

2.static修饰方法,最主要的目的是可以不用创建对象直接通过类来引用方法,也称类方法可通过类名直接调用。

 1 public class TestStatic {
 2     public static void main(String[] args){
 3         User.Info();    //没有创建对象,但可以通过类名直接调用方法。
 4     }
 5 }
 6 
 7 class User{
 8     static String city = "a城";
 9     static void Info(){
10         System.out.println(city);
11     }
12 }
输出结果:
a城

但有一点需要注意,静态方法中不能调用非静态方法、属性,但非静态方法中可以调用静态方法、属性。

1 class User{
2     String name;
3     static String city = "a城";
4     static void Info(){
5         System.out.println(city);
6         name = "123";   //静态方法中调用了非静态变量或方法是不行的,在name前面加上static就可以了。
7     }                   //即静态方法中可以调用静态方法和属性。
8 }
1 class User{
2     static String name;
3     static String city = "a城";
4     void Info(){
5         System.out.println(city);
6         name = "123";   //非静态方法中可以调用静态方法和属性。
7     }
8 }

猜你喜欢

转载自www.cnblogs.com/huang-changfan/p/9317136.html