Java中的static关键字

2021-01-29 01:16

阅读:771

标签:技术   内存   person   mic   font   非静态变量   说明   show   stat   

关于Java中的static关键字的说明


 

我们先来看代码:

 1 package com.hw.static0127;
 2 class Person{
 3     public String name;
 4     public int age;
 5     public static String country;
 6     public Person(String name,int age,String country){
 7         this.name = name;
 8         this.age = age;
 9         this.country = country;
10     }
11     public static void show(Person p){
12         System.out.println(p.name+" "+p.age+" "+p.country);
13     }
14 }
15 public class StaticDemo {
16     public static void main(String[] args){
17         Person p1 = new Person("瀚洋",16,"中国");
18         Person p2 = new Person("Sam",18,"The United States");
19         Person.show(p1);
20         Person.show(p2);
21     }
22 }

运行效果如下:

技术图片

 

 为何两个人的国家输出结果都是美国?

我们先来看示意图:

技术图片

 

 

 country是一个静态变量,是存储在静态区里面的,而且它是只保留一份的。换句话说,静态区域是所有对象所共享的,所以通过p1和p2我们访问的是同一块内存区域。而name和age,因为有两个对象,所以是有两份的。第一次我们赋值为中国,那么country就是中国,第二次赋值为美国,那么就变为了美国。所以输出的时候二者都是美国。

此外,静态区域不仅可以通过对象来访问,还可通过类来访问。因为每一个类里面是只保留一份的。习惯上,静态变量我们都是通过类来访问。

注意:静态方法不能访问非静态变量!因为无论静态变量还是静态方法,都只保留一份。我们调用Person.show()时,由于它只有一份,而这个类中却有多个对象,不能确定究竟要调用哪个对象的,所以不能访问。所以我们平时都是通过某一个具体的对象来调用某一个方法。而解决上述问题的方法其实已经在代码中有所体现,就是把对象通过一个参数传递过去。

 

Java中的static关键字

标签:技术   内存   person   mic   font   非静态变量   说明   show   stat   

原文地址:https://www.cnblogs.com/EvanTheGreat/p/14336958.html


评论


亲,登录后才可以留言!