我是靠谱客的博主 大胆花生,这篇文章主要介绍Java static关键字(超详细!)1.static2.变量的分类:3.什么时候变量声明为实例的,什么时候声明为静态的?4.重点5.关于方法来说,什么时候定义为实例方法?什么时候定义为静态方法?,现在分享给大家,希望可以做个参考。

1.static

  1. static翻译为“静态”
  2. 所有static关键字修饰的都是类相关的类级别的。
  3. 所有static修饰的,都是采用“类名.”的方式访问。
  4. static修饰的变量静态变量
  5. static修饰的方法静态方法

2.变量的分类:

变量根据声明的位置进行划分:

  1. 方法体中声明的变量叫做:局部变量
  2. 方法体外声明的变量叫做:成员变量

其中成员变量又可以分为:

  1. 实例变量
  2. 静态变量

eg1.

以下实例的,都是对象相关的,访问时采用 “引用.” 的方式访问。需要先new对象。

实例相关的,必须先有对象,才能访问,可能会出现空指针异常。

复制代码
1
2
3
4
5
6
7
8
9
10
class Test{ // 成员变量中的实例变量 int i; // 实例方法 public void m2(){ // 局部变量 int x = 200; } }

eg2.

以下静态的,都是类相关的,访问时采用 “类名.” 的方式访问。不需要new对象。

不需要对象的参与即可访问没有空指针异常的发生。

复制代码
1
2
3
4
5
6
7
8
9
10
class Test{ // 成员变量中的静态变量 static int k; // 静态方法 public static void m1(){ // 局部变量 int m = 100; } }

3.什么时候变量声明为实例的,什么时候声明为静态的?

如果这个类型的所有对象的某个属性值都是一样的,不建议定义为实例变量,浪费内存空间。
建议定义为类级别特征,定义为静态变量,在方法区中只保留一份,节省内存开销。

  • 一个对象一份的是实例变量。
  • 所有对象一份的是静态变量。

eg.

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Chinese{ // 身份证号 // 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。 String idCard; // 姓名 // 姓名也是一个人一个姓名,姓名也应该是实例变量。 String name; // 国籍 String country; // 无参数 public Chinese(){ } // 有参数 public Chinese(String s1,String s2, String s3){ idCard = s1; name = s2; country = s3; } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Chinese{ // 身份证号 // 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。 String idCard; // 姓名 // 姓名也是一个人一个姓名,姓名也应该是实例变量。 String name; // 国籍 // 重点重点五颗星:加static的变量叫做静态变量 static String country = "中国"; // 无参数 public Chinese(){ } // 有参数 public Chinese(String s1,String s2){ idCard = s1; name = s2; } }

注意:

  1. 静态变量在类加载时初始化,不需要new对象,静态变量的空间就开出来了。
  2. 静态变量存储在方法区

4.重点

eg.

复制代码
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
public class StaticTest03{ public static void main(String[] args){ // 通过"类名."的方式访问静态变量 System.out.println(Chinese.country); // 创建对象 Chinese c1 = new Chinese("1111111", "张三"); System.out.println(c1.idCard); // 1111111 System.out.println(c1.name); // 张三 System.out.println(c1.country); // 中国 // c1是空引用 c1 = null; // 分析这里会不会出现空指针异常? // 不会出现空指针异常。 // 因为静态变量不需要对象的存在。 // 实际上以下的代码在运行的时候,还是:System.out.println(Chinese.country); System.out.println(c1.country); // 这个会出现空指针异常,因为name是实例变量。 //System.out.println(c1.name); } } class Chinese{ // 实例变量 String idCard; String name; // 静态变量 static String country = "中国"; //构造方法 public Chinese(String x, String y){ idCard = x; name = y; } }

实例的:一定需要使用“引用.”来访问。

复制代码
1
2
3
4
5
Chinese c1 = new Chinese("1111111", "张三"); System.out.println(c1.idCard); // 1111111 System.out.println(c1.name); // 张三 System.out.println(c1.country); // 中国

静态的

建议使用“类名.”来访问,但使用“引用.”也行(不建议使用"引用.")。

静态的如果使用“引用.”来访问会让程序员产生困惑:程序员以为是实例的呢。

复制代码
1
2
3
4
// 通过"类名."的方式访问静态变量 System.out.println(Chinese.country); System.out.println(c1.country)//这样也行

注意:

复制代码
1
2
3
c1 = null; System.out.println(c1.country);

这里不会出现空指针异常。因为静态变量不需要对象的存在。
实际上以下的代码在运行的时候,还是:

复制代码
1
2
System.out.println(Chinese.country);

结论:

空指针异常只有在只有在“空引用”访问“实例”相关的,都会出现空指针异常。

5.关于方法来说,什么时候定义为实例方法?什么时候定义为静态方法?

1.思想角度:

如果说该行为必须由对象去触发。那么该方法定义为实例方法。

2.代码角度

当这个方法体当中,直接访问了实例变量,这个方法一定是实例方法。

我们以后开发中,大部分情况下,如果是工具类的话,工具类当中的方法
一般都是静态的。(静态方法有一个优点,是不需要new对象,直接采用类名
调用,极其方便。工具类就是为了方便,所以工具类中的方法一般都是static的。)

最后

以上就是大胆花生最近收集整理的关于Java static关键字(超详细!)1.static2.变量的分类:3.什么时候变量声明为实例的,什么时候声明为静态的?4.重点5.关于方法来说,什么时候定义为实例方法?什么时候定义为静态方法?的全部内容,更多相关Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(123)

评论列表共有 0 条评论

立即
投稿
返回
顶部