java基础:为什么有的对象只声明不初始化不会报错?
2015-07-24 11:09
447 查看
最近在学习多线程,在学习过程中遇到一个与Java基础相关的问题,如下有注释的那行,为什么对象只声明不初始化不会报错?
public class PrintNumber {
public int i;
public static void main(String[] args) {
PrintNumber printNumber = new PrintNumber();
Thread thread1 = new NumberThread("thread-1",printNumber);
Thread thread2 = new NumberThread("thread-2",printNumber);
thread1.start();
thread2.start();
}
}
class NumberThread extends Thread{
PrintNumber printNumber; //不用初始化???
public NumberThread(String name,PrintNumber printNumber){
super(name);
this.printNumber = printNumber;
}
@Override
public void run() {
for(;printNumber.i<1000;printNumber.i++)
System.out.println(this.getName()+":"+printNumber.i);
}
}
问题解决:
如果一个变量在类中定义,那么这个变量就是全局变量;而在类中的方法、函数中定义的变量就是局部变量。在Java中,全局变量就是在类的整个范围之内,都有效的变量。而局部变量就是在类中某个方法函数内或某个子类内,有效的变量。全局变量可以不用进行初始化赋值工作,而局部变量必须要进行初始化赋值工作。
参考资料:http://www.douban.com/note/281043578/
这是自己的第一篇博文,希望自己能养成总结知识,记录知识的好习惯,也希望自己能原创更有深度的文章!
public class PrintNumber {
public int i;
public static void main(String[] args) {
PrintNumber printNumber = new PrintNumber();
Thread thread1 = new NumberThread("thread-1",printNumber);
Thread thread2 = new NumberThread("thread-2",printNumber);
thread1.start();
thread2.start();
}
}
class NumberThread extends Thread{
PrintNumber printNumber; //不用初始化???
public NumberThread(String name,PrintNumber printNumber){
super(name);
this.printNumber = printNumber;
}
@Override
public void run() {
for(;printNumber.i<1000;printNumber.i++)
System.out.println(this.getName()+":"+printNumber.i);
}
}
问题解决:
如果一个变量在类中定义,那么这个变量就是全局变量;而在类中的方法、函数中定义的变量就是局部变量。在Java中,全局变量就是在类的整个范围之内,都有效的变量。而局部变量就是在类中某个方法函数内或某个子类内,有效的变量。全局变量可以不用进行初始化赋值工作,而局部变量必须要进行初始化赋值工作。
参考资料:http://www.douban.com/note/281043578/
这是自己的第一篇博文,希望自己能养成总结知识,记录知识的好习惯,也希望自己能原创更有深度的文章!
相关文章推荐
- 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制
- java判断一个文件是否为二进制文件的方法
- Java byte与char的区别
- java.util.logging使用笔记2
- Eclipse快捷键
- Java学习笔记2:使用replaceAll()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
- java 刷新(即flush)
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- java.util 和 java.awt的区别 java.util.list 和 java.awt.list的区别
- eclipse生成的各种文件
- springmvc 在方法上使用 @ModelAttribute 注解
- struts2流程
- mybatis与hibernate区别
- java中的匿名内部类总结
- java的ThreadLocal
- struts2 tutor
- Quartz spring
- 《Java疯狂讲义》(第3版)学习笔记 1 - 如何学习Java
- 深入浅出Java回调机制
- eclipse无法查看源代码(包括导入源码和导入后无法查看的情况)