Java4Android自学记录(11):static关键字

1 目录及资源索引

  Java4Android自学过程目录及资源索引

2 静态成员变量

2.1 普通成员变量

  普通成员变量,生成的对象是不同的,在内存中也是不同的存在,见如下示例代码:

Person p1 = new Person();	// 生成 对象p1
p1.i = 10;

Person p2 = new Person();	// 生成 对象p2
p2.i = 20;

  则上述两个变量 i 在内存中的位置应该是不同的,参考老师课件图片应该如下所示:
在这里插入图片描述

2.2 静态成员变量

  而对于静态成员变量来说,是可以直接通过 类名.变量名方式赋值,不需要创建对象;可以但不是必须要这样做。
  静态成员变量,使用的 i 是同一个。不论有多少个成员变量,使用的都是同一个变量。代码示例如下:

Person p1 = new Person();
Person p2 = new Person();

Person.i = 10;

  在内存中的值如下,可以看到所有的静态变量使用的值,都是同一份。
在这里插入图片描述

2.3 代码测试

  通过一段代码来进行测试,首先声明一个 Person 类,内容如下:

class Person
{
	static int i;	// 静态成员变量
}

  另外写一个类,用来写出主函数,具体代码如下:

class Test
{
	public static void main(String args[])
	{
		Person p1 = new Person();
		Person p2 = new Person();
		
		Person.i = 10;				// 静态成员变量可以直接这样赋值
		System.out.println("p1的i的值为" + p1.i);
		System.out.println("p2的i的值为" + p2.i);

		p1.i = 20;				// 静态成员变量可以直接这样赋值
		System.out.println("p1的i的值为" + p1.i);
		System.out.println("p2的i的值为" + p2.i);		
	}
}

  实际测试可以看到,两个 i 的值是一样的,且其中有一个修改了此静态变量的值,也会对另外一个造成影响。
在这里插入图片描述
  静态成员变量,不是属于某一个对象的,而是属于这个类的。

3 静态函数

  静态函数:在函数前,加上一个 static 。

  静态变量可以用类名调用,静态函数也可以用类名来调用。

  静态函数中,不能直接使用非静态的成员变量。
  代码示例如下:

扫描二维码关注公众号,回复: 9187364 查看本文章
class Person
{
	String name;
	
	static void talk()
	{
		System.out.println("My name is " + name);
	}
}

  由上述代码可以看到,变量不是静态成员变量,编译结果如下:
在这里插入图片描述
  为什么这样做不可以呢?老师用了反证法,假设是可以的,里边应该是 this.name,如果可以,这个this 是怎么解释的?直接使用类名调用此函数,没有所谓的对象,所以此处 this 就没办法指向对应的对象。

  对静态函数做个小结:

  1. 前边需要加上 static
  2. 可以直接使用类名调用;
  3. 在静态函数中,不能使用非静态的成员变量。

4 静态代码块

  先写上一段测试代码如下:

class Person
{
	static{
		System.out.println("静态代码块");
	}
	
	static String name;
	
	static void talk(){
		System.out.println("My name is " + name);
	}
}

  参考老师程序代码,可以直接编译执行 Person 类,但是我在编译的时候报错了,如下:
在这里插入图片描述
  就又添加了一个 Test 类,写了一个主函数,里边只是调用 Person 类,其他什么都不做,代码如下:

class Test
{
	public static void main(String args[])
	{
		Person p1 = new Person();	
	}
}

  然后再次编译,运行结果如下:
在这里插入图片描述
  可以看到静态代码块里边的内容,自己打印出来了。
  静态代码块在什么时候执行,在 装载这个类的 时候就执行了。
  静态代码块的主要作用:为一些静态变量赋初始值。

  本节课老师总结内容如下:

  1. 静态成员变量 只有一份;
  2. 在静态函数中,不能使用 this,所以在静态函数中不能直接只用非静态变量。
  3. 静态代码块的主要作用是为静态成员变量赋初始值。

5 总结

  1. 结合原来所学知识,了解了静态成员变量,及与普通成员变量的区别;
  2. 了解到静态成员变量的内存数据,以及简单的使用方法;
  3. 了解到静态函数,且静态函数内部不能使用非静态的成员变量;
  4. 了解到静态代码块,及其作用;
  5. 继续努力学习呀~~~加油!
发布了88 篇原创文章 · 获赞 84 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Fighting_Boom/article/details/104283403
今日推荐