标签:
1 /**
2 * 不区分本类还是异类,在静态成员被调用必须以类名点取调用,非静态成员必须创建累的实例去调用
3 * 区别:
4 * 1、静态成员的调用:
5 * 在本类(静态与非静态方法)中调用可以省略类名点,直接调用(此处无论是哪里的调用只要改变了属性的值,那么所有的调用都会改变,因为他们都指向内存中的同一个地址)
6 * 2、非静态成员的调用:
7 * 在本类的非静态方法中调用可以省略实例对象的创建,直接调用(这样写不会报错,但是与创建对象再用对象命点用所指向的内容不同了,因为他们指向内存中的不同地址)
8 */
9 package com.test;
10
11 public class StaticTest{
12 int a = 1;
13 static int b = 2;
14 //非静态方法
15 void testa(){
16 System.out.println("一类中的非静态方法");
17 //试验同一类中非静态方法调用静态与非静态变量(方法的调用与变量一样)
18
19 //调用本类静态变量(此处省略了类名点取)
20 StaticTest.b = 12;
21 System.out.println(b);//省略类名点取
22
23 //调用本类非静态变量
24 //此处可以以创建实例对象的方式调用a变量,但是这样的话这里的a就与直接调用a不同了,前者指的是新建对象的属性a,后者则是类的a属性
25 // StaticTest m = new StaticTest();
26 // m.a = 11;
27 // a = m.a;
28 a = 11;
29 System.out.println(a);
30
31 //调用异类静态变量(此处直接调用会报错)
32 // b2 = 14;//报错
33 Qita.b2 = 14;
34 System.out.println(Qita.b2);
35
36 //调用异类非静态变量(此处直接调用会报错)
37 // a2 = 13;//报错
38 Qita x = new Qita();
39 x.a2 = 13;
40 System.out.println(x.a2);
41 }
42 static void testb(){
43 System.out.println("一类中的静态方法");
44 //试验同一类中非静态方法调用静态与非静态变量(方法的调用与变量一样)
45
46 //调用本类静态变量
47 StaticTest.b = 22;
48 System.out.println(b);//此处省略类名点
49
50 //调用本类非静态变量
51 StaticTest y = new StaticTest();
52 y.a = 21;
53 System.out.println(y.a);
54
55 //调用异类静态变量
56 Qita.b2 = 24;
57 System.out.println(Qita.b2);
58
59 //调用异类非静态变量
60 Qita x = new Qita();
61 x.a2 = 23;
62 System.out.println(x.a2);
63 }
64 public static void main(String[] args) {
65 //静态方法调用本类中的非静态方法
66 StaticTest z = new StaticTest();
67 z.testa();
68
69 //静态方法中调用本类中静态方法
70 testb();
71 }
72 }
73 class Qita{
74 int a2 = 3;
75 static int b2 = 4;
76 void testa2(){
77 System.out.println("二类中的非静态方法");
78 }
79 static void testb2(){
80 System.out.println("二类中的静态方法");
81 }
82 }
标签:
原文地址:http://www.cnblogs.com/V1haoge/p/5450170.html