人一定要认识到自己的愚蠢,自己才能摆脱愚蠢;认为自己很聪明的人,往往蠢得无以复加。

上面一句话援引自罗翔老师,同样的,人只有在认识到自己的不足之后,自己才能够有所补足,才会有所成。

另外,一个能力不足的人假如有一天突然侥幸成功,也会因为能力不足而驾驭不了自己的成功,反倒是因为成功让自己陷入危机之中。

对于一个靠技术吃饭的人来说,能力才是至关重要的,

对于一个靠熬出来的人来说,苟着才是必须的。

面向对象之Static

说到Static这个关键字,不得不说非常的熟悉了,首先说一下Static关键字使用场景吧。

  • 当一个变量需要被所有对象所共享的时候
  • 当有累加器的使用场景的时候,比如说统计一个类一共被实例化了多少次的时候
  • Static修饰方法的时候,可以通过类名.方法名直接调用方法,也可以使用对象名.方法名来调用
    • 好处是,可以跳过new对象直接调用方法,减少了对内存的消耗。

总而言之:Static可以修饰变量,方法,代码块。

类变量使用场景-Static

这里类①和类②是两个分开的文件,以后一套代码虽然是不同的文件,但是也会写到一个代码块里面嗷,注意区分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 类① 定义学生类
package com.xlkh.demo01;
/*
电梯:共享的
姓名:独享的
当使用共享的变量的时候可以考虑使用static关键字编程
*/
public class Student {
// 定义类变量,全局共享,随着类的加载而加载到内存,且只存在一份
static String elevator;
String name;
}

// 类② 定义学生类的测试类
package com.xlkh.demo02;

public class TestUser {
public static void main(String[] args) {
// 创建对象
User usr1 = new User();

User usr2 = new User();
// 这里类变量是私有private的话只能通过get方法获取类变量的值
// 如果是public的话则就是通过User.count()直接获取了
System.out.println(User.getCount());

}
}

对象计数器场景-Static

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 类① 用户类
package com.xlkh.demo02;
/*
static的应用场景二:统计创建了多少个对象的时候可以使用,一定要是类变量,不能是成员变量
*/
public class User {
// 创建一个类:成员变量,成员方法,构造方法
// 定义私有类变量
private static int count;

public User() {
User.count ++;
}

public static int getCount() {
return count;
}
}

// 类② 用户类的测试类
package com.xlkh.demo02;

public class TestUser {
public static void main(String[] args) {
// 创建对象
User usr1 = new User();

User usr2 = new User();
// 这里类变量是私有private的话只能通过get方法获取类变量的值
// 如果是public的话则就是通过User.count()直接获取了
System.out.println(User.getCount());

}
}

细节

  • 自己类在访问自己的类变量的时候(类名.变量名) 这个时候的类名可写可不写
    • 但是在跨类访问类变量的时候类名则必须写。