关于 static 和 final 的一些理解
2018-08-13 07:37:57来源:博客园 阅读 ()
今天主要回顾一下 static 和 final 这两个关键字。
package cn.tedu.staticx; public class StaticExer { public static void main(String[] args) { new SDemo(); new SDemo(); new SDemo(); System.out.println(SDemo.count); } } class SDemo{ static int count = 0;//如果不用 static 则每一个对象创建的时候,都会赋值为 0 ,然后再加一次,只能是1 public SDemo(){ count++; } }
package cn.tedu.staticx; public class StaticDemo5 { public static void main(String[] args) { System.out.println(D.i); } } class D{ static int j = 5;//先将静态变量i放入方法区,并且标记一个值为0;在初始化阶段,再检查i是否有初始值0,如果没有初始值,则将标记值0赋值进去; //如果有初始值,则将初始值设置进去,抛弃标记值,然后顺次执行静态代码块,将静态变量i的值改为7 { j = 7; } //在类加载阶段,由于i处于一个标记值状态,所以实际上是无值的,所以此时不允许直接操作 static{ //先将静态变量i放入方法区,并且标记一个值为0;在初始化阶段,先执行静态代码块,对于i=7;并不是将7直接赋值给i;检查i是否有初始值, //如果没有初始值,则将标记值7赋值进去;如果有初始值则抛弃标记值,将初始值5赋值进去 i = 7; i = 9; //i -= 5;//进行运算就报错了,类在加载的时候是分了 5 个阶段:准备(加载这个类中的静态变量并标记默认值) -> 初始化(初始化静态变量,执行静态代码块) } static int i = 5; }
package cn.tedu.finalx; import java.util.Arrays; public class FinalDemo1 { public static void main(String[] args) { //final int i = 9; final int i; i = 13; final int[] arr = {3,6,1,7,0}; arr[1] = 8;//并没有报错,因为 arr 是一个对象 -> 地址不可变 //arr = new arr[4];//报错了,地址改变了 //arr.length = 9; //changeValue(i); System.out.println(i); expand(arr);//一开始主函数中有一个 arr 了,指向堆内存中的某个地址,当调用这个方法后,方法中的 arr 会指向这个地址,但改变后, System.out.println(arr.length);//方法中的arr指向新的地址,而主函数中的那个还是指向原来的地址(方法用完就释放堆内存中的资源) } //在这个方法中并没有将参数i定义为常量 public static void changeValue(int i){ i++; } public static void expand(int[] arr){ arr = Arrays.copyOf(arr, arr.length * 2); } } class A{ //定义成员常量 //成员常量 i 在对象完成创建之前给值 final int i = 6; int j; //静态常量必须在类加载完成之前给值 static final int k = 0; { //i = 10; } public A(){ //i = 10; } } /*class A{ private final int i; { //i = 4; } public A(){ this(5);//是对的 //this.i = 0;也是对的,两次调用是互不影响的 }//无参构造中未初始化常量 public A(int i){ this.i = i;//常量的二次赋值 } } */
---恢复内容结束---
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 面试官:兄弟,说说Java的static关键字吧 2020-06-04
- 面对对象(2) 2020-05-28
- 怎么自学JAVA开发? 2020-05-22
- 关于序列化的 10 几个问题,你顶得住不?.md 2020-05-19
- Mockito不能mock final类的解决办法 2020-05-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash