初学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 }

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

  1. Javase部分回顾(static (静态修饰符),修饰方法,单利的设计模式, 封装)

    static (静态修饰符)        1.修饰成员变量        静态变量的访问方式:            方式一 : 通过对象访问.                对象.变量名      ...

  2. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  3. JAVA中静态修饰符static的学习(初学)

    静态修饰符static,用于修饰类中的成员变量和成员函数. 用static修饰的成员变量也可叫做类变量. 什么时候使用静态 什么时候定义静态成员变量?     当对象中出现共享数据时,将该数据定义为静 ...

  4. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

  5. C# static readonly 修饰符初始化变量

    同事问了一个问题,readonly和static啥区别? 我就写了个demo运行了下: /*** * 验证初始化次数:static只初始化一次,无论多少用户访问,在内存中只有一份 * readonly ...

  6. java静态修饰符static的使用

    class Person { private String name; private int age; /* * 假设每个Person对象的国籍都一样, * 那么每次调用都要赋值就会不合理. * 使 ...

  7. String的实例化与static final修饰符

    String两种实例化方式 一种是通过双引号直接赋值的方式,另外一种是使用标准的new调用构造方法完成实例化.如下: String str = "abcd"; String str ...

  8. private static final 修饰符

    java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...

  9. 静态修饰符(关键字static)

    1.Static修饰的方法或变量通常称为类方法和类属性 2.静态方法中不能使用this和super关键字,也不能做为局部变量使用 3.在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成 ...

随机推荐

  1. iDSDT搞定显卡和声卡 黑苹果不纠结

    原帖:http://www.lovelucy.info/idsdt-mac-video-audio-drive.html 之前写过PC机上装Mac OS X系统,准备工作中最纠结的就是驱动了.在网络上 ...

  2. 04day1

    无穷的数列 找规律 [问题描述] 有一个无穷序列如下: 110100100010000100000- 请你找出这个无穷序列中指定位置上的数字. [输入] 第一行一个正整数 N,表示询问次数:接下来的 ...

  3. MySQL基础之第11章 插入、更新与删除数据

    11.1.插入数据 11.1.1.为表的所有字段插入数据 1.INSERT语句中不指定具体的字段名         insert into 表名 values (值1,值2…值n)2.INSERT语句 ...

  4. Android-取消GridView/ListView item被点击时的效果

    方法一,在控件被初始化的时候设置 gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); listView.setSelector(ne ...

  5. [Everyday Mathematics]20150129

    计算下列积分 $$\bex \int_a^b (x-a)^2(b-x)^3\rd x. \eex$$

  6. LAMP网站架构分析

    转自:http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包 ...

  7. 【LeetCode 231】Power of Two

    Given an integer, write a function to determine if it is a power of two. 思路: 如果一个数是2的Power,那么该数的二进制串 ...

  8. 【和我一起学python吧】Python 启航

    话说万张高楼平地起,不会走之前先学会爬吧.尤其对于我等的小菜同学来说更是这样,不管怎么先code first吧,等我等小菜们翅膀硬了才test first吧. 1, 怎么运行python? 先到pyt ...

  9. git 记录

    在官网有详细的教程http://git-scm.com/book/zh/%E8%B5%B7%E6%AD%A5 查看分支和日志的两个工具:gitk 和 tig ,两个都有 --all 参数,可以查看所有 ...

  10. JAVA——利用wait和notify实现生产者和消费者

    经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: package demo; import j ...