------- android培训、java培训、期待与您交流! ----------
1.static(静态)关键字
- 作用:用于修饰成员(成员变量和成员方法)。
- 被修饰后成员的特点:
- 随着类的加载而加载。
-
优先于对象存在。
- 被所有对象所共享。
- 可以直接被类名调用:类名.静态成员。
- 使用注意
- 静态方法只能访问静态成员。
- 静态方法中不可以写this,super关键字。
- 主函数是静态的。
- 静态的好处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每个对象都存储一份。。可以直接用类名调用。
- 静态的弊端:生命周期过长,访问出现局限性。
- 什么时候使用静态?
- 要从两方面下手
- 因为静态修饰的内容有成员变量和函数。
- 什么时候定义静态变量(类变量)呢?
- 当对象中出现共享数据时,共享数据不是指成员变量相同,而是变量的值相同。对象中的特有数据要定义成非静态存在于堆内存中。
- 什么时候定义静态函数呢?
- 当功能内部没有访问到非静态数据(对象的特有数据)。那么该功能可以定义成静态的。
-
方法区:
- 静态方法存在于方法区
- 也叫做:共享区,数据区。
- 方法区还有一些更细节的划分
- 存在:类中的方法,类中的共享数据,
- 方法是类的共性方法,对象的特有数据是每个对象都不同的。
- 方法区的数据(类变量,也就是静态变量)随着类的建立而建立,随着类的消失而消失。而实例变量随着对象的建立而存在于对内存中,随着对象的消失而消失。
- 静态的应用
- 当多个应用程序的功能重复时,可以把方法提取出来,建立一个Tool类。
- 虽然可以通过建立arrayTool的对象使用这些工具方法,对数组进行操作,但是发现了问题
- 对象是用于封装数据的,开始arrayTool对象中并未纷杂U那个特有数据。
- 操作数组的每一个方法都没有用到arrayTool对象中的特有数据。
- 这时就考虑,让程序更严谨,是不需要对象的。
- 可以将arrayTool中的方法都定义成static的。直接通过类名调用即可。可以将构造函数私有防止被建立对象。
2.
静态代码块
- 静态代码块的格式:
- 特点:随着类的家在而执行,只执行一次。
- 作用:给类初始化,并且不需要调用,不论位置前后都优先于mian函数。
- 用到类中的内容的时候,类才会初始化,new 类(使用了构造方法)或类名.方法都是。值定义引用是不会加载类的,例如类 类名=null就不加载。
- 静态代码块的考试
- 静态代码块、构造代码块、构造函数一起出现,前者随着类初始化,后者随着对象初始化。疑问?静态代码块和构造代码块次序不同时,是按代码顺序初始化呢还是先初始化类在初始化对象这种方式。
- 对象的初始化过程。
- 创建对象时,new在内存中做了什么事情。
- person p =new person();
- new对象的时候会将person这个class从硬盘当中通过jvm加载进内存,开辟了堆内存空间。这时候栈内存中,主函数里有个p引用。
- 静态代码块被执行。
- 对象空间开辟,成员变量进入内存,默认初始化,例如int初始化为0,字符串初始化为null。然后是显示初始化,成员变量开始赋值。
- 接下来构造代码块初始化,再后构造函数初始化。
- 将内存地址付给栈内存中的p变量。
- 对象调用成员过程
- person p = new person("zhangsan",20);
- p.setName(“lisi”);
- 方法区优先于对象存在,静态方法、静态变量先初始化。
- 栈里面main先执行,有一个引用变量p,堆里面有一个 person对象,对象默认初始化后再显示初始化,然后p指向对象。
- 对象成员(方法、变量)加载进方法区。
- 对象方法中如果含有局部变量参数,那么这个方法也要进入栈中开辟空间。方法一开辟空间内部就有个this的引用,谁调用这个方法,this就是堆中的这个对象,然后栈中的方法的局部变量修改堆中的成员变量。
分享到:
相关推荐
18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static...
建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与static关键字相关的高级主题,如静态代码块、静态内部类和静态导入等内容。 如有疑问,可以参考Java官方文档或向技术论坛寻求帮助,进一步加深对static...
面向对象基础-static关键字
Java面向对象(高级)-- static关键字的使用
黑马程序员 - Java基础教学 - 06 - 面向对象(2) - 关于静态static的那些事.doc
java中的static关键字的作用及应用场景
clickhouse-common-static-21.9.4.35-2.x86_64.rpm
elfutils-libelf-devel-static-0.152-1.el6.i686.rpm
安装oracle用到的elfutils-libelf-devel-static-0.152-1.el6.i686.rpm,elfutils-libelf-devel-0.152-1.el6.x86_64.rpm
ffmpeg-4.0.2-win32-dev.zip ffmpeg-4.0.2-win32-shared.zip ffmpeg-4.0.2-win32-static.zip ffmpeg-4.0.2-win64-dev.zip ffmpeg-4.0.2-win64-shared.zip ffmpeg-4.0.2-win64-static.zip
elfutils-libelf-devel-static-0.125-3.el5.i386.rpm
Qt 5.9.9 Linux下静态编译的库,支持图形界面,编译出来的图形界面程序通过ldd查看依赖无Qt. 编译环境:Cent 7.6 x64, GCC 4.8.5, lic为2.17 自行编译请参考: ./configure -confirm-license -opensource -debug-...
计算机后端-PHP视频教程. php与mysql加强- 05. php加强57-static静态变量wmv.wmv
先编译静态、动态链接库、再编译静态链接可执行程序 1、arm平台 # ./configure --host=arm-unknown-linux-uclibcgnueabi --prefix=/usr --disable-warnings LDFLAGS="-s" # ./configure --host=arm-unknown-linux-...
giflib416-static-mtdll-debug.lib giflib416-static-mtdll.lib libjpeg8d-static-mtdll-debug.lib libjpeg8d-static-mtdll.lib liblept174-static-mtdll-debug.lib liblept174-static-mtdll.lib liblept174.dll ...
1.0.0-4.el6.i686.rpm openssl-devel-1.0.0-4.el6.i686.rpm openssl-static-1.0.0-4.el6.i686.rpm pkgconfig-0.23-9.1.el6.i686.rpm zlib-1.2.3-25.el6.i686.rpm zlib-devel-1.2.3-25.el6.i686.rpm zlib-static-...
Java程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、...
1-1 1.1.1 delete static-routes all 1-1 1.1.2 ip route-static. 1-2 1.1.3 ip route-static default-preference. 1-3 第2章 RIP配置命令... 2-1 2.1 RIP配置命令.. 2-1 2.1.1 checkzero. 2-1 2.1.2 default cost ...
contos文件
安装oracle时,必须要使用的依赖包,不使用或忽略一定会导致后期的依赖问题