简单了解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 }

转载于:https://www.cnblogs.com/V1haoge/p/5450170.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1910)vue之电商管理系统电商系统之完成用户的修改

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue Vue.use(Router)const router new Router({routes: [{path: /,re…

CodeForces 139C Literature Lesson(模拟)

这个题,读懂了就是水,读不懂就没办法下手,论英语阅读的重要性...只有五种形式,第一种万能型aaaa,是另外3种的特殊情况,第二种克莱里林四行打油诗aabb形式,第三种是交替的abab形式,第四种是封闭的abba形式,第五种就是NO.题目的意思就是给我们四个原串,让我们counting from the e…

Java秒杀系统实战系列~基于Redis的原子操作优化秒杀逻辑

https://blog.csdn.net/u013871100/article/details/99621967

前端学习(1911)vue之电商管理系统电商系统之完成用户的修改弹框询问用户是否删除

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue Vue.use(Router)const router new Router({routes: [{path: /,re…

MybatisPlus提示 Could not set property 'id' of '***' with value

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89390364

超好:web app变革之rem

感谢你的阅读,本文由 腾讯ISUX 版权所有,转载时请注明出处,违者必究,谢谢你的合作。注明出处格式:腾讯ISUX (https://isux.tencent.com/web-app-rem.html) (其他阅读:滑屏 H5 开发实践九问http…

前端学习(1912)vue之电商管理系统电商系统之调用api完成删除操作

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue Vue.use(Router)const router new Router({routes: [{path: /,re…

mybatisPlus中的updateById无法更新null值的字段

https://blog.csdn.net/hui_hong_tailang/article/details/96478980

前端学习(1913)vue之电商管理系统电商系统之创建user分支并把代码推到码云

创建新分支 检查状态 添加代码 本地user分支推送 查看 切换 提交

CLR线程概览(一)

托管 vs. 原生线程 托管代码在“托管线程”上执行,(托管线程)与操作系统提供的原生线程不同。原生线程是在物理机器上执行的原生代码序列;而托管线程则是在CLR虚拟机上执行的虚拟线程。 正如JIT解释器将“虚拟的”中间&#xff08…

goEasy 消息推送

http://www.goeasy.io/cn/demos

css自定义字体

css自定义字体的兼容问题 来源 http://www.w3cplus.com/content/css3-font-face 一、TureTpe(.ttf)格式: .ttf字体是Windows和Mac的最常见的字体,是一种RAW格式,因此他不为网站优化,支持这种字体的浏览器有【IE9,Firefox3.5,Chrome4,Safari3,…

前端学习(1915)vue之电商管理系统电商系统之通过路由展现权限列表

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

DO、DTO、BO、AO、VO、POJO定义

https://blog.csdn.net/qq_40741855/article/details/82979841

前端学习(1916)vue之电商管理系统电商系统之绘制面包屑导航和卡片视图

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

最大和 -- 最大子矩阵

从一维的最大子序列 , 到二维的最大子序列 , 实际上还是转化为一维的去计算 , 通过输入时获得操作 , 和下面的 三个 for 循环 得以 计算最大子序列 / 1 #include<stdio.h>2 #include<string.h>3 #include<math.h>4 #include<iostream>5 #include<al…

swagger2 注解说明 ( @ApiImplicitParams )

https://blog.csdn.net/jiangyu1013/article/details/83107255

前端学习(1917)vue之电商管理系统电商系统之绘制面包屑导航和卡片视图调用api获取数据

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

使用maven引入Apache poi jar包

maven构建的项目-->pom.xml文件 eclipse提供Dependencies直接添加依赖jar包的工具&#xff1a;直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包:poi提供microsoft office旧版本支持,eg .xls Excelpoi-ooxml提供microsoft office新版本支持,eg .xlsx Excel或者手动…