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

------<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学习型技术博客、期待与您交流!------------

时间: 2024-07-28 16:22:06

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

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员——java基础——多线程

 黑马程序员--java基础--多线程 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量.

黑马程序员——java基础——反射

 黑马程序员--java基础--反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射 其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员. 反射就是把Java类中的各种成分映射成相应的java类. 简单说:反射技术可以对一个类进行解剖. 反射的基石-->Class类 1.java中的类是用来描述一类事物的共性,该类事物有什么属性,没有什么属性

黑马程序员——java基础——内部类

 黑马程序员--java基础--内部类 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 内部类 如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内部类,必须要建立内部类的对象. 内部类的访问规则 1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有

黑马程序员——Java基础篇之对象归要

1.static关键字 1.1.static可以修饰成员变量,成员方法,还有类(其中这里的类是内部类) 1.2.static修饰的部分会随着类的加载而加载: 加载过程:当JVM执行static修饰的代码时,会在内存的共享区给static部分开辟一个空间,供该类持有,static部分不是某个对象的部分,而是该类共有的,所以当一个函数会被多个对象调用时,最好定义成static,这样比较节省空间. 1.3.静态方法只能访问静态成员 原因:如果静态方法中调用了非静态的变量,那么由于静态方法是随着类的加载

黑马程序员——Java基础知识之多线程协同

多线程协同 线程间的通讯:对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤,但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必须用在

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.