码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——Java基础---有关static(静态)的知识

时间:2015-11-29 19:27:54      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!                                                                                             

                                                         面向对象—有关static(静态)的知识 

  可以使用static关键字声明与类而是不与实例相关的变量,方法或代码块。

 

 静态变量:

     在编写一个类的时候,实际上就是在描述其对象的行为和属性,只有通过new关键字,系统才会分配内存空间给对象,对象才能被创建。

     然而有时用户可能不希望不管有无对象,某些特定的数据就只有一份值,即可以被类而不是对象直接访问。

     这样的特定数据即是静态变量。用static修饰的变量叫静态变量,也叫静态成员或叫类的属性。

     

     静态变量有如下注意事项:

           1,类中的静态变量属于类,而不属于某个特定的对象。

           2,类的静态成员可以与类的名称一起使用,而无须创建类的对象。

           3,静态变量或方法也称为类的变量或方法。

           4,不管创建了类的多少实例,整个类中静态变量的副本只有一个。

           5,引用静态变量时建议使用类名来调用。

           6,声明为static的变量实质上就是全局变量

 

 1 class Chinese {
 2 
 3 static String country = "china";
 4 
 5 String name;
 6 
 7 int age;
 8 
 9  
10 
11 void singOurCuntry() {
12 
13 System.out.println("My dear"+country);
14 
15 }
16 
17 }
18 
19  
20 
21 public class TestChinese {
22 
23 public static void main(String[] args) {
24 
25 //通过类名来访问静态变量
26 
27 System.out.println(Chinese.country);
28 
29  
30 
31 Chinese ch1 = new Chinese();
32 
33 //通过对象来访问静态变量,不建议这种做法
34 
35 System.out.println(ch1.country);
36 
37 ch1.singOurCuntry();
38 
39 }
40 
41 }
42 
43     

 

静态方法:

     有时候,用户也希望能创建这样的一些方法,不通过对象既可以调用这些方法,如:main方法。

     像main方法那样被static修饰的方法,叫静态方法。目的是使该方法独立于类的实例,使用类去访问,而不是用类的实例,所以也叫类方法。

 

   静态方法有如下特征:

       1,类的静态方法只能访问其他的静态成员,不能访问非静态的成员。

       2,静态方法中没有this关键字。

       3,静态方法不能被覆盖(重写)为非静态方法。

 

 1 class StaticFun {
 2 
 3   static int i = 10; //静态变量
 4 
 5   int j;
 6 
 7   
 8 
 9   static void setValue(int x){ //静态方法
10 
11   j = x; //编译出错
12 
13   System.out.println(" "+i);
14 
15   }
16 
17 }

 

说明:静态方法除了局部变量,静态属性及其参数外,无法访问其他任何变量。如果试图访问非静态属性时,会导致编译错误。

 

 

静态代码块:

     所谓静态代码块,是由static{}组成的代码片段,

     语法为:

1 static{
2 
3      //静态代码块
4 
5   }

     静态代码块使用时有如下注意事项:

       1,如果需要通过计算机来初始化静态变量,可以声明一个静态块

       2,静态块仅在该类被加载时执行一次。

       3,只能初始化的静态数据成员。

       4,如果类包含多个静态块,则以在类中出现的顺序分别执行。

 

例:通过定义一个静态代码块来随机生成10个数给一个数元素赋值

 1 class TryInitialization {
 2 
 3 static int[] values = new int[10];
 4 
 5 static{ //静态语句块
 6 
 7 for(int i = 0;i<values.length;i++){
 8 
 9 values[i] = (int)(100.0*Math.random());
10 
11 }
12 
13 }
14 
15 }
16 
17  

 

静态语句可以初始化静态变量,而构造方法也是用来初始化成员变量,在创建对象时,谁的优先级高呢?

 1 public class TestStatic {
 2 
 3 static{
 4 
 5 System.out.println("我是语句块输出");
 6 
 7 }
 8 
 9 public TestStatic(){
10 
11 System.out.println("我是构造器");
12 
13 }
14 
15 public static void main(String[] args) {
16 
17 System.out.println("构造器调用前");
18 
19 TestStatic tc = new TestStatic();
20 
21 System.out.println("构造器调用后");
22 
23 }
24 
25 }

  输出结果:

     我是语句块输出

     构造器调用前

     我是构造器

     构造器调用后

 

静态导入:

    如果访问类的静态成员,则必须限定类的引用。

    自java SE5.0以后,java语言提供了静态导入功能,用户可以对静态成员进行无限定访问,而无须使用限定类名。

 

例:要使用Math类中的方法求平方根的值,以前的写法;

 1 import java.lang.Math;
 2 
 3 public class CalDemo {
 4 
 5 public void say(){
 6 
 7 System.out.println("sqrt"+Math.sqrt(5.18));
 8 
 9 }
10 
11

static import的写法:

 

 1 import static java.lang.Math;;
 2 
 3 public class CalDemo {
 4 
 5 public void say(){
 6 
 7 System.out.println("sqrt"+sqrt(5.18));
 8 
 9 }
10 }

不过用户如果在代码中方使用次数较少,则不建议使用新用法。如此例,容易引起误解,以为用户定义了一个sqrt()方法。

 

注意:要有节制的使用静态导入,否则会令程序难以理解和维护,破坏所导入的所有静态成员的命名空间,并破坏程序的可读性

 

                                                               -----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 

黑马程序员——Java基础---有关static(静态)的知识

标签:

原文地址:http://www.cnblogs.com/hmchengxuyuan/p/4983803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!