java数据初始化
来源:互联网 发布:74ls373与51单片机地址 编辑:程序博客网 时间:2024/05/09 11:51
最近在写代码时,发现一个问题:同样的int数据类型,声明时,有时需要初始化,有时不用初始化(java自动帮你初始化)。虽然这个小问题编译器会自动提示错误,但作为一个程序员来说,数据类型什么时候会被自动初始化,还是了解清楚为好。下面开始探索:
1.基本数据类型的初始化
示例代码:
public class Test03 {public static void main(String args[]){int i;System.out.println(i);}}运行时会出现以下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: num1 cannot be resolved or is not a fieldat com.fcy.test01.Test03.main(Test03.java:16)
解决方案:只要将变量i初始化即可,即:
public class Test03 {public static void main(String args[]){int i =0;System.out.println(i);}}
修改代码后,程序输出结果:0
再看下面的代码:
class A{String name;int age;public A(String name){this.name=name;}}public class Test03 {public static void main(String args[]){A a=new A("aaaa");System.out.println(a.age);}}
此时,创建对象时,对象实例a中的age属性并为赋初值,编译器也没有报错,运行结果:0
总结:java中,类的成员变量不用赋初始值,系统会自动赋值,byte、short、int、long默认初值为0,float、double默认初值为0.0,char默认初值为\u0000,boolean默认初值为false;而局部变量必须赋初始值,否则就会报错。
2.数组初始化
请看以下代码:
class A{int a[];Integer b[];public A(){a=new int[2];b=new Integer[2];}}public class Test03 {public static void main(String args[]){A a=new A();System.out.println(a.a[1]);//输出0System.out.println(a.b[1]);//输出nullint c[]=new int[2];Integer d[]=new Integer[2];System.out.println(c[1]);//输出0System.out.println(d[1]);//输出null}}输出结果为:
0null0null
总结:无论数组作为类的成员变量还是局部变量,都会被初值化;对象(引用类型)的初始化默认值为null。
3.static类型变量初始化时机
有以下代码:
//代码1public class Test03 {int num1=num2+2;//num2的调用在声明之前int num2=12;public static void main(String args[]){System.out.println(new Test03().num1);}}
//代码public class Test03 {int num1=num2+2;//num2的调用在声明之前static int num2=12;public static void main(String args[]){System.out.println(new Test03().num1);}}
两段代码中,num2的调用都在声明前,所不同的是,代码2中将num2声明成了static变量,那么以上代码有没有错误呢?
以上代码中,代码1是有错的,错误很显然:调用num2时,num2并未声明,不能调用;代码2则是正确的,static类型的变量、方法在对象创建前面初始化,而成员变量随着类的创建初始化,所以在num1调用num2时,num2已经存在于内存中,当然可以调用了。
注意:static类型变量、方法属于类,不能在方法中定义static变量,如以下代码是错误的:
public static void main(String args[]){static int e=3;A a=new A();System.out.println(new Test03().num1);}
4.static类型初始化时机
请看如下代码:
class A{int a[];Integer b[];public A(){a=new int[2];b=new Integer[2];System.out.println("构造方法");}{System.out.println("构造块"); }static{System.out.println("静态构造块");}}//代码public class Test03 {int num1=num2+2;//num2的调用在声明之前static int num2=12;public static void main(String args[]){A a=null;System.out.println("初始化对象实例");a=new A();}}
运行结果:
初始化对象实例静态构造块构造块构造方法从以上结果可以看出,static类型在对象实例创建后才会被初始化,且初始化顺序如下:
静态构造->块构造块->构造方法
0 0
- Java初始化servlet数据
- java数据初始化
- java数据的初始化
- Java中数据初始化
- Java数据初始化顺序
- java static数据的初始化
- Java数据初始化的问题
- java静态数据的初始化
- Java 数据初始化(一)
- Java 数据初始化(二)
- java数据成员初始化实例
- android java 初始化子窗口中的数据
- [Think in java]静态数据的初始化
- java三种初始化数据域方法
- Thinking in java 之'数据初始化'
- JAVA中初始化数据的方法?
- 数据初始化
- java属性初始化初始化
- 全面攻破java笔试
- PHP安装环境,服务器不支持curl_exec的解决办法
- 线段树扫描线(体积并)hdu3642
- 官方 raywenderlich.com Swift 编程风格指南
- Android中的http://tempuri.org 是什么?
- java数据初始化
- error MSB6006: "cmd.exe" exited with code 4.解决方法
- SQLite数据库存储数据
- 2014.7.8模拟赛【词编码】
- OC 内存管理(初级)
- 基于ffmpeg+SDL2 实现简单rtsp播放器
- C++ -- 数组 vs 指针
- AlertControl警示控件——如QQ右下角弹出消息提示,过一段时间消失
- keychain