标签:技术 内存 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()时,由于它只有一份,而这个类中却有多个对象,不能确定究竟要调用哪个对象的,所以不能访问。所以我们平时都是通过某一个具体的对象来调用某一个方法。而解决上述问题的方法其实已经在代码中有所体现,就是把对象通过一个参数传递过去。
标签:技术 内存 person mic font 非静态变量 说明 show stat
原文地址:https://www.cnblogs.com/EvanTheGreat/p/14336958.html