深圳有什么好的企业网站,安卓app十大开发框架,wordpress还是hexo,fusionaccess免费服务器初学java#xff0c;面对着这个static修饰符#xff0c;愣是琢磨了两天时间#xff0c;还在今天琢磨透了#xff0c;现在将悟到的东西记录下来#xff1a;1、static修饰符表示静态修饰符#xff0c;其所修饰的内容#xff08;变量、方法、代码块暂时学到这三种#xff…初学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 } 转载于:https://www.cnblogs.com/V1haoge/p/5450170.html