有关static静态修饰符的学习心得

  初学java,面对着这个static修饰符,愣是琢磨了两天时间,还在今天琢磨透了,现在将悟到的东西记录下来:

  1、static修饰符表示静态修饰符,其所修饰的内容(变量、方法、代码块暂时学到这三种)统称为静态内容(静态变量、静态方法、静态代码块)

  2、静态内容是与类相关的内容。解释:静态变量在类加载时就会被分配内存空间,而且只会被分配一次,也就是说静态变量对类内部是共享的,大家都可以去调用访问它,只要在一个调用里改变了它的值,那么所有调用内部的值全部都会被改变。静态方法也是在类加载时就分配了入口地址,而且所有的方法都可以调用它(在不创建对象的前提下)。静态代码块会在类加载时执行一次,且仅仅执行一次。

  3、这里针对静态内容,介绍一下非静态内容,作为对比。非静态变量必须在创建对象之后,才会在内存中分配空间,此时才能被调用,非静态方法会在创建对象之后才能利用对象点取调用(即以“对象名.方法()”调用),非静态代码块则在每次创建对象时执行一次,而且是优先执行。这些非静态内容都是与对象相关的内容,都需要在拥有对象之后才能使用,这是与静态内容最基本的区别。

  4、现在说说具体的调用细则:所有的静态方法或变量可以被本类或异类中的静态或非静态方法以“类名.变量名”和“类名.方法名()”的格式调用,甚至在本类中调用时,可以省略掉“类名.”,而直接调用,而且坚守【一处改变,处处改变】的原则。

  5、所有的非静态变量或方法都可以被本类或异类中的静态或非静态方法以“先创建类的实例对象后,用‘对象名.变量名’和‘对象名。方法名()’”的格式调用,甚至在本类中的非静态方法中可以省略对象实例化过程而直接调用(警告:此处的直接调用与省略调用所调用的变量或方法是不同的,他们在内存中存放在不同的位置,新建对象的内容在对象区域,而直接调用的话是直接对类的属性本值进行操作)

  下面是试验代码,(可以直接复制到你的编辑器中试运行):(代码中部分注释为测试内容,可去掉注释查看是否正确)

 1 /**
 2  * 不区分本类还是异类,在静态成员被调用必须以类名点取调用,非静态成员必须创建累的实例去调用
 3  * 区别:
 4  * 1、静态成员的调用:
 5  *   在本类(静态与非静态方法)中调用可以省略类名点,直接调用(此处无论是哪里的调用只要改变了属性的值,那么所有的调用都会改变,因为他们都指向内存中的同一个地址)
 6  * 2、非静态成员的调用:
 7  *   在本类的非静态方法中调用可以省略实例对象的创建,直接调用(这样写不会报错,但是与创建对象再用对象命点用所指向的内容不同了,因为他们指向内存中的不同地址)
 8  */
 9 package com.test;
10
11 public class StaticTest{
12     int a = 1;
13     static int b = 2;
14     //非静态方法
15     void testa(){
16         System.out.println("一类中的非静态方法");
17         //试验同一类中非静态方法调用静态与非静态变量(方法的调用与变量一样)
18
19         //调用本类静态变量(此处省略了类名点取)
20         StaticTest.b = 12;
21         System.out.println(b);//省略类名点取
22
23         //调用本类非静态变量
24         //此处可以以创建实例对象的方式调用a变量,但是这样的话这里的a就与直接调用a不同了,前者指的是新建对象的属性a,后者则是类的a属性
25 //        StaticTest m = new StaticTest();
26 //        m.a = 11;
27 //        a = m.a;
28         a = 11;
29         System.out.println(a);
30
31         //调用异类静态变量(此处直接调用会报错)
32 //        b2 = 14;//报错
33         Qita.b2 = 14;
34         System.out.println(Qita.b2);
35
36         //调用异类非静态变量(此处直接调用会报错)
37 //        a2 = 13;//报错
38         Qita x = new Qita();
39         x.a2 = 13;
40         System.out.println(x.a2);
41     }
42     static void testb(){
43         System.out.println("一类中的静态方法");
44         //试验同一类中非静态方法调用静态与非静态变量(方法的调用与变量一样)
45
46         //调用本类静态变量
47         StaticTest.b = 22;
48         System.out.println(b);//此处省略类名点
49
50         //调用本类非静态变量
51         StaticTest y = new StaticTest();
52         y.a = 21;
53         System.out.println(y.a);
54
55         //调用异类静态变量
56         Qita.b2 = 24;
57         System.out.println(Qita.b2);
58
59         //调用异类非静态变量
60         Qita x = new Qita();
61         x.a2 = 23;
62         System.out.println(x.a2);
63     }
64     public static void main(String[] args) {
65     //静态方法调用本类中的非静态方法
66     StaticTest z = new StaticTest();
67     z.testa();
68
69     //静态方法中调用本类中静态方法
70     testb();
71     }
72 }
73 class Qita{
74     int a2 = 3;
75     static int b2 = 4;
76     void testa2(){
77         System.out.println("二类中的非静态方法");
78     }
79     static void testb2(){
80         System.out.println("二类中的静态方法");
81     }
82 }
时间: 2024-10-22 23:24:34

有关static静态修饰符的学习心得的相关文章

【总结】C++与C#中的static静态修饰符

重点 静态类(sealed+abstract) 静态构造函数(无参,无限制符,自动执行一次) 静态变量(类级别,实例无关,静态存储区中) 静态方法(不能被重写) 静态局部变量(始终存在) 静态本质是实例无关的,表示不会修改实例的 C++ 静态成员变量 静态成员 的内存只被分配一次,会一直存在于程序的整个生命周期中. 如果要将静态成员在类内初始化,那么该变量需要声明为const常量. int class :: c = 10;      static数据成员可以在类外定义和初始化,也可以在函数中赋值

Static.final修饰符、super关键字及常量与变量

一.Static static 静态修饰符,用来修饰类的属性或方法 如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,称为静态属性. static属性可以使用对象调用,也可以直接用类名调用,静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个. static块和static的属性以及方法的性质是相同的,用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块. 静态块只有在类加载的时候被

静态修饰符

静态修饰符(static) Static 静态修饰符      1.修饰成员变量     2.修饰方法 1.用来修饰成员变量:一个成员变量被static修饰叫静态成员变量,如果没有被修饰叫非静成员变量. 访问方式:(1)用对象进行访问:    对象名.变量名 (2)可以通过类名来访问:  类名.变量名 需要注意的点: (1)不要认为所有的变量都用static修饰,只有数据真正需要共享时才需要static修饰 (2)只有静态变量才能用类名访问,非静态变量只能用对象访问 (3)局部变量不允许被sta

静态修饰符static,类中的常量定义修饰符

static可以用来区分成员变量.方法是属于类本身还是属于类实例化后的对象.有static修饰的成员属于类本身,没有static修饰的成员属于类的实例. 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失static是一个修饰符,用于修饰成员(成员变量和成员函数)静态成员随着类的加载而加载.静态成员优先于对象存在.静态成员被所有对象所共享静态成员多了一个中调用方式,可以被类名直接调用.静态的优缺点优点: 静态成员多了一种调用方式.可以直接被类名调用 格式 :类名.静态成员.也

java静态修饰符static的使用

class Person { private String name; private int age; /* * 假设每个Person对象的国籍都一样, * 那么每次调用都要赋值就会不合理. * 使用static修饰,国籍优先确立, * 每个对象建立时,都默认赋予了该国籍. */ static String country = "China"; Person (String name,int age) { this.name = name; this.age = age; } pub

static可选修饰符

首先说一下访问修饰符.类.方法都是封装之一. static修饰的属性: static修饰的属性属于静态属性. 归属性没有存放在对象上是单独存放在数据段的静态区. 全类共享一个对象属性或类名.属性用static. 常量属性可以直接携程public static final. 变量属性要分析出一定符合全类共享一个值得时候才能设计static. static修饰方法: static修饰方法属于静方法. 该方法与对象无关,与类有关. 静态方法里不能重写this,因为可能是使用类名调用,此时没有当前对象.

java静态修饰符的作用

在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在.这样做有什么意义呢? 在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制),例如: 未声明为static cla

java final .static修饰符

static静态修饰符(使用static修饰符修饰的成员变量.常量.和成员方法成为静态变量.常量和方法,他们统称为静态成员,归整个类所有,不依赖于类的特定实例,被类的所有实例共享,只要这个类被加载,JVM就可以根据类名在运行时数据区的方法区找到他们) 静态变量 对于静态变量,运行时,JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配.在类的内部,可以在任何方法内直接访问静态变量:在其他类中,可以通过类名访问该类中的静态变量. 静态变量可以被类的所有实例共享,因此静态变量可以作

static、final、包、访问修饰符、内部类

代码块的加载顺序 静态代码块>成员代码块>构造方法(1,加载类2,创建对象3,调用方法)static静态修饰符 可以修饰成员变量 成员方法 static特点 被static修饰的成员 属于类 不单属于某个对象 是所有对象所共享 静态的访问特点 类名直接访问 类名.属性名 类名.方法名(参数) static的注意事项 静态的内容随着类的加载而加载 优先于对象存在 静态的内容只能访问静态的内容 不能使用this/super final最终修饰符 类 :被final修饰的类不能被继承 成员方法: 被