Java static关键字特点

一、特点

1、随着类的加载而加载
2、优先于对象存在
3、被类的所有对象共享
4、可以通过类名调用

二、调用特征

静态方法:
  成员变量:只能访问静态变量
  成员方法:只能访问静态成员方法


非静态方法:
  成员变量:可以访问静态变量,也可以是非静态变量
  成员方法:可以访问静态成员方法,也可以是非静态成员方法

简单记:静态只能访问静态

原因:类优先于对象存在

三、案例分析

 1 package statics;
 2 /**
 3  * static关键字,案例1
 4  * @author zhongfg
 5  * @date 2015-06-16
 6  */
 7 class Person {
 8     
 9     private String name;
10     private int age;
11     public static String country;
12     
13     public Person(String name, int age) {
14         this.name = name;
15         this.age = age;
16     }
17     
18     public Person(String name, int age, String country) {
19         this.name = name;
20         this.age = age;
21         Person.country = country;
22     }
23     
24     public void show() {
25         System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
26     }
27 }
28 public class StaticDemo {
29 
30     public static void main(String[] args) {
31         
32         Person p1 = new Person("凤姐", 30, "中国");
33         p1.show();
34         
35         Person p2 = new Person("范冰冰", 34);
36         p2.show();
37         
38         Person p3 = new Person("Angelababy", 26);
39         p3.show();
40         
41         System.out.println("-----------------");
42         
43         //修改静态变量的值
44         Person.country = "美国";
45         p1.show();
46         p2.show();
47         p3.show();
48     }
49 }
50 
51 运行结果:
52 姓名:凤姐,年龄:30,国籍:中国
53 姓名:范冰冰,年龄:34,国籍:中国
54 姓名:Angelababy,年龄:26,国籍:中国
55 -----------------
56 姓名:凤姐,年龄:30,国籍:美国
57 姓名:范冰冰,年龄:34,国籍:美国
58 姓名:Angelababy,年龄:26,国籍:美国
View Code
 1 package statics;
 2 
 3 class Student {
 4     
 5     int num = 1;
 6     static int num2 = 2;
 7     
 8     public void showA() {
 9         System.out.println(this.num);
10         getNameA();
11         getNameB();
12     }
13     
14     public static void showB() {
15 //        System.out.println(num); 报错,静态方法不能访问非静态方法
16         System.out.println(num2);
17 //        getNameA(); 报错,静态方法不能调用非静态方法
18         getNameB();
19     }
20     
21     public void getNameA() {
22         System.out.println("小明,非静态方法");
23     }
24     
25     public static void getNameB() {
26         System.out.println("小辉,静态方法");
27     }
28 }
29 public class StaticDemo2 {
30     public static void main(String[] args) {
31         
32         Student s = new Student();
33         s.showA();
34         
35         System.out.println("--------------");
36         
37         //静态方法既可以用类名调用,也可以用对象调用,建议用类名调用
38         Student.showB();
39         s.showB();
40     }
41 }
42 
43 运行结果:
44 1
45 小明,非静态方法
46 小辉,静态方法
47 --------------
48 2
49 小辉,静态方法
50 2
51 小辉,静态方法
View Code
原文地址:https://www.cnblogs.com/zfg-technology/p/4581061.html